commit ae2e4c16ae04acd19d715783424d3bfed15e92bf
parent a9983c9301e714cc0224135052313359f4834e6a
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 7 Sep 2024 21:47:31 +0200
refactor(core): InAppOverlay
- deny network requests on crash overlay
- exit button
Diffstat:
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/InAppOverlay.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/ui/InAppOverlay.kt
@@ -34,11 +34,14 @@ import me.rhunk.snapenhance.common.ui.AppMaterialTheme
import me.rhunk.snapenhance.common.ui.createComposeView
import me.rhunk.snapenhance.common.util.ktx.copyToClipboard
import me.rhunk.snapenhance.core.ModContext
+import me.rhunk.snapenhance.core.SnapEnhance
import me.rhunk.snapenhance.core.util.hook.HookStage
import me.rhunk.snapenhance.core.util.hook.Hooker
+import me.rhunk.snapenhance.core.util.hook.hook
import me.rhunk.snapenhance.core.util.ktx.isDarkTheme
import kotlin.math.roundToInt
import kotlin.random.Random
+import kotlin.system.exitProcess
typealias CustomComposable = @Composable BoxScope.() -> Unit
@@ -47,11 +50,20 @@ class InAppOverlay(
) {
companion object {
fun showCrashOverlay(content: String, throwable: Throwable? = null) {
+ // deny network requests
+ SnapEnhance.classCache.apply {
+ unifiedGrpcService.hook("unaryCall", HookStage.BEFORE) { param ->
+ param.setResult(null)
+ }
+ networkApi.hook("submit", HookStage.BEFORE) { param ->
+ param.setResult(null)
+ }
+ }
+
Hooker.ephemeralHook(Activity::class.java, "onPostCreate", HookStage.AFTER) { param ->
val contentView = param.thisObject<Activity>().findViewById<FrameLayout>(android.R.id.content)
contentView.children().forEach { it.visibility = View.GONE }
- lateinit var screenView: View
- screenView = createComposeView(param.thisObject()) {
+ val screenView = createComposeView(param.thisObject()) {
AppMaterialTheme(isDarkTheme = true) {
Surface(
color = MaterialTheme.colorScheme.surface
@@ -88,10 +100,9 @@ class InAppOverlay(
}
}
Button(onClick = {
- contentView.children().forEach { it.visibility = View.VISIBLE }
- contentView.removeView(screenView)
+ exitProcess(1)
}) {
- Text("Ignore")
+ Text("Exit")
}
}
}