fix(clipboard): Android warnings and build on SDK under 28 (#1771)

pull/1777/head
Lucas Fernandes Nogueira 10 months ago committed by GitHub
parent cc03ccf5e0
commit 341a5320c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -0,0 +1,6 @@
---
"clipboard-manager": patch
"clipboard-manager-js": patch
---
Fix warnings and clear implementation on Android below SDK 28.

@ -1,59 +1,59 @@
<script> <script>
import * as clipboard from "@tauri-apps/plugin-clipboard-manager"; import * as clipboard from '@tauri-apps/plugin-clipboard-manager'
import { open } from "@tauri-apps/plugin-dialog"; import { open } from '@tauri-apps/plugin-dialog'
import { arrayBufferToBase64 } from "../lib/utils"; import { arrayBufferToBase64 } from '../lib/utils'
import { readFile } from "@tauri-apps/plugin-fs"; import { readFile } from '@tauri-apps/plugin-fs'
export let onMessage; export let onMessage
export let insecureRenderHtml; export let insecureRenderHtml
let text = "clipboard message"; let text = 'clipboard message'
function writeText() { function writeText() {
clipboard clipboard
.writeText(text) .writeText(text)
.then(() => { .then(() => {
onMessage("Wrote to the clipboard"); onMessage('Wrote to the clipboard')
}) })
.catch(onMessage); .catch(onMessage)
} }
async function writeImage() { async function writeImage() {
try { try {
const res = await open({ const path = await open({
title: "Image to write to clipboard", title: 'Image to write to clipboard',
filters: [ filters: [
{ {
name: "Clipboard IMG", name: 'Clipboard IMG',
extensions: ["png", "jpg", "jpeg"], extensions: ['png', 'jpg', 'jpeg']
}, }
], ]
}); })
const bytes = await readFile(res.path); const bytes = await readFile(path)
await clipboard.writeImage(bytes); await clipboard.writeImage(bytes)
onMessage("wrote image"); onMessage('wrote image')
} catch (e) { } catch (e) {
onMessage(e); onMessage(e)
} }
} }
async function read() { async function read() {
try { try {
const image = await clipboard.readImage(); const image = await clipboard.readImage()
arrayBufferToBase64(await image.rgba(), function (base64) { arrayBufferToBase64(await image.rgba(), function (base64) {
const src = "data:image/png;base64," + base64; const src = 'data:image/png;base64,' + base64
insecureRenderHtml('<img src="' + src + '"></img>'); insecureRenderHtml('<img src="' + src + '"></img>')
}); })
return; return
} catch (_) {} } catch (_) {}
clipboard clipboard
.readText() .readText()
.then((contents) => { .then((contents) => {
onMessage(`Clipboard contents: ${contents}`); onMessage(`Clipboard contents: ${contents}`)
}) })
.catch((e) => { .catch((e) => {
onMessage(e); onMessage(e)
}); })
} }
</script> </script>
@ -65,6 +65,5 @@
/> />
<button class="btn" type="button" on:click={writeText}>Write</button> <button class="btn" type="button" on:click={writeText}>Write</button>
<button class="btn" type="button" on:click={writeImage}>Pick Image</button> <button class="btn" type="button" on:click={writeImage}>Pick Image</button>
<button class="btn" type="button" on:click={read}>Read</button> <button class="btn" type="button" on:click={read}>Read</button>
</div> </div>

@ -4,12 +4,12 @@
package app.tauri.clipboard package app.tauri.clipboard
import android.R.attr.value
import android.app.Activity import android.app.Activity
import android.content.ClipData import android.content.ClipData
import android.content.ClipDescription import android.content.ClipDescription
import android.content.ClipboardManager import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.os.Build
import app.tauri.annotation.Command import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin import app.tauri.annotation.TauriPlugin
@ -59,6 +59,9 @@ internal class ReadClipDataSerializer @JvmOverloads constructor(t: Class<ReadCli
jgen.writeEndObject() jgen.writeEndObject()
} }
else -> {
throw Exception("unimplemented ReadClipData")
}
} }
jgen.writeEndObject() jgen.writeEndObject()
@ -93,7 +96,7 @@ class ClipboardPlugin(private val activity: Activity) : Plugin(activity) {
is WriteOptions.PlainText -> { is WriteOptions.PlainText -> {
ClipData.newPlainText(args.label, args.text) ClipData.newPlainText(args.label, args.text)
} else -> { } else -> {
invoke.reject("Invalid write options provided") invoke.reject("unimplemented WriteOptions")
return return
} }
@ -128,7 +131,11 @@ class ClipboardPlugin(private val activity: Activity) : Plugin(activity) {
@Command @Command
fun clear(invoke: Invoke) { fun clear(invoke: Invoke) {
if (manager.hasPrimaryClip()) { if (manager.hasPrimaryClip()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
manager.clearPrimaryClip() manager.clearPrimaryClip()
} else {
manager.setPrimaryClip(ClipData.newPlainText("", ""))
}
} }
invoke.resolve() invoke.resolve()
} }

@ -114,6 +114,11 @@ async function writeHtml(html: string, altHtml?: string): Promise<void> {
/** /**
* Clears the clipboard. * Clears the clipboard.
*
* #### Platform-specific
*
* - **Android:** Only supported on SDK 28+. For older releases we write an empty string to the clipboard instead.
*
* @example * @example
* ```typescript * ```typescript
* import { clear } from '@tauri-apps/plugin-clipboard-manager'; * import { clear } from '@tauri-apps/plugin-clipboard-manager';

Loading…
Cancel
Save