From 6a3e830d14b1a4d2e85d9c3df6af6d56ef244c10 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sun, 8 Aug 2021 12:03:32 +0900 Subject: [PATCH] fixed copy to clipboard action on older devices --- .../aves/channel/calls/AppAdapterHandler.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/AppAdapterHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/AppAdapterHandler.kt index 04afd10b8..ef30b56ab 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/AppAdapterHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/AppAdapterHandler.kt @@ -4,6 +4,8 @@ import android.content.* import android.content.pm.ApplicationInfo import android.content.res.Configuration import android.net.Uri +import android.os.Handler +import android.os.Looper import android.util.Log import androidx.core.content.FileProvider import com.bumptech.glide.Glide @@ -141,13 +143,21 @@ class AppAdapterHandler(private val context: Context) : MethodCallHandler { return } - val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager - if (clipboard != null) { - val clip = ClipData.newUri(context.contentResolver, label, getShareableUri(uri)) - clipboard.setPrimaryClip(clip) - result.success(true) - } else { - result.success(false) + // on older devices, `ClipboardManager` initialization must happen on the main thread + // (e.g. Samsung S7 with Android 8.0 / API 26, but not on Tab A 10.1 with Android 8.1 / API 27) + Handler(Looper.getMainLooper()).post { + try { + val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager + if (clipboard != null) { + val clip = ClipData.newUri(context.contentResolver, label, getShareableUri(uri)) + clipboard.setPrimaryClip(clip) + result.success(true) + } else { + result.success(false) + } + } catch (e: Exception) { + result.error("copyToClipboard-exception", "failed to set clip", e.message) + } } }