From d910cb23fa73c6031417a0f3c192b8bd427c4894 Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 10 Nov 2026 17:04:03 +0100 Subject: [PATCH 1/2] Implemented favorites toggle in note details Signed-off-by: daniele-verducci --- .../notes/itemdetails/ItemDetailsActivity.kt | 25 ++++++++++++++++--- .../notes/persistence/NotesRepository.java | 15 +++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) 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 a84bc92c7..62b5a0c5b 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 @@ -20,6 +20,7 @@ import it.niedermann.owncloud.notes.branding.BrandedActivity import it.niedermann.owncloud.notes.branding.BrandedFragment import it.niedermann.owncloud.notes.branding.BrandingUtil import it.niedermann.owncloud.notes.databinding.ActivityItemDetailsBinding +import it.niedermann.owncloud.notes.persistence.NotesRepository import it.niedermann.owncloud.notes.persistence.entity.Account import it.niedermann.owncloud.notes.persistence.entity.Note import it.niedermann.owncloud.notes.share.NoteShareFragment @@ -31,12 +32,15 @@ class ItemDetailsActivity : BrandedActivity() { lateinit var note: Note lateinit var account: Account lateinit var page: PAGE + lateinit var repo: NotesRepository override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) parseArguments() + repo = NotesRepository.getInstance(this) + binding = ActivityItemDetailsBinding.inflate(layoutInflater) setContentView(binding.root) @@ -44,6 +48,7 @@ class ItemDetailsActivity : BrandedActivity() { loadHeaderData() loadFragments() + setHeaderListeners() } @Suppress("ThrowsCount") @@ -57,11 +62,8 @@ class ItemDetailsActivity : BrandedActivity() { } private fun loadHeaderData() { + updateFavoriteIcon() binding.filename.text = note.title - binding.favorite.setImageResource( - if (note.favorite) R.drawable.ic_star_yellow_24dp - else R.drawable.ic_star_border_grey_ccc_24dp - ) binding.lastModificationTimestamp.text = note.modified?.let { DateUtils.formatDateTime( this, @@ -71,6 +73,21 @@ class ItemDetailsActivity : BrandedActivity() { } } + private fun setHeaderListeners() { + binding.favorite.setOnClickListener { + repo.toggleFavorite(account, note.id) + note.favorite = !note.favorite + updateFavoriteIcon() + } + } + + private fun updateFavoriteIcon() { + binding.favorite.setImageResource( + if (note.favorite) R.drawable.ic_star_yellow_24dp + else R.drawable.ic_star_border_grey_ccc_24dp + ) + } + private fun loadFragments() { val pages = listOf( PageTab( diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 1aae07612..6e3fc558b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -576,6 +576,21 @@ public void toggleFavoriteAndSync(Account account, Note note) { }); } + /** + * Toggles the favorite for a given note. + * + * @param account The single sign on account + * @param noteId The note which will be updated + */ + @AnyThread + public void toggleFavorite(@NonNull Account account, long noteId) { + executor.submit(() -> { + db.getNoteDao().updateStatus(noteId, DBStatus.LOCAL_EDITED); + db.getNoteDao().toggleFavorite(noteId); + scheduleSync(account, true); + }); + } + /** * Set the category for a given note. * This method will search in the database to find out the category id in the db. From 92bc6442848c04f027a91fd4d3e09a685f072c8b Mon Sep 17 00:00:00 2001 From: daniele-verducci Date: Tue, 10 Nov 2026 17:11:35 +0100 Subject: [PATCH 2/2] Deprecated remote-first toggleFavoriteAndSync() in favor of the new one behaving like the other note change methods Signed-off-by: daniele-verducci --- .../owncloud/notes/persistence/NotesRepository.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 6e3fc558b..fcb10a39a 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -550,6 +550,10 @@ public Map getIdMap(long accountId) { .collect(toMap(Note::getRemoteId, Note::getId)); } + /** + * @deprecated Use {@link #toggleFavorite(Account, long)} instead + */ + @Deprecated @AnyThread public void toggleFavoriteAndSync(Account account, Note note) { executor.submit(() -> {