From b42e9b9f4d35603d9a8d6d691d24c402d4af0f4d Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Thu, 12 Feb 2026 09:18:49 +0100 Subject: [PATCH 1/3] feat(note-list): add share icon Signed-off-by: alperozturk96 --- .../owncloud/notes/main/items/NoteViewHolder.java | 11 +++++++++++ .../notes/main/items/grid/NoteViewGridHolder.java | 1 + .../items/grid/NoteViewGridHolderOnlyTitle.java | 1 + .../notes/main/items/list/NoteViewListHolder.java | 2 ++ .../res/layout/item_notes_list_note_item_grid.xml | 12 ++++++++++++ .../item_notes_list_note_item_grid_only_title.xml | 12 ++++++++++++ .../item_notes_list_note_item_with_excerpt.xml | 14 ++++++++++++++ app/src/main/res/values/dimens.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + 9 files changed, 56 insertions(+) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index 5ea7c6134..43536e73c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -112,6 +112,17 @@ protected void bindSearchableContent(@NonNull Context context, @NonNull TextView } } + protected void bindNoteSharedIcon(@NonNull Context context, boolean shared, @NonNull ImageView noteShareIcon, int color) { + if (shared) { + noteShareIcon.setVisibility(VISIBLE); + } else { + noteShareIcon.setVisibility(INVISIBLE); + } + + final var util = BrandingUtil.of(color, context); + util.platform.colorImageView(noteShareIcon,ColorRole.PRIMARY); + } + public abstract void showSwipe(float dX); @Nullable diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolder.java index dea52f6be..67c5c53d9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolder.java @@ -55,6 +55,7 @@ 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().replace(EXCERPT_LINE_SEPARATOR, "\n"), color); + bindNoteSharedIcon(context, note.isShared(), binding.noteShared, color); binding.noteExcerpt.setVisibility(TextUtils.isEmpty(note.getExcerpt()) ? GONE : VISIBLE); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolderOnlyTitle.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolderOnlyTitle.java index eb65fadbc..0699dd237 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolderOnlyTitle.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/grid/NoteViewGridHolderOnlyTitle.java @@ -46,6 +46,7 @@ public void bind(boolean isSelected, @NonNull Note note, boolean showCategory, i bindFavorite(binding.noteFavorite, note.getFavorite()); bindModified(binding.noteModified, note.getModified()); bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), color); + bindNoteSharedIcon(context, note.isShared(), binding.noteShared, color); } @Nullable diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java index 08bf2c847..771db1737 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/list/NoteViewListHolder.java @@ -73,6 +73,8 @@ public void bind(boolean isSelected, @NonNull Note note, boolean showCategory, @ } else { bindSearchableContent(context, binding.noteExcerpt, searchQuery, note.getExcerpt(), color); } + + bindNoteSharedIcon(context, note.isShared(), binding.noteShared, color); } @NonNull diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid.xml b/app/src/main/res/layout/item_notes_list_note_item_grid.xml index bb6ca6e8e..1dac2aec7 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_grid.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_grid.xml @@ -125,6 +125,18 @@ android:layout_marginEnd="@dimen/spacer_2x" tools:text="27.11." /> + + diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml index ac5e4f7b4..b18cb4a35 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml @@ -114,6 +114,18 @@ android:layout_marginEnd="@dimen/spacer_2x" tools:text="27.11." /> + + 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 492941213..d71cc5b6b 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 @@ -111,6 +111,7 @@ + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 2b7ce7fcd..bf71a2fe2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -26,6 +26,8 @@ 180dp 100dp + 16dp + 40dp 16dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f4bd215d..683eea1e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,6 +32,7 @@ Favorite Preview Share + Shared note Loading… From 8237077a3558a757e3e6d1aa810a62f9ab2c0e05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alper=20=C3=96zt=C3=BCrk?= <67455295+alperozturk96@users.noreply.github.com> Date: Thu, 12 Feb 2026 09:36:31 +0100 Subject: [PATCH 2/3] Update app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tobias Kaminsky Signed-off-by: Alper Öztürk <67455295+alperozturk96@users.noreply.github.com> --- .../it/niedermann/owncloud/notes/main/items/NoteViewHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index 43536e73c..cfd8f9d77 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -116,7 +116,7 @@ protected void bindNoteSharedIcon(@NonNull Context context, boolean shared, @Non if (shared) { noteShareIcon.setVisibility(VISIBLE); } else { - noteShareIcon.setVisibility(INVISIBLE); + noteShareIcon.setVisibility(GONE); } final var util = BrandingUtil.of(color, context); From 8fe8c49733c08ac7fe61b5ebae7ade58c3180b20 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Thu, 12 Feb 2026 10:04:18 +0100 Subject: [PATCH 3/3] add note shared icon click Signed-off-by: alperozturk96 --- .../owncloud/notes/main/MainActivity.java | 11 +++++++++++ .../main/MultiSelectedActionModeCallback.java | 6 +----- .../owncloud/notes/main/items/NoteViewHolder.java | 9 ++++++--- .../owncloud/notes/share/NoteShareActivity.java | 10 ++++++++++ .../notes/shared/model/NoteClickListener.java | 2 ++ .../res/layout/item_notes_list_note_item_grid.xml | 14 +++++++++----- .../item_notes_list_note_item_grid_only_title.xml | 14 +++++++++----- .../item_notes_list_note_item_with_excerpt.xml | 13 +++++++++---- app/src/main/res/values/dimens.xml | 2 +- 9 files changed, 58 insertions(+), 23 deletions(-) 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 1a235f4c1..9b07f2d4e 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 @@ -113,6 +113,7 @@ import it.niedermann.owncloud.notes.persistence.CapabilitiesWorker; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.Note; +import it.niedermann.owncloud.notes.share.NoteShareActivity; import it.niedermann.owncloud.notes.shared.model.CategorySortingMethod; import it.niedermann.owncloud.notes.shared.model.IResponseCallback; import it.niedermann.owncloud.notes.shared.model.NavigationCategory; @@ -913,6 +914,16 @@ public void onNoteFavoriteClick(int position, View view) { }}); } + @Override + public void openShare(int position) { + if (adapter.getItem(position) instanceof Note note) { + mainViewModel.getCurrentAccount().observe(this, (account) -> { + final Intent intent = NoteShareActivity.getActivityStartIntent(note, account, this); + startActivity(intent); + }); + } + } + private void updateToolbars(boolean enableSearch) { activityBinding.searchBar.searchBarWrapper.setVisibility(enableSearch ? GONE : VISIBLE); activityBinding.searchToolbar.setVisibility(enableSearch ? VISIBLE : GONE); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java index 1f3d33d80..a80ac4325 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MultiSelectedActionModeCallback.java @@ -166,11 +166,7 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { currentAccount$.removeObservers(lifecycleOwner); executor.submit(() -> {{ final var note = mainViewModel.getFullNote(selection.get(0)); - Bundle bundle = new Bundle(); - bundle.putSerializable(NoteShareActivity.ARG_NOTE, note); - bundle.putSerializable(NoteShareActivity.ARG_ACCOUNT, account); - Intent intent = new Intent(mainActivity, NoteShareActivity.class); - intent.putExtras(bundle); + final Intent intent = NoteShareActivity.getActivityStartIntent(note, account, mainActivity); mainActivity.startActivity(intent); }}); }); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index cfd8f9d77..706c5bd26 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -6,6 +6,7 @@ */ package it.niedermann.owncloud.notes.main.items; +import static android.view.View.GONE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; import static com.nextcloud.android.common.ui.util.PlatformThemeUtil.isDarkMode; @@ -23,6 +24,7 @@ import androidx.recyclerview.selection.ItemDetailsLookup; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.button.MaterialButton; import com.google.android.material.chip.Chip; import com.google.android.material.progressindicator.CircularProgressIndicator; import com.nextcloud.android.common.core.utils.DateFormatter; @@ -76,7 +78,7 @@ protected void bindStatus(CircularProgressIndicator noteSyncStatus, DBStatus sta protected void bindCategory(@NonNull Context context, @NonNull TextView noteCategory, boolean showCategory, @NonNull String category, int color) { if (!showCategory || category.isEmpty()) { - noteCategory.setVisibility(View.GONE); + noteCategory.setVisibility(GONE); } else { noteCategory.setText(category); @@ -112,15 +114,16 @@ protected void bindSearchableContent(@NonNull Context context, @NonNull TextView } } - protected void bindNoteSharedIcon(@NonNull Context context, boolean shared, @NonNull ImageView noteShareIcon, int color) { + protected void bindNoteSharedIcon(@NonNull Context context, boolean shared, @NonNull MaterialButton noteShareIcon, int color) { if (shared) { noteShareIcon.setVisibility(VISIBLE); + noteShareIcon.setOnClickListener(view -> noteClickListener.openShare(getLayoutPosition())); } else { noteShareIcon.setVisibility(GONE); } final var util = BrandingUtil.of(color, context); - util.platform.colorImageView(noteShareIcon,ColorRole.PRIMARY); + util.material.colorMaterialButtonContent(noteShareIcon, ColorRole.PRIMARY); } public abstract void showSwipe(float dX); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java index f7336dd38..a69cc8c0c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java @@ -106,6 +106,16 @@ public class NoteShareActivity extends BrandedActivity implements ShareeListAdap private ActivityResultLauncher resultLauncher; private final List shares = Collections.synchronizedList(new ArrayList<>()); + public static Intent getActivityStartIntent(@NonNull Note note, @NonNull Account account, @NonNull Activity activity) { + Bundle bundle = new Bundle(); + bundle.putSerializable(NoteShareActivity.ARG_NOTE, note); + bundle.putSerializable(NoteShareActivity.ARG_ACCOUNT, account); + + Intent intent = new Intent(activity, NoteShareActivity.class); + intent.putExtras(bundle); + return intent; + } + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/NoteClickListener.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/NoteClickListener.java index 49c5e7cc8..0f1a4084f 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/shared/model/NoteClickListener.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/model/NoteClickListener.java @@ -12,4 +12,6 @@ public interface NoteClickListener { void onNoteClick(int position, View v); void onNoteFavoriteClick(int position, View v); + + void openShare(int position); } \ No newline at end of file diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid.xml b/app/src/main/res/layout/item_notes_list_note_item_grid.xml index 1dac2aec7..2191dba0c 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_grid.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_grid.xml @@ -125,16 +125,20 @@ android:layout_marginEnd="@dimen/spacer_2x" tools:text="27.11." /> - diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml index b18cb4a35..363a4306e 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml @@ -114,16 +114,20 @@ android:layout_marginEnd="@dimen/spacer_2x" tools:text="27.11." /> - 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 d71cc5b6b..ac3482c03 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 @@ -168,16 +168,21 @@ tools:maxLength="15" tools:text="@tools:sample/lorem/random" /> - + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index bf71a2fe2..b42e9c41b 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -26,7 +26,7 @@ 180dp 100dp - 16dp + 18dp 40dp 16dp