@@ -43,6 +43,7 @@ import androidx.compose.material3.TextButton
4343import androidx.compose.material3.TopAppBar
4444import androidx.compose.material3.TopAppBarDefaults
4545import androidx.compose.runtime.Composable
46+ import androidx.compose.runtime.DisposableEffect
4647import androidx.compose.runtime.LaunchedEffect
4748import androidx.compose.runtime.collectAsState
4849import androidx.compose.runtime.getValue
@@ -56,9 +57,9 @@ import androidx.compose.ui.res.stringResource
5657import androidx.compose.ui.text.style.TextAlign
5758import androidx.compose.ui.unit.dp
5859import androidx.compose.ui.unit.sp
60+ import androidx.activity.ComponentActivity
5961import androidx.lifecycle.Lifecycle
6062import androidx.lifecycle.LifecycleEventObserver
61- import androidx.lifecycle.compose.LocalLifecycleOwner
6263import androidx.lifecycle.viewmodel.compose.viewModel
6364import com.aidinhut.simpletextcrypt.R
6465import com.aidinhut.simpletextcrypt.viewmodel.MainViewModel
@@ -76,21 +77,26 @@ fun MainScreen(
7677 var showAbout by remember { mutableStateOf(false ) }
7778 var showHelp by remember { mutableStateOf(false ) }
7879
79- // Handle lock timeout on lifecycle events.
80- val lifecycleOwner = LocalLifecycleOwner .current
81- LaunchedEffect (lifecycleOwner) {
80+ // Check lock timeout every time this screen enters composition
81+ // (returning from Settings or from background).
82+ LaunchedEffect (Unit ) {
83+ viewModel.checkLockTimeout(context)
84+ }
85+
86+ // Handle lock-on-background using the Activity lifecycle.
87+ // Using Activity lifecycle (not NavBackStackEntry) so in-app navigation
88+ // to Settings doesn't trigger the pause lock.
89+ val activity = context as ComponentActivity
90+ DisposableEffect (activity) {
8291 val observer = LifecycleEventObserver { _, event ->
83- when (event) {
84- Lifecycle .Event .ON_RESUME -> {
85- viewModel.checkLockTimeout(context)
86- }
87- Lifecycle .Event .ON_PAUSE -> {
88- viewModel.checkPauseLock(context)
89- }
90- else -> {}
92+ if (event == Lifecycle .Event .ON_STOP ) {
93+ viewModel.checkPauseLock(context)
9194 }
9295 }
93- lifecycleOwner.lifecycle.addObserver(observer)
96+ activity.lifecycle.addObserver(observer)
97+ onDispose {
98+ activity.lifecycle.removeObserver(observer)
99+ }
94100 }
95101
96102 // Navigate to lock when shouldLock triggers.
0 commit comments