From 53aa16c84b895c0312097d8823aa2fc2879dc9bb Mon Sep 17 00:00:00 2001 From: Julius Kato Mutumba Date: Wed, 4 Dec 2024 23:40:03 +0300 Subject: [PATCH 1/2] custom contextual menu --- ios/Classes/PspdfkitPlatformViewImpl.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/ios/Classes/PspdfkitPlatformViewImpl.swift b/ios/Classes/PspdfkitPlatformViewImpl.swift index 06c5b11c..dd96dd30 100644 --- a/ios/Classes/PspdfkitPlatformViewImpl.swift +++ b/ios/Classes/PspdfkitPlatformViewImpl.swift @@ -35,7 +35,21 @@ public class PspdfkitPlatformViewImpl: NSObject, PspdfkitWidgetControllerApi, PD } pspdfkitWidgetCallbacks?.onPageChanged(documentId:document.uid , pageIndex: Int64(pageIndex)){ _ in } } - + + public func pdfViewController(_ sender: PDFViewController, menuForText glyphs: GlyphSequence, onPageView pageView: PDFPageView, appearance: EditMenuAppearance, suggestedMenu: UIMenu) -> UIMenu { + return UIMenu( + title: "Custom Menu", + image: nil, + identifier: nil, + options: .displayInline, + children: [ + UIAction(title: "Custom Action", image: nil, identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off, handler: { _ in + print("Custom Action") + }) + ] + ) + } + func setFormFieldValue(value: String, fullyQualifiedName: String, completion: @escaping (Result) -> Void) { do { guard let document = pdfViewController?.document, document.isValid else { From 3d1c1fb9864777fb2d196de3dd8562f77bb93904 Mon Sep 17 00:00:00 2001 From: Julius Kato Mutumba Date: Tue, 31 Dec 2024 00:52:08 +0300 Subject: [PATCH 2/2] Update FlutterPdfUiFragment.kt --- .../flutter/pspdfkit/FlutterPdfUiFragment.kt | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt index 678b71dd..b7097a0c 100644 --- a/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt +++ b/android/src/main/java/com/pspdfkit/flutter/pspdfkit/FlutterPdfUiFragment.kt @@ -16,14 +16,61 @@ package com.pspdfkit.flutter.pspdfkit /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. /// This notice may not be removed from this file. /// +import android.os.Bundle +import android.view.View +import android.widget.Toast import com.pspdfkit.document.PdfDocument import com.pspdfkit.ui.PdfUiFragment +import com.pspdfkit.ui.toolbar.AnnotationEditingToolbar +import com.pspdfkit.ui.toolbar.ContextualToolbar +import com.pspdfkit.ui.toolbar.ContextualToolbarMenuItem +import com.pspdfkit.ui.toolbar.ToolbarCoordinatorLayout -class FlutterPdfUiFragment : PdfUiFragment() { +class FlutterPdfUiFragment : PdfUiFragment(), ToolbarCoordinatorLayout.OnContextualToolbarLifecycleListener { + + private lateinit var customTextSelectionAction: ContextualToolbarMenuItem + private val id = View.generateViewId() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // Create a custom menu item that will be shown inside the text selection toolbar. + customTextSelectionAction = ContextualToolbarMenuItem.createSingleTextItem( + requireContext(), + id, + ContextualToolbarMenuItem.Position.END + ) + } override fun onDocumentLoaded(document: PdfDocument) { super.onDocumentLoaded(document) // Notify the Flutter PSPDFKit plugin that the document has been loaded. EventDispatcher.getInstance().notifyDocumentLoaded(document) } + + override fun onPrepareContextualToolbar(toolbar: ContextualToolbar<*>) { + if (toolbar is AnnotationEditingToolbar) { + val menuItems = toolbar.getMenuItems() + if (!menuItems.contains(customTextSelectionAction)) { + menuItems.add(customTextSelectionAction) + toolbar.setMenuItems(menuItems) + } + } + } + + override fun onDisplayContextualToolbar(toolbar: ContextualToolbar<*>) { + toolbar.setOnMenuItemClickListener { _, menuItem -> + var handled = false + if (menuItem.id == id) { + handled = true + Toast.makeText( + requireContext(), "Custom action triggered!", Toast.LENGTH_SHORT + ).show() + } + handled + } + } + + override fun onRemoveContextualToolbar(toolbar: ContextualToolbar<*>) { + toolbar.setOnMenuItemClickListener(null) + } } \ No newline at end of file