From 99d125d86bf097a4c124cd91e15e71baba4dfe20 Mon Sep 17 00:00:00 2001 From: Emin Yilmaz <70356757+unbeauvoyage@users.noreply.github.com> Date: Fri, 28 Jun 2024 12:05:48 +0900 Subject: [PATCH] feat(clipboard-manager): implement `clear` on iOS and Android (#1462) --- .changes/clear-clipboard.md | 5 +++++ .../android/src/main/java/ClipboardPlugin.kt | 12 ++++++++++++ .../ios/Sources/ClipboardPlugin.swift | 6 ++++++ plugins/clipboard-manager/src/mobile.rs | 4 +--- 4 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 .changes/clear-clipboard.md diff --git a/.changes/clear-clipboard.md b/.changes/clear-clipboard.md new file mode 100644 index 00000000..f1ae025c --- /dev/null +++ b/.changes/clear-clipboard.md @@ -0,0 +1,5 @@ +--- +"clipboard-manager": "minor" +--- + +Add support for clearing clipboard text on iOS and Android. \ No newline at end of file diff --git a/plugins/clipboard-manager/android/src/main/java/ClipboardPlugin.kt b/plugins/clipboard-manager/android/src/main/java/ClipboardPlugin.kt index b3947ece..942a8317 100644 --- a/plugins/clipboard-manager/android/src/main/java/ClipboardPlugin.kt +++ b/plugins/clipboard-manager/android/src/main/java/ClipboardPlugin.kt @@ -92,7 +92,11 @@ class ClipboardPlugin(private val activity: Activity) : Plugin(activity) { val clipData = when (args) { is WriteOptions.PlainText -> { ClipData.newPlainText(args.label, args.text) + } else -> { + invoke.reject("Invalid write options provided") + return } + } manager.setPrimaryClip(clipData) @@ -120,4 +124,12 @@ class ClipboardPlugin(private val activity: Activity) : Plugin(activity) { invoke.resolveObject(data) } + + @Command + fun clear(invoke: Invoke) { + if (manager.hasPrimaryClip()) { + manager.clearPrimaryClip() + } + invoke.resolve() + } } diff --git a/plugins/clipboard-manager/ios/Sources/ClipboardPlugin.swift b/plugins/clipboard-manager/ios/Sources/ClipboardPlugin.swift index c85abf7c..cb4fc9b2 100644 --- a/plugins/clipboard-manager/ios/Sources/ClipboardPlugin.swift +++ b/plugins/clipboard-manager/ios/Sources/ClipboardPlugin.swift @@ -38,6 +38,12 @@ class ClipboardPlugin: Plugin { invoke.reject("Clipboard is empty") } } + + @objc public func clear(_ invoke: Invoke) throws { + let clipboard = UIPasteboard.general + clipboard.items = [] + invoke.resolve() + } } @_cdecl("init_plugin_clipboard") diff --git a/plugins/clipboard-manager/src/mobile.rs b/plugins/clipboard-manager/src/mobile.rs index 7a35196c..72d5f6e0 100644 --- a/plugins/clipboard-manager/src/mobile.rs +++ b/plugins/clipboard-manager/src/mobile.rs @@ -92,9 +92,7 @@ impl Clipboard { } pub fn clear(&self) -> crate::Result<()> { - Err(crate::Error::Clipboard( - "Unsupported on this platform".to_string(), - )) + self.0.run_mobile_plugin("clear", ()).map_err(Into::into) } }