Move Context.findActivity to separated file

This commit is contained in:
FooIbar committed 2023-10-25 13:24:28 +08:00
1 parent 697918a73a
commit 246dee63b4
4 files changed
+22 -22

No files matched your search

@@ -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<MainActivity>(context)) {
with(context.findActivity<MainActivity>()) {
when (selected) {
0 -> navToReader(info)
1 -> withUIContext {
@@ -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<MainActivity>()
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")
}
@@ -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 <reified T : Activity> 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")
}
@@ -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 <I, O> 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<ComponentActivity>(this@awaitActivityResult)
val activity = findActivity<ComponentActivity>()
launcher = activity.activityResultRegistry.register(key, contract) {
launcher?.unregister()
lifecycle.removeObserver(observer)