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