From 1f4c0d4829d0addaca722e6747f0d8ca2f50da25 Mon Sep 17 00:00:00 2001 From: Hasinjato Date: Tue, 11 Aug 2026 15:00:23 +0300 Subject: [PATCH] Press back to hide EditSourceCompose. Double back to quit app - Android --- .../kotlin/mg/dot/feufaro/MainActivity.kt | 28 ++++++++++++++++++- .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- .../mg/dot/feufaro/solfa/TimeUnitObject.kt | 7 +++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt index a5e4fe2..295ff2d 100644 --- a/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt +++ b/composeApp/src/androidMain/kotlin/mg/dot/feufaro/MainActivity.kt @@ -1,5 +1,6 @@ package mg.dot.feufaro +import SharedScreenModel import android.Manifest import android.app.ComponentCaller import android.content.Intent @@ -10,7 +11,9 @@ import android.os.Environment import android.util.Base64 import android.view.View import android.view.WindowManager +import android.widget.Toast import androidx.activity.ComponentActivity +import androidx.activity.OnBackPressedCallback import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.runtime.Composable @@ -22,11 +25,14 @@ import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsControllerCompat import mg.dot.feufaro.ui.LocalFullscreenController +import org.koin.android.ext.android.inject import org.koin.androidx.compose.KoinAndroidContext import java.io.File import java.util.zip.GZIPInputStream class MainActivity : ComponentActivity() { + private val sharedScreenModel: SharedScreenModel by inject() + private var lastBackTime = 0L override fun onCreate(savedInstanceState: Bundle?) { ActivityCompat.requestPermissions( this, @@ -43,6 +49,27 @@ class MainActivity : ComponentActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) intent?.let { handleDeepLinkIntent(it) } + onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (sharedScreenModel.sourceModeState.value) { + sharedScreenModel.toggleSourceMode() + return + } + + val currentTime = System.currentTimeMillis() + if (currentTime - lastBackTime < 2000) { + finish() + } else { + lastBackTime = currentTime + Toast.makeText( + this@MainActivity, + "Appuyez à nouveau pour quitter", + Toast.LENGTH_SHORT + ).show() + } + } + }) + setContent { KoinAndroidContext { @@ -65,7 +92,6 @@ class MainActivity : ComponentActivity() { windowInsetsController.show(WindowInsetsCompat.Type.statusBars()) windowInsetsController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE - window.statusBarColor = android.graphics.Color.TRANSPARENT if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { window.attributes.layoutInDisplayCutoutMode = diff --git a/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml index 6f2acb4..bbd3e02 100644 --- a/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml index 6f2acb4..bbd3e02 100644 --- a/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt index c65b2ba..f70d1b1 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/solfa/TimeUnitObject.kt @@ -44,6 +44,8 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* import androidx.compose.ui.window.Popup import androidx.lifecycle.compose.collectAsStateWithLifecycle +import cafe.adriel.voyager.core.annotation.InternalVoyagerApi +import cafe.adriel.voyager.navigator.internal.BackHandler import feufaro.composeapp.generated.resources.Emmentaler import feufaro.composeapp.generated.resources.PTSerif_Bold import feufaro.composeapp.generated.resources.PT_Serif_Bold_Italic @@ -1421,12 +1423,17 @@ private suspend fun expandInclusions( return result.toString().trimEnd() } +@OptIn(InternalVoyagerApi::class) @Composable fun EditSourceCompose( sharedScreenModel: SharedScreenModel, solfaScreenModel: SolfaScreenModel ) { var isEditorVisible = sharedScreenModel.sourceModeState.value + BackHandler(enabled = isEditorVisible) { + sharedScreenModel.toggleSourceMode() + } + var sourcePath = sharedScreenModel.activeFilePath.value var sourceContent = sharedScreenModel.fileContent.value ?: "" var sourceTitle = sharedScreenModel.songTitle.value