From 246dee63b4234504fc50be6f0332f3c6da42fe06 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:24:28 +0800 Subject: [PATCH] Move `Context.findActivity` to separated file --- .../com/hippo/ehviewer/ui/CommonOperations.kt | 4 ++-- .../com/hippo/ehviewer/util/ClipboardUtil.kt | 20 ++----------------- .../com/hippo/ehviewer/util/ContextUtil.kt | 17 ++++++++++++++++ .../com/hippo/ehviewer/util/LauncherUtils.kt | 3 +-- 4 files changed, 22 insertions(+), 22 deletions(-) create mode 100644 app/src/main/kotlin/com/hippo/ehviewer/util/ContextUtil.kt diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt index 434fb0906..d3947f031 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/CommonOperations.kt @@ -58,6 +58,7 @@ import com.hippo.ehviewer.ui.scene.BaseScene import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.util.FavouriteStatusRouter import com.hippo.ehviewer.util.LongList +import com.hippo.ehviewer.util.findActivity import com.hippo.ehviewer.util.requestPermission import com.hippo.unifile.UniFile import eu.kanade.tachiyomi.ui.reader.ReaderActivity @@ -68,7 +69,6 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import moe.tarsin.coroutines.runSuspendCatching -import rikka.core.util.ContextUtils.requireActivity import splitties.init.appCtx object CommonOperations { @@ -314,7 +314,7 @@ suspend fun DialogState.doGalleryInfoAction(info: BaseGalleryInfo, context: Cont title = EhUtils.getSuitableTitle(info), ) } - with(requireActivity(context)) { + with(context.findActivity()) { when (selected) { 0 -> navToReader(info) 1 -> withUIContext { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/ClipboardUtil.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/ClipboardUtil.kt index c9aada162..64edd26d5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/ClipboardUtil.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/ClipboardUtil.kt @@ -17,12 +17,10 @@ */ 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 @@ -51,10 +49,8 @@ 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) { - val activity = findActivity() - if (activity is MainActivity) { - activity.showTip(R.string.copied_to_clipboard, BaseScene.LENGTH_SHORT, useToast) - } + val activity = findActivity() + activity.showTip(R.string.copied_to_clipboard, BaseScene.LENGTH_SHORT, useToast) } } @@ -66,15 +62,3 @@ 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") -} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/ContextUtil.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/ContextUtil.kt new file mode 100644 index 000000000..85a0c6fa6 --- /dev/null +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/ContextUtil.kt @@ -0,0 +1,17 @@ +package com.hippo.ehviewer.util + +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper + +/** + * Find the closest Activity in a given Context. + */ +inline fun Context.findActivity(): T { + var context = this + while (context is ContextWrapper) { + if (context is Activity) return context as T + context = context.baseContext + } + throw IllegalStateException("findActivity() should be called in the context of an Activity") +} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt b/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt index 7066ce8c5..453db7122 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/util/LauncherUtils.kt @@ -25,7 +25,6 @@ import eu.kanade.tachiyomi.util.lang.withUIContext import java.io.File import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine -import rikka.core.util.ContextUtils.requireActivity // Fuck off the silly Android launcher and callback :) @@ -58,7 +57,7 @@ private suspend fun Context.awaitActivityResult(contract: ActivityResultC lifecycle.addObserver(observer) return withUIContext { suspendCoroutine { cont -> // No cancellation support here since we cannot cancel a launched Intent - val activity = requireActivity(this@awaitActivityResult) + val activity = findActivity() launcher = activity.activityResultRegistry.register(key, contract) { launcher?.unregister() lifecycle.removeObserver(observer)