commit 302ea7e83bbc1bad48b1988846779339b07ae996
parent aeffddb7cc2b74ac911a75be306c3dbd10e56db2
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Fri, 22 Sep 2023 18:19:49 +0200
fix(settings_overlay): dialog dismiss callback
Diffstat:
1 file changed, 17 insertions(+), 10 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
@@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -33,6 +34,8 @@ class SettingsOverlay(
private val context: RemoteSideContext
) {
private lateinit var dialog: Dialog
+ private lateinit var dismissCallback: () -> Boolean
+
private fun checkForPermissions(): Boolean {
if (!Settings.canDrawOverlays(context.androidContext)) {
val myIntent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
@@ -48,9 +51,9 @@ class SettingsOverlay(
private fun OverlayContent() {
val navHostController = rememberNavController()
- /*navHostController.addOnDestinationChangedListener { _, destination, _ ->
- dialog.setCancelable(destination.route == FeaturesSection.MAIN_ROUTE)
- }*/
+ LaunchedEffect(Unit) {
+ dismissCallback = { !navHostController.popBackStack() }
+ }
val navigation = remember {
Navigation(
@@ -78,8 +81,10 @@ class SettingsOverlay(
fun close() {
if (!::dialog.isInitialized || !dialog.isShowing) return
- context.config.writeConfig()
- dialog.dismiss()
+
+ context.androidContext.mainExecutor.execute {
+ dialog.dismiss()
+ }
}
fun show() {
@@ -92,7 +97,13 @@ class SettingsOverlay(
}
context.androidContext.mainExecutor.execute {
- dialog = Dialog(context.androidContext, R.style.FullscreenOverlayDialog)
+ dialog = object: Dialog(context.androidContext, R.style.FullscreenOverlayDialog) {
+ override fun dismiss() {
+ if (!::dismissCallback.isInitialized || !dismissCallback()) return
+ super.dismiss()
+ this@SettingsOverlay.context.config.writeConfig()
+ }
+ }
dialog.window?.apply {
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
setLayout(
@@ -123,10 +134,6 @@ class SettingsOverlay(
)
dialog.setCancelable(true)
- dialog.setOnDismissListener {
- close()
- }
-
dialog.show()
}
}