From 5b2c58d9559c8d12542217d7c3595b8474a7fb02 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Wed, 7 Dec 2022 09:54:42 -0800 Subject: [PATCH] update note on pdf annotation when confirm is tapped on note modal --- .../omnivore/omnivore/ui/reader/PDFReader.kt | 14 ++++++--- .../omnivore/ui/reader/PDFReaderViewModel.kt | 31 ++++++++++++++++++- .../res/menu/pdf_highlight_selection_menu.xml | 10 +++--- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt index 1a94846be..504481ace 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReader.kt @@ -377,8 +377,10 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan return when (item.itemId) { R.id.annotate -> { Log.d("pdf", "annotate button tapped") - viewModel.annotationUnderNoteEdit = clickedHighlight - showAnnotationView("") // TODO: grab initial text + clickedHighlight?.let { + viewModel.annotationUnderNoteEdit = it + showAnnotationView(viewModel.pluckExistingNote(it) ?: "") + } true } R.id.delete -> { @@ -432,6 +434,7 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan actionMode = null clickedHighlight = null clickedHighlightPosition = null + viewModel.annotationUnderNoteEdit = null } override fun startActionMode(callback: ActionMode.Callback?, type: Int): ActionMode? { @@ -448,8 +451,11 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan confirmButton.setOnClickListener { val newNoteText = textField.text - // TODO: persist new note - Log.d("pdf", "new annotation text: $newNoteText") + + clickedHighlight?.let { highlight -> + viewModel.updateHighlightNote(highlight, newNoteText.toString()) + } + resetHighlightTap() annotationDialog.dismiss() } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt index 20affa1f0..04eb40d1a 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/PDFReaderViewModel.kt @@ -115,7 +115,7 @@ class PDFReaderViewModel @Inject constructor( if (overlapIds.isNotEmpty()) { val input = MergeHighlightInput( - annotation = Optional.presentIfNotNull(newAnnotation.contents), + annotation = Optional.Absent, // TODO: make sure we preserve note locally articleId = itemID, id = highlightID, overlapHighlightIdList = overlapIds, @@ -143,6 +143,19 @@ class PDFReaderViewModel @Inject constructor( } } + fun updateHighlightNote(annotation: Annotation, note: String) { + // Save the updated note locally + val omnivoreHighlight = annotation.customData?.get("omnivoreHighlight") as? JSONObject + omnivoreHighlight?.put("editedNote", note) + omnivoreHighlight?.let { + Log.d("pdf", "setting custom data: $omnivoreHighlight") + annotation.customData = JSONObject().put("omnivoreHighlight", it) + } + + // TODO: Sync update with data service + + } + fun deleteHighlight(annotation: Annotation) { val highlightID = pluckHighlightID(annotation) ?: return viewModelScope.launch { @@ -168,6 +181,22 @@ class PDFReaderViewModel @Inject constructor( return omnivoreHighlight?.get("id") as? String } + fun pluckExistingNote(annotation: Annotation): String? { + val omnivoreHighlight = annotation.customData?.opt("omnivoreHighlight") as? JSONObject ?: return null + + val editedNote = omnivoreHighlight.opt("editedNote") as? String + if (editedNote != null) { return editedNote } + + val shortID = omnivoreHighlight.get("shortId") as? String ?: return null + + pdfReaderParamsLiveData.value?.articleContent?.highlights?.let { + val matchingHighlight = it.firstOrNull { highlight -> highlight.shortId == shortID } + return matchingHighlight?.annotation + } + + return null + } + private fun hasOverlaps(leftAnnotation: Annotation, rightAnnotation: Annotation): Boolean { for (leftRect in (leftAnnotation as? HighlightAnnotation)?.rects ?: listOf()) { for (rightRect in (rightAnnotation as? HighlightAnnotation)?.rects ?: listOf()) { diff --git a/android/Omnivore/app/src/main/res/menu/pdf_highlight_selection_menu.xml b/android/Omnivore/app/src/main/res/menu/pdf_highlight_selection_menu.xml index b3952a828..ee3533c0a 100644 --- a/android/Omnivore/app/src/main/res/menu/pdf_highlight_selection_menu.xml +++ b/android/Omnivore/app/src/main/res/menu/pdf_highlight_selection_menu.xml @@ -7,11 +7,11 @@ app:showAsAction="always"> - - - - - + +