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..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(() -> { @@ -576,6 +580,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.