update highlight selection actions for pdf

This commit is contained in:
Satindar Dhillon
2022-11-15 11:56:15 -08:00
parent 31c7b705ed
commit 30ae8ef8d4
6 changed files with 58 additions and 24 deletions

View File

@ -10,11 +10,11 @@ import android.graphics.RectF
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.Gravity
import android.view.MotionEvent
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
import android.widget.PopupMenu
import androidx.activity.viewModels
@ -45,6 +45,7 @@ import com.pspdfkit.ui.toolbar.popup.PdfTextSelectionPopupToolbar
import com.pspdfkit.ui.toolbar.popup.PopupToolbarMenuItem
import com.pspdfkit.utils.PdfUtils
import dagger.hilt.android.AndroidEntryPoint
import org.json.JSONObject
@AndroidEntryPoint
@ -265,19 +266,29 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan
popupMenu.menuInflater.inflate(R.menu.highlight_selection_menu, popupMenu.menu)
popupMenu.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item ->
popupMenu.setOnMenuItemClickListener { item ->
when(item.itemId) {
R.id.annotate -> {
showAnnotationView()
Log.d("pdf", "annotate button tapped")
viewModel.annotationUnderNoteEdit = clickedAnnotation
// Disabled notes for now since we didn't implement on ios
// showAnnotationView()
}
R.id.delete -> {
viewModel.deleteHighlight(clickedAnnotation)
fragment.document?.annotationProvider?.removeAnnotationFromPage(clickedAnnotation)
}
R.id.copyPdfHighlight -> {
val omnivoreHighlight = clickedAnnotation.customData?.get("omnivoreHighlight") as? JSONObject
val quote = omnivoreHighlight?.get("quote") as? String
quote?.let {
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText(it, it)
clipboard.setPrimaryClip(clip)
}
}
}
true
})
}
popupMenu.show()
}
@ -315,6 +326,7 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan
when (it.id) {
1 -> {
pendingHighlightAnnotation?.let { annotation ->
val quote = textSelectionController?.textSelection?.text ?: ""
val existingAnnotations = fragment.document?.annotationProvider?.getAnnotations(fragment.pageIndex) ?: listOf()
val overlappingAnnotations = viewModel.overlappingAnnotations(annotation, existingAnnotations)
val overlapIDs = overlappingAnnotations.mapNotNull { viewModel.pluckHighlightID(it) }
@ -324,7 +336,7 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan
}
fragment.addAnnotationToPage(annotation, false) {
viewModel.syncHighlightUpdates(annotation, overlapIDs)
viewModel.syncHighlightUpdates(annotation, quote, overlapIDs)
}
}
@ -332,12 +344,12 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan
p0.dismiss()
return@OnPopupToolbarItemClickedListener true
}
2 -> {
Log.d("pdf", "user selected annotate action")
textSelectionController?.textSelection = null
p0.dismiss()
return@OnPopupToolbarItemClickedListener true
}
// 2 -> {
// Log.d("pdf", "user selected annotate action")
// textSelectionController?.textSelection = null
// p0.dismiss()
// return@OnPopupToolbarItemClickedListener true
// }
3 -> {
val text = textSelectionController?.textSelection?.text ?: ""
val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
@ -358,18 +370,22 @@ class PDFReaderActivity: AppCompatActivity(), DocumentListener, TextSelectionMan
p0.setOnPopupToolbarItemClickedListener(onClickListener)
p0.menuItems = listOf(
PopupToolbarMenuItem(1, R.string.highlight_menu_action),
PopupToolbarMenuItem(2, R.string.annotate_menu_action),
PopupToolbarMenuItem(3, R.string.copy_menu_action),
PopupToolbarMenuItem(1, R.string.pdf_highlight_menu_action),
// PopupToolbarMenuItem(2, R.string.annotate_menu_action),
PopupToolbarMenuItem(3, R.string.pdf_highlight_copy),
)
}
private fun showAnnotationView() {
private fun showAnnotationView(initialText: String) {
val annotationDialog = Dialog(this)
annotationDialog.setContentView(R.layout.annotation_edit)
val textField = annotationDialog.findViewById(R.id.highlightNoteTextField) as EditText
textField.setText(initialText)
val confirmButton = annotationDialog.findViewById(R.id.confirmAnnotation) as Button
confirmButton.setOnClickListener {
val newNoteText =
annotationDialog.dismiss()
}

View File

@ -36,6 +36,7 @@ class PDFReaderViewModel @Inject constructor(
private val datastoreRepo: DatastoreRepository,
private val networker: Networker
): ViewModel() {
var annotationUnderNoteEdit: Annotation? = null
val pdfReaderParamsLiveData = MutableLiveData<PDFReaderParams?>(null)
fun loadItem(slug: String, context: Context) {
@ -79,11 +80,10 @@ class PDFReaderViewModel @Inject constructor(
pdfReaderParamsLiveData.postValue(null)
}
fun syncHighlightUpdates(newAnnotation: Annotation, overlapIds: List<String>) {
fun syncHighlightUpdates(newAnnotation: Annotation, quote: String, overlapIds: List<String>) {
val itemID = pdfReaderParamsLiveData.value?.item?.id ?: return
val highlightID = UUID.randomUUID().toString()
val shortID = UUID.randomUUID().toString().replace("-","").substring(0,8)
val quote = newAnnotation.contents ?: ""
val jsonValues = JSONObject()
.put("id", highlightID)

View File

@ -4,11 +4,12 @@
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:background="#ffffff">
<EditText android:layout_width="fill_parent"
<EditText
android:layout_width="fill_parent"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:hint="Add note."
android:id="@+id/body"
android:id="@+id/highlightNoteTextField"
android:textColor="#000000"
android:lines="3" />

View File

@ -3,13 +3,13 @@
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/delete"
android:title="@string/delete_highlight_menu_title"
android:title="@string/pdf_remove_highlight"
app:showAsAction="always">
</item>
<item
android:id="@+id/annotate"
android:title="@string/annotate_menu_action"
android:id="@+id/copyPdfHighlight"
android:title="@string/pdf_highlight_copy"
app:showAsAction="always">
</item>
</menu>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/createHighlight"
android:title="@string/pdf_highlight_menu_action"
app:showAsAction="always">
</item>
<item
android:id="@+id/copyPdfHighlight"
android:title="@string/pdf_highlight_copy"
app:showAsAction="always">
</item>
</menu>

View File

@ -6,5 +6,7 @@
<string name="highlight_menu_action">Highlight</string>
<string name="copy_menu_action">Copy</string>
<string name="annotate_menu_action">Annotate</string>
<string name="delete_highlight_menu_title">Delete</string>
<string name="pdf_remove_highlight">Remove</string>
<string name="pdf_highlight_menu_action">Highlight</string>
<string name="pdf_highlight_copy">Copy</string>
</resources>