From 66a6b4a631efba5251ed4584b7da2334af4833d5 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Tue, 3 Mar 2026 13:58:38 +0530 Subject: [PATCH 1/3] fix: app crash due to infinite recursion in compose. --- .../passcodes/presentation/main_screen/ClassicalMainScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt index 4132aecb..e0f1d87d 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/main_screen/ClassicalMainScreen.kt @@ -35,7 +35,7 @@ import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme @Composable fun ClassicalMainScreen(navigateTo: (Route) -> Unit) { - ClassicalMainScreen(navigateTo) + ClassicalMainScreenContent(navigateTo) } @Composable From f56d5a926bee6cf538ea087fc5b8d6fcd985f007 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Tue, 3 Mar 2026 13:59:45 +0530 Subject: [PATCH 2/3] refactor: context variable --- .../presentation/setting_screen/ClassicalSettingsScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt index d20cc0d0..b95e6fce 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/presentation/setting_screen/ClassicalSettingsScreen.kt @@ -63,7 +63,7 @@ private fun ClassicalSettingsScreenContent() { val context = LocalContext.current val scope = rememberCoroutineScope() - val flagDataStore = LocalContext.current.featureFlagsDatastore + val flagDataStore = context.featureFlagsDatastore val flagDatastoreState by flagDataStore.data.collectAsState( FeatureFlagsSettings( version = 0, @@ -71,7 +71,7 @@ private fun ClassicalSettingsScreenContent() { isPreviewLayoutEnabled = false ) ) - val appDataStore = LocalContext.current.appDatastore + val appDataStore = context.appDatastore val appDatastoreState by appDataStore.data.collectAsState(initial = AppSettings()) var expanded by remember { mutableStateOf(false) } From 04003b8f9d08756179c41dd3fc5287bf67e4cc06 Mon Sep 17 00:00:00 2001 From: Jeel Dobariya Date: Tue, 3 Mar 2026 14:27:47 +0530 Subject: [PATCH 3/3] feat: streamline the process to move between oldui and new ui. --- app/src/main/AndroidManifest.xml | 1 - .../passcodes/JetpackPreviewLayoutActivity.kt | 103 ------------------ .../passcodes/oldui/MainActivity.kt | 6 +- .../jeeldobariya/passcodes/ui/MainActivity.kt | 19 ++++ 4 files changed, 23 insertions(+), 106 deletions(-) delete mode 100644 app/src/main/kotlin/com/jeeldobariya/passcodes/JetpackPreviewLayoutActivity.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 08239b0c..36e185e2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,7 +17,6 @@ tools:targetApi="33" > - Unit, navigateToOldUi: () -> Unit) { - Surface( - color = MaterialTheme.colorScheme.surface, - modifier = Modifier.fillMaxSize(), - tonalElevation = 5.dp - ) { - Column( - modifier = Modifier - .fillMaxSize() - .padding(24.dp), - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text("Passcodes", fontSize = 40.sp) - Text("You are on New Jetpack UI") - - Spacer(Modifier.padding(32.dp)) - - Button(onClick = navigateToOldUi) { - Text("Back To Old UI", fontSize = 20.sp) - } - - OutlinedButton(onClick = navigateToNewUi) { - Text("Continue To New UI", fontSize = 20.sp) - } - - Spacer(Modifier.padding(12.dp)) - - Text("This UI is Under Active Development", fontSize = 12.sp) - Text("So, There might be small issues!!", fontSize = 12.sp) - } - } -} - -@Preview(showBackground = true) -@Composable -fun BasePreview() { - PasscodesTheme { - JetpackComposeNewUIRoot(navigateToOldUi = { }, navigateToNewUi = { }) - } -} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt index 0728db6a..e6c2a6dc 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/oldui/MainActivity.kt @@ -12,7 +12,6 @@ import com.jeeldobariya.passcodes.core.domain.usecases.CheckForUpdateUseCase import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore import com.jeeldobariya.passcodes.databinding.ActivityMainBinding import com.jeeldobariya.passcodes.password_manager.oldui.PasswordManagerActivity -import com.jeeldobariya.passcodes.JetpackPreviewLayoutActivity import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch @@ -59,7 +58,10 @@ class MainActivity : AppCompatActivity() { runBlocking { if (featureFlagsDatastore.data.first().isPreviewLayoutEnabled) { - Intent(this@MainActivity, JetpackPreviewLayoutActivity::class.java).also { + Intent( + this@MainActivity, + com.jeeldobariya.passcodes.ui.MainActivity::class.java + ).also { startActivity(it) } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt index 6890ee6d..c4dbd8b5 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/MainActivity.kt @@ -1,10 +1,17 @@ package com.jeeldobariya.passcodes.ui +import android.content.Intent import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.platform.LocalContext +import com.jeeldobariya.passcodes.core.feature_flags.FeatureFlagsSettings +import com.jeeldobariya.passcodes.core.feature_flags.featureFlagsDatastore import com.jeeldobariya.passcodes.navigation.NavigationRoot +import com.jeeldobariya.passcodes.oldui.MainActivity import com.jeeldobariya.passcodes.ui.ui.theme.PasscodesTheme class MainActivity : ComponentActivity() { @@ -13,6 +20,18 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { PasscodesTheme { + val featureFlagState by featureFlagsDatastore.data.collectAsState( + FeatureFlagsSettings(isPreviewLayoutEnabled = true) + ) + + if (!featureFlagState.isPreviewLayoutEnabled) { + val content = LocalContext.current + + Intent(content, MainActivity::class.java).also { + content.startActivity(it) + } + } + NavigationRoot() } }