diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 000000000..55531aa62
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,51 @@
+# .editorconfig
+
+# see http://EditorConfig.org
+
+# SPDX-FileCopyrightText: 2018-2025 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+# This is the file in the root of the project.
+# For sub folders you can have other files that override only some settings.
+# For these, this settings should be false.
+root=true
+
+[*]
+max_line_length=120
+# use spaces, not tabs.
+indent_style=space
+indent_size=4
+
+[*.yml]
+max_line_length=150
+
+charset=utf-8
+
+# Trimming is good for consistency
+trim_trailing_whitespace=true
+# I've seen cases where a missing new_line was ignored on *nix systems.
+# Never again with this setting!
+insert_final_newline=true
+
+[*.properties]
+# Exception for Java properties files should be encoded latin1 (aka iso8859-1)
+charset=latin1
+
+[*.{cmd,bat}]
+# batch files on Windows should stay with CRLF
+end_of_line=crlf
+
+[*.md]
+trim_trailing_whitespace=false
+
+[.drone.yml]
+indent_size=2
+
+[*.{kt,kts}]
+ktlint_code_style = android_studio
+# IDE does not follow this Ktlint rule strictly, but the default ordering is pretty good anyway, so let's ditch it
+ktlint_standard_import-ordering = disabled
+ktlint_standard_no-consecutive-comments = disabled
+ktlint_function_naming_ignore_when_annotated_with = Composable
+ij_kotlin_allow_trailing_comma = false
+ij_kotlin_allow_trailing_comma_on_call_site = false
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
index ef660e4ad..bd5dcceee 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java
@@ -534,8 +534,8 @@ private void setupNotesList() {
final var layoutManager = new LinearLayoutManager(this);
listView.setLayoutManager(layoutManager);
listView.addItemDecoration(new SectionItemDecoration(adapter,
- getResources().getDimensionPixelSize(R.dimen.spacer_activity_sides) + getResources().getDimensionPixelSize(R.dimen.spacer_1x) + getResources().getDimensionPixelSize(R.dimen.spacer_3x) + getResources().getDimensionPixelSize(R.dimen.spacer_2x),
- getResources().getDimensionPixelSize(R.dimen.spacer_3x),
+ getResources().getDimensionPixelSize(R.dimen.spacer_1hx) + getResources().getDimensionPixelSize(R.dimen.spacer_3x) + getResources().getDimensionPixelSize(R.dimen.spacer_2x),
+ getResources().getDimensionPixelSize(R.dimen.spacer_2x),
getResources().getDimensionPixelSize(R.dimen.spacer_1x),
0
));
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java
index f8936e4f9..ae2c9d2fb 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java
@@ -40,12 +40,10 @@
import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemGridBinding;
import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemGridOnlyTitleBinding;
import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemWithExcerptBinding;
-import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemWithoutExcerptBinding;
import it.niedermann.owncloud.notes.databinding.ItemNotesListSectionItemBinding;
import it.niedermann.owncloud.notes.main.items.grid.NoteViewGridHolder;
import it.niedermann.owncloud.notes.main.items.grid.NoteViewGridHolderOnlyTitle;
-import it.niedermann.owncloud.notes.main.items.list.NoteViewHolderWithExcerpt;
-import it.niedermann.owncloud.notes.main.items.list.NoteViewHolderWithoutExcerpt;
+import it.niedermann.owncloud.notes.main.items.list.NoteViewListHolder;
import it.niedermann.owncloud.notes.main.items.section.SectionItem;
import it.niedermann.owncloud.notes.main.items.section.SectionViewHolder;
import it.niedermann.owncloud.notes.persistence.entity.Note;
@@ -140,15 +138,10 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
BrandingUtil.of(color, parent.getContext()).platform.colorTextView(binding.sectionTitle);
return new SectionViewHolder(binding);
}
- case TYPE_NOTE_WITH_EXCERPT -> {
+ case TYPE_NOTE_WITH_EXCERPT, TYPE_NOTE_ONLY_TITLE, TYPE_NOTE_WITHOUT_EXCERPT -> {
ItemNotesListNoteItemWithExcerptBinding binding = ItemNotesListNoteItemWithExcerptBinding.inflate(inflater, parent, false);
BrandingUtil.of(color, parent.getContext()).notes.themeCard(binding.noteCard);
- return new NoteViewHolderWithExcerpt(binding, noteClickListener);
- }
- case TYPE_NOTE_ONLY_TITLE, TYPE_NOTE_WITHOUT_EXCERPT -> {
- ItemNotesListNoteItemWithoutExcerptBinding binding = ItemNotesListNoteItemWithoutExcerptBinding.inflate(inflater, parent, false);
- BrandingUtil.of(color, parent.getContext()).notes.themeCard(binding.noteCard);
- return new NoteViewHolderWithoutExcerpt(binding, noteClickListener);
+ return new NoteViewListHolder(binding, noteClickListener);
}
default -> {
throw new IllegalArgumentException("Not supported viewType: " + viewType);
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithoutExcerpt.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithoutExcerpt.java
deleted file mode 100644
index 266af03be..000000000
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithoutExcerpt.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Nextcloud Notes - Android Client
- *
- * SPDX-FileCopyrightText: 2020-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-License-Identifier: GPL-3.0-or-later
- */
-package it.niedermann.owncloud.notes.main.items.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.content.res.ResourcesCompat;
-
-import it.niedermann.owncloud.notes.R;
-import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemWithoutExcerptBinding;
-import it.niedermann.owncloud.notes.main.items.NoteViewHolder;
-import it.niedermann.owncloud.notes.persistence.entity.Note;
-import it.niedermann.owncloud.notes.shared.model.DBStatus;
-import it.niedermann.owncloud.notes.shared.model.NoteClickListener;
-
-public class NoteViewHolderWithoutExcerpt extends NoteViewHolder {
- @NonNull
- private final ItemNotesListNoteItemWithoutExcerptBinding binding;
-
- private final int defaultSwipeBackgroundColor;
- private final int starSwipeBackgroundColor;
- private final int deleteSwipeBackgroundColor;
-
- public NoteViewHolderWithoutExcerpt(@NonNull ItemNotesListNoteItemWithoutExcerptBinding binding, @NonNull NoteClickListener noteClickListener) {
- super(binding.getRoot(), noteClickListener);
- this.binding = binding;
- Resources resources = binding.getRoot().getContext().getResources();
- this.defaultSwipeBackgroundColor = ResourcesCompat.getColor(resources, R.color.transparent, null);
- this.starSwipeBackgroundColor = ResourcesCompat.getColor(resources, R.color.bg_warning, null);
- this.deleteSwipeBackgroundColor = ResourcesCompat.getColor(resources, R.color.bg_attention, null);
- }
-
- public void showSwipe(float dX) {
- if (dX == 0.0f) {
- binding.noteFavoriteLeft.setVisibility(View.INVISIBLE);
- binding.noteDeleteRight.setVisibility(View.INVISIBLE);
- binding.noteSwipeFrame.setCardBackgroundColor(defaultSwipeBackgroundColor);
- } else {
- boolean left = dX > 0;
- binding.noteFavoriteLeft.setVisibility(left ? View.VISIBLE : View.INVISIBLE);
- binding.noteDeleteRight.setVisibility(left ? View.INVISIBLE : View.VISIBLE);
- binding.noteSwipeFrame.setCardBackgroundColor(left ? starSwipeBackgroundColor : deleteSwipeBackgroundColor);
- }
- }
-
- public void bind(boolean isSelected, @NonNull Note note, boolean showCategory, int color, @Nullable CharSequence searchQuery) {
- super.bind(isSelected, note, showCategory, color, searchQuery);
- @NonNull final Context context = itemView.getContext();
- binding.noteCard.setAlpha(DBStatus.LOCAL_DELETED.equals(note.getStatus()) ? 0.5f : 1.0f);
- bindCategory(context, binding.noteCategory, showCategory, note.getCategory(), color);
- bindStatus(binding.noteStatus, note.getStatus(), color);
- bindFavorite(binding.noteFavorite, note.getFavorite());
- bindModified(binding.noteModified, note.getModified());
- bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), color);
- }
-
- @NonNull
- public View getNoteSwipeable() {
- return binding.noteCard;
- }
-}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithExcerpt.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java
similarity index 83%
rename from app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithExcerpt.java
rename to app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java
index b2b245a02..087ee4739 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewHolderWithExcerpt.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java
@@ -21,7 +21,7 @@
import it.niedermann.owncloud.notes.shared.model.DBStatus;
import it.niedermann.owncloud.notes.shared.model.NoteClickListener;
-public class NoteViewHolderWithExcerpt extends NoteViewHolder {
+public class NoteViewListHolder extends NoteViewHolder {
@NonNull
private final ItemNotesListNoteItemWithExcerptBinding binding;
@@ -30,7 +30,7 @@ public class NoteViewHolderWithExcerpt extends NoteViewHolder {
private final int deleteSwipeBackgroundColor;
- public NoteViewHolderWithExcerpt(@NonNull ItemNotesListNoteItemWithExcerptBinding binding, @NonNull NoteClickListener noteClickListener) {
+ public NoteViewListHolder(@NonNull ItemNotesListNoteItemWithExcerptBinding binding, @NonNull NoteClickListener noteClickListener) {
super(binding.getRoot(), noteClickListener);
this.binding = binding;
Resources resources = binding.getRoot().getContext().getResources();
@@ -62,7 +62,17 @@ public void bind(boolean isSelected, @NonNull Note note, boolean showCategory, @
bindModified(binding.noteModified, note.getModified());
bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), color);
- bindSearchableContent(context, binding.noteExcerpt, searchQuery, note.getExcerpt(), color);
+ if (note.getExcerpt().isEmpty()) {
+ bindSearchableContent(
+ context,
+ binding.noteExcerpt,
+ searchQuery,
+ context.getString(R.string.listview_no_content),
+ color
+ );
+ } else {
+ bindSearchableContent(context, binding.noteExcerpt, searchQuery, note.getExcerpt(), color);
+ }
}
@NonNull
diff --git a/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml b/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml
index a18f531a4..e83063594 100644
--- a/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml
+++ b/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml
@@ -68,21 +68,23 @@
@@ -101,9 +103,10 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
- android:paddingVertical="@dimen/spacer_2x"
+ android:paddingTop="@dimen/spacer_1x"
+ android:paddingBottom="@dimen/spacer_list_card"
android:paddingStart="@dimen/zero"
- android:paddingEnd="@dimen/spacer_2x">
+ android:paddingEnd="@dimen/spacer_list_card">
-
diff --git a/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml b/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml
deleted file mode 100644
index 8f0ba83fd..000000000
--- a/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/item_notes_list_section_item.xml b/app/src/main/res/layout/item_notes_list_section_item.xml
index 71f9935e8..def9f06da 100644
--- a/app/src/main/res/layout/item_notes_list_section_item.xml
+++ b/app/src/main/res/layout/item_notes_list_section_item.xml
@@ -2,7 +2,7 @@
+ android:textSize="@dimen/primary_font_size"
+ android:textStyle="bold" />
diff --git a/app/src/main/res/values-v31/dimens.xml b/app/src/main/res/values-v31/dimens.xml
index a6cdbf9fe..ee5173986 100644
--- a/app/src/main/res/values-v31/dimens.xml
+++ b/app/src/main/res/values-v31/dimens.xml
@@ -7,42 +7,8 @@
~ SPDX-License-Identifier: GPL-3.0-or-later
-->
-
- 2dp
- 4dp
- 8dp
- 16dp
- 24dp
- 40dp
-
- 40dp
-
- 0dp
-
-
- 100dp
- 42dp
-
-
- @dimen/spacer_2x
-
- 16sp
- 14sp
-
-
- 16sp
- 18sp
- 22sp
-
- - 1.15
-
@android:dimen/system_app_widget_background_radius
@android:dimen/system_app_widget_background_radius
@android:dimen/system_app_widget_inner_radius
- @dimen/spacer_1x
- 4dp
- 4dp
- 26dp
- 20dp
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 8a62962a1..2b7ce7fcd 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -20,6 +20,7 @@
24dp
36dp
40dp
+ 12dp
140dp
24dp
180dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3babf2b94..dad9cb358 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -175,6 +175,7 @@
Last week
This month
Last month
+ No content
Display mode for notes
Notes opening behaviour