From 63b3974739fae8e2825ebb7dbf08f7ad13b47d41 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:11:41 +0200 Subject: [PATCH 1/6] Added menu item Signed-off-by: daniele-verducci --- .../main/MultiSelectedActionModeCallback.java | 2 ++ app/src/main/res/drawable/ic_activity.xml | 16 ++++++++++++++++ .../main/res/menu/menu_list_context_multiple.xml | 7 +++++++ app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 27 insertions(+) create mode 100644 app/src/main/res/drawable/ic_activity.xml 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 a80ac4325..01f169c2b 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 @@ -186,6 +186,8 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { .show(fragmentManager, CategoryDialogFragment.class.getSimpleName()); }); return true; + } else if (itemId == R.id.menu_activities) { + } return false; } diff --git a/app/src/main/res/drawable/ic_activity.xml b/app/src/main/res/drawable/ic_activity.xml new file mode 100644 index 000000000..a9505658c --- /dev/null +++ b/app/src/main/res/drawable/ic_activity.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/menu/menu_list_context_multiple.xml b/app/src/main/res/menu/menu_list_context_multiple.xml index 1a8491212..8ea26af35 100644 --- a/app/src/main/res/menu/menu_list_context_multiple.xml +++ b/app/src/main/res/menu/menu_list_context_multiple.xml @@ -22,6 +22,13 @@ android:title="@string/menu_share" app:showAsAction="ifRoom" /> + + Share expires on %1$s Dismiss Account not found! + + Activities From f8199cc647271f31e9ab1e529c761186df536262 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:12:16 +0200 Subject: [PATCH 2/6] Item detail layout and resources Signed-off-by: daniele-verducci --- .../main/res/layout/activity_item_details.xml | 117 ++++++++++++++++++ app/src/main/res/values-night/colors.xml | 3 + app/src/main/res/values/colors.xml | 5 + app/src/main/res/values/dimens.xml | 2 + app/src/main/res/values/strings.xml | 6 + 5 files changed, 133 insertions(+) create mode 100644 app/src/main/res/layout/activity_item_details.xml diff --git a/app/src/main/res/layout/activity_item_details.xml b/app/src/main/res/layout/activity_item_details.xml new file mode 100644 index 000000000..af3c40443 --- /dev/null +++ b/app/src/main/res/layout/activity_item_details.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 0857691c8..4e43ed338 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -45,4 +45,7 @@ @color/material_dynamic_secondary20 @color/transparent + + #49454F + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f3a39be8a..c5649baf1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -59,4 +59,9 @@ @color/high_emphasis_text @color/transparent + + #CAC4D0 + @color/secondary_text_color + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index b42e9c41b..d842dc8ae 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -82,4 +82,6 @@ 56dp 60dp 24dp + + @dimen/spacer_2x diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8c8e50631..1df0837c9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -539,4 +539,10 @@ Account not found! Activities + Note.md + Favorite + 389 KB +  • + 12:23:45 + From 0c484372d3681e5f2a39e9cf614227b36da13fe9 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:22:17 +0200 Subject: [PATCH 3/6] Stubbed activities fragment, implemented ItemDetailsActivity with pager and fragments Signed-off-by: daniele-verducci --- .../notes/activities/ActivitiesFragment.kt | 28 ++++++++++++ .../notes/itemdetails/ItemDetailsActivity.kt | 44 +++++++++++++++++++ .../main/res/layout/fragment_activities.xml | 11 +++++ app/src/main/res/values/strings.xml | 2 + 4 files changed, 85 insertions(+) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/activities/ActivitiesFragment.kt create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt create mode 100644 app/src/main/res/layout/fragment_activities.xml diff --git a/app/src/main/java/it/niedermann/owncloud/notes/activities/ActivitiesFragment.kt b/app/src/main/java/it/niedermann/owncloud/notes/activities/ActivitiesFragment.kt new file mode 100644 index 000000000..f95cb1448 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/activities/ActivitiesFragment.kt @@ -0,0 +1,28 @@ +package it.niedermann.owncloud.notes.activities + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import it.niedermann.owncloud.notes.branding.BrandedFragment +import it.niedermann.owncloud.notes.databinding.FragmentActivitiesBinding + +class ActivitiesFragment : BrandedFragment() { + + lateinit var binding : FragmentActivitiesBinding + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + binding = FragmentActivitiesBinding.inflate(inflater) + return super.onCreateView(inflater, container, savedInstanceState) + } + + override fun applyBrand(color: Int) { + // TODO + } + + companion object { + fun newInstance() : ActivitiesFragment { + return ActivitiesFragment() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt b/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt new file mode 100644 index 000000000..59a8c3efe --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt @@ -0,0 +1,44 @@ +package it.niedermann.owncloud.notes.itemdetails + +import android.os.Bundle +import androidx.viewpager2.adapter.FragmentStateAdapter +import com.google.android.material.tabs.TabLayoutMediator +import it.niedermann.owncloud.notes.R +import it.niedermann.owncloud.notes.activities.ActivitiesFragment +import it.niedermann.owncloud.notes.branding.BrandedActivity +import it.niedermann.owncloud.notes.branding.BrandedFragment +import it.niedermann.owncloud.notes.databinding.ActivityItemDetailsBinding +import it.niedermann.owncloud.notes.share.NoteShareActivity + +class ItemDetailsActivity : BrandedActivity() { + + lateinit var binding : ActivityItemDetailsBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityItemDetailsBinding.inflate(layoutInflater) + setContentView(binding.root) + + val pages = listOf>( + Pair(getString(R.string.activities_title), ActivitiesFragment.newInstance()) + //Pair(getString(R.string.share), NoteShareFragment.newInstance()) + ) + + binding.pager.adapter = PagerAdapter(pages) + TabLayoutMediator(binding.tabLayout, binding.pager) { tab, position -> + tab.text = pages[position].first + }.attach() + } + + override fun applyBrand(color: Int) { + // TODO + } + + private inner class PagerAdapter(val fragments: List>) : + FragmentStateAdapter(this@ItemDetailsActivity) + { + override fun getItemCount() = fragments.size + override fun createFragment(position: Int) = fragments[position].second + } + +} diff --git a/app/src/main/res/layout/fragment_activities.xml b/app/src/main/res/layout/fragment_activities.xml new file mode 100644 index 000000000..3578d96f5 --- /dev/null +++ b/app/src/main/res/layout/fragment_activities.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1df0837c9..df18976e2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -539,6 +539,8 @@ Account not found! Activities + Activities + Note.md Favorite 389 KB From dc8d8d9f13196e09bb80c601bb535f0d5fa188ba Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:34:08 +0200 Subject: [PATCH 4/6] Replaced menu items Signed-off-by: daniele-verducci --- .../owncloud/notes/edit/BaseNoteFragment.java | 7 +++++-- .../owncloud/notes/edit/NoteReadonlyFragment.java | 2 +- .../notes/main/MultiSelectedActionModeCallback.java | 10 ++++++---- .../main/res/menu/menu_list_context_multiple.xml | 13 +++---------- app/src/main/res/menu/menu_note_fragment.xml | 6 +++--- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java index f64eec2e7..d41d13675 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java @@ -46,6 +46,7 @@ import it.niedermann.owncloud.notes.edit.category.CategoryDialogFragment.CategoryDialogListener; import it.niedermann.owncloud.notes.edit.title.EditTitleDialogFragment; import it.niedermann.owncloud.notes.edit.title.EditTitleDialogFragment.EditTitleListener; +import it.niedermann.owncloud.notes.itemdetails.ItemDetailsActivity; import it.niedermann.owncloud.notes.persistence.NotesRepository; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.Note; @@ -305,8 +306,10 @@ public boolean onOptionsItemSelected(MenuItem item) { .newInstance(new ArrayList<>(repo.getAccounts()), note.getAccountId()) .show(requireActivity().getSupportFragmentManager(), BaseNoteFragment.class.getSimpleName())); return true; - } else if (itemId == R.id.menu_share) { - shareNote(); + } else if (itemId == R.id.menu_details) { + Intent detailsIntent = new Intent(requireContext(), ItemDetailsActivity.class); + startActivity(detailsIntent); + //shareNote(); // TODO return false; } else if (itemId == MENU_ID_PIN) { pinNoteToHome(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/NoteReadonlyFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/NoteReadonlyFragment.java index 7a1126f59..9e17cc55e 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/NoteReadonlyFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/NoteReadonlyFragment.java @@ -28,7 +28,7 @@ public void onPrepareOptionsMenu(@NonNull Menu menu) { menu.findItem(R.id.menu_preview).setVisible(false); menu.findItem(R.id.menu_cancel).setVisible(false); menu.findItem(R.id.menu_delete).setVisible(false); - menu.findItem(R.id.menu_share).setVisible(false); + menu.findItem(R.id.menu_details).setVisible(false); menu.findItem(R.id.menu_move).setVisible(false); menu.findItem(R.id.menu_category).setVisible(false); menu.findItem(R.id.menu_title).setVisible(false); 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 01f169c2b..463c66c7a 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 @@ -33,6 +33,7 @@ import it.niedermann.owncloud.notes.accountpicker.AccountPickerDialogFragment; import it.niedermann.owncloud.notes.branding.BrandedSnackbar; import it.niedermann.owncloud.notes.edit.category.CategoryDialogFragment; +import it.niedermann.owncloud.notes.itemdetails.ItemDetailsActivity; import it.niedermann.owncloud.notes.share.NoteShareActivity; import it.niedermann.owncloud.notes.shared.util.ShareUtil; @@ -153,7 +154,7 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { .show(fragmentManager, AccountPickerDialogFragment.class.getSimpleName())); }); return true; - } else if (itemId == R.id.menu_share) { + } /*else if (itemId == R.id.menu_share) { final var selection = new ArrayList(tracker.getSelection().size()); for (final var sel : tracker.getSelection()) { selection.add(sel); @@ -177,7 +178,7 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { } return true; - } else if (itemId == R.id.menu_category) {// TODO detect whether all selected notes do have the same category - in this case preselect it + }*/ else if (itemId == R.id.menu_category) {// TODO detect whether all selected notes do have the same category - in this case preselect it final var accountLiveData = mainViewModel.getCurrentAccount(); accountLiveData.observe(lifecycleOwner, account -> { accountLiveData.removeObservers(lifecycleOwner); @@ -186,8 +187,9 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { .show(fragmentManager, CategoryDialogFragment.class.getSimpleName()); }); return true; - } else if (itemId == R.id.menu_activities) { - + } else if (itemId == R.id.menu_details) { + Intent detailsIntent = new Intent(context, ItemDetailsActivity.class); + mainActivity.startActivity(detailsIntent); } return false; } diff --git a/app/src/main/res/menu/menu_list_context_multiple.xml b/app/src/main/res/menu/menu_list_context_multiple.xml index 8ea26af35..66f5c34b8 100644 --- a/app/src/main/res/menu/menu_list_context_multiple.xml +++ b/app/src/main/res/menu/menu_list_context_multiple.xml @@ -16,17 +16,10 @@ app:showAsAction="ifRoom" /> - - Dismiss Account not found! - Activities + Details Activities Note.md From 772f527330a5fe42dcc01fad1ee73e77013c72c6 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:36:25 +0200 Subject: [PATCH 5/6] Manifest Signed-off-by: daniele-verducci --- app/src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 111a0dc01..2f8eb23ce 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ + android:name=".itemdetails.ItemDetailsActivity" /> From ffd85fa8addaefb0fb1ae595bfc47208c230f6bc Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 6 Oct 2026 18:44:50 +0200 Subject: [PATCH 6/6] wip Signed-off-by: daniele-verducci --- .../niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt | 1 + app/src/main/res/values/strings.xml | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt b/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt index 59a8c3efe..c310775c8 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/itemdetails/ItemDetailsActivity.kt @@ -21,6 +21,7 @@ class ItemDetailsActivity : BrandedActivity() { val pages = listOf>( Pair(getString(R.string.activities_title), ActivitiesFragment.newInstance()) + // TODO: convert NoteShareActivity to Kotlin and refactor to be a BrandedFragment //Pair(getString(R.string.share), NoteShareFragment.newInstance()) ) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d0055f25d..be77ff090 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -31,7 +31,6 @@ Category Favorite Preview - Share Shared note Loading…