update highlight selection actions for pdf
This commit is contained in:
@ -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()
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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" />
|
||||
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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>
|
||||
@ -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>
|
||||
|
||||
Reference in New Issue
Block a user