commit 35418a9735fc5c372c006aaa2471367460ba00f0
parent b1f73042404af2205106789965bb59888a3871ce
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Mon, 25 Sep 2023 22:20:51 +0200

fix: settings overlay
- fix back gesture
- fix bar color

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/overlay/SettingsOverlay.kt | 16+++++++++-------
Mapp/src/main/kotlin/me/rhunk/snapenhance/ui/util/AndroidDialogCustom.kt | 15+++++++++------
Mapp/src/main/res/values/styles.xml | 2++
3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/overlay/SettingsOverlay.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/overlay/SettingsOverlay.kt @@ -2,7 +2,6 @@ package me.rhunk.snapenhance.ui.overlay import android.app.Dialog import android.content.Intent -import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.net.Uri import android.provider.Settings @@ -19,6 +18,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.navigation.compose.rememberNavController import com.arthenica.ffmpegkit.Packages.getPackageName @@ -34,7 +34,7 @@ class SettingsOverlay( private val context: RemoteSideContext ) { private lateinit var dialog: Dialog - private lateinit var dismissCallback: () -> Boolean + private var dismissCallback: (() -> Boolean)? = null private fun checkForPermissions(): Boolean { if (!Settings.canDrawOverlays(context.androidContext)) { @@ -52,7 +52,7 @@ class SettingsOverlay( val navHostController = rememberNavController() LaunchedEffect(Unit) { - dismissCallback = { !navHostController.popBackStack() } + dismissCallback = { navHostController.popBackStack() } } val navigation = remember { @@ -81,7 +81,7 @@ class SettingsOverlay( fun close() { if (!::dialog.isInitialized || !dialog.isShowing) return - + dismissCallback = null context.androidContext.mainExecutor.execute { dialog.dismiss() } @@ -99,13 +99,15 @@ class SettingsOverlay( context.androidContext.mainExecutor.execute { dialog = object: Dialog(context.androidContext, R.style.FullscreenOverlayDialog) { override fun dismiss() { - if (!::dismissCallback.isInitialized || !dismissCallback()) return + dismissCallback?.also { + if (it()) return + } super.dismiss() this@SettingsOverlay.context.config.writeConfig() } } dialog.window?.apply { - setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + setBackgroundDrawable(ColorDrawable(Color.Transparent.value.toInt())) setLayout( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, @@ -120,7 +122,7 @@ class SettingsOverlay( Column( modifier = Modifier .fillMaxSize() - .padding(10.dp) + .padding(start = 15.dp, end = 15.dp, top = 25.dp, bottom = 25.dp) .clip(shape = MaterialTheme.shapes.large), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/ui/util/AndroidDialogCustom.kt b/app/src/main/kotlin/me/rhunk/snapenhance/ui/util/AndroidDialogCustom.kt @@ -1,9 +1,12 @@ package me.rhunk.snapenhance.ui.util +import android.annotation.SuppressLint +import android.app.Activity import android.content.Context import android.graphics.Outline import android.os.Build +import android.provider.Settings import android.view.* import androidx.activity.ComponentDialog import androidx.activity.addCallback @@ -13,11 +16,7 @@ import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.R import androidx.compose.ui.layout.Layout -import androidx.compose.ui.platform.AbstractComposeView -import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.platform.LocalView -import androidx.compose.ui.platform.ViewRootForInspector +import androidx.compose.ui.platform.* import androidx.compose.ui.semantics.dialog import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.Density @@ -83,6 +82,7 @@ fun Dialog( properties: DialogProperties = DialogProperties(), content: @Composable () -> Unit ) { + val context = LocalContext.current val view = LocalView.current val density = LocalDensity.current val layoutDirection = LocalLayoutDirection.current @@ -112,7 +112,9 @@ fun Dialog( DisposableEffect(dialog) { // Set the dialog's window type to TYPE_APPLICATION_OVERLAY so it's compatible with compose overlays - dialog.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY) + if (Settings.canDrawOverlays(view.context) && context !is Activity) { + dialog.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY) + } dialog.show() onDispose { @@ -181,6 +183,7 @@ private class DialogLayout( } } +@SuppressLint("PrivateResource") private class DialogWrapper( private var onDismissRequest: () -> Unit, private var properties: DialogProperties, diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml @@ -10,5 +10,7 @@ <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> <item name="android:windowActionBar">false</item> <item name="android:windowActionModeOverlay">true</item> + <item name="android:navigationBarColor">@android:color/transparent</item> + <item name="android:statusBarColor">@android:color/transparent</item> </style> </resources>