From 187c35fe8854311d5693dd872895f452a890e39e Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Thu, 10 Aug 2023 19:11:32 +0800 Subject: [PATCH] Fix "Copied to clipboard" message not showing in API 32 and lower --- .../com/hippo/ehviewer/util/ClipboardUtil.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/util/ClipboardUtil.kt b/app/src/main/java/com/hippo/ehviewer/util/ClipboardUtil.kt index 1c4300ce0..7afad2836 100644 --- a/app/src/main/java/com/hippo/ehviewer/util/ClipboardUtil.kt +++ b/app/src/main/java/com/hippo/ehviewer/util/ClipboardUtil.kt @@ -17,10 +17,12 @@ */ package com.hippo.ehviewer.util +import android.app.Activity import android.content.ClipData import android.content.ClipDescription import android.content.ClipboardManager import android.content.Context +import android.content.ContextWrapper import android.os.Build import android.view.textclassifier.TextClassifier import androidx.core.os.persistableBundleOf @@ -49,8 +51,9 @@ fun Context.addTextToClipboard(text: CharSequence?, isSensitive: Boolean, useToa } // Avoid double notify user since system have done that on Tiramisu above if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { - if (this is MainActivity) { - showTip(R.string.copied_to_clipboard, BaseScene.LENGTH_SHORT, useToast) + val activity = findActivity() + if (activity is MainActivity) { + activity.showTip(R.string.copied_to_clipboard, BaseScene.LENGTH_SHORT, useToast) } } } @@ -63,3 +66,15 @@ fun ClipboardManager.getUrlFromClipboard(context: Context): String? { val string = item?.coerceToText(context).toString() return string.ifEmpty { null } } + +/** + * Find the closest Activity in a given Context. + */ +internal fun Context.findActivity(): Activity { + var context = this + while (context is ContextWrapper) { + if (context is Activity) return context + context = context.baseContext + } + throw IllegalStateException("findActivity() should be called in the context of an Activity") +}