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:
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>