diff --git a/app/src/main/java/com/rosetta/messenger/MainActivity.kt b/app/src/main/java/com/rosetta/messenger/MainActivity.kt index d57b43a..9d4f43c 100644 --- a/app/src/main/java/com/rosetta/messenger/MainActivity.kt +++ b/app/src/main/java/com/rosetta/messenger/MainActivity.kt @@ -53,7 +53,9 @@ class MainActivity : ComponentActivity() { var accountInfoList by remember { mutableStateOf>(emptyList()) } // Check for existing accounts and build AccountInfo list + // Also force logout so user always sees unlock screen on app restart LaunchedEffect(Unit) { + accountManager.logout() // Always start logged out val accounts = accountManager.getAllAccounts() hasExistingAccount = accounts.isNotEmpty() accountInfoList = accounts.map { account -> diff --git a/app/src/main/java/com/rosetta/messenger/data/AccountManager.kt b/app/src/main/java/com/rosetta/messenger/data/AccountManager.kt index 5a0a4c3..b1138b6 100644 --- a/app/src/main/java/com/rosetta/messenger/data/AccountManager.kt +++ b/app/src/main/java/com/rosetta/messenger/data/AccountManager.kt @@ -19,6 +19,7 @@ class AccountManager(private val context: Context) { private val CURRENT_PUBLIC_KEY = stringPreferencesKey("current_public_key") private val ACCOUNTS_JSON = stringPreferencesKey("accounts_json") private val IS_LOGGED_IN = booleanPreferencesKey("is_logged_in") + private val LAST_LOGGED_PUBLIC_KEY = stringPreferencesKey("last_logged_public_key") } val currentPublicKey: Flow = context.accountDataStore.data.map { preferences -> @@ -33,6 +34,14 @@ class AccountManager(private val context: Context) { preferences[ACCOUNTS_JSON] } + val lastLoggedPublicKey: Flow = context.accountDataStore.data.map { preferences -> + preferences[LAST_LOGGED_PUBLIC_KEY] + } + + suspend fun getLastLoggedPublicKey(): String? { + return context.accountDataStore.data.first()[LAST_LOGGED_PUBLIC_KEY] + } + suspend fun saveAccount(account: EncryptedAccount) { context.accountDataStore.edit { preferences -> val existingJson = preferences[ACCOUNTS_JSON] @@ -66,6 +75,7 @@ class AccountManager(private val context: Context) { context.accountDataStore.edit { preferences -> preferences[CURRENT_PUBLIC_KEY] = publicKey preferences[IS_LOGGED_IN] = true + preferences[LAST_LOGGED_PUBLIC_KEY] = publicKey } } diff --git a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt index f01991d..24a0a44 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/auth/UnlockScreen.kt @@ -93,9 +93,16 @@ fun UnlockScreen( ) } - // Select account - val targetPublicKey = selectedAccountId ?: accountManager.currentPublicKey.first() + // Select account - prioritize: selectedAccountId > lastLoggedPublicKey > currentPublicKey > first account + val lastLoggedKey = accountManager.getLastLoggedPublicKey() + val currentKey = accountManager.currentPublicKey.first() + val targetPublicKey = selectedAccountId ?: lastLoggedKey ?: currentKey + + Log.d("UnlockScreen", "selectedAccountId=$selectedAccountId, lastLoggedKey=$lastLoggedKey, currentKey=$currentKey, targetPublicKey=$targetPublicKey") + Log.d("UnlockScreen", "accounts=${accounts.map { it.publicKey }}") + selectedAccount = accounts.find { it.publicKey == targetPublicKey } ?: accounts.firstOrNull() + Log.d("UnlockScreen", "selectedAccount=${selectedAccount?.publicKey}") } // Filter accounts by search diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt index 6cc6d46..31f7b80 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatsListScreen.kt @@ -159,7 +159,7 @@ fun ChatsListScreen( val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed) val scope = rememberCoroutineScope() - // Update status bar and navigation bar colors to match background + // Update status bar and completely hide navigation bar LaunchedEffect(isDarkTheme) { if (!view.isInEditMode) { val window = (view.context as android.app.Activity).window @@ -169,10 +169,9 @@ fun ChatsListScreen( insetsController.isAppearanceLightStatusBars = !isDarkTheme window.statusBarColor = android.graphics.Color.TRANSPARENT - // Navigation bar - match background color - val navBarColor = if (isDarkTheme) 0xFF1A1A1A.toInt() else 0xFFFFFFFF.toInt() - window.navigationBarColor = navBarColor - insetsController.isAppearanceLightNavigationBars = !isDarkTheme + // Completely hide navigation bar + insetsController.hide(androidx.core.view.WindowInsetsCompat.Type.navigationBars()) + insetsController.systemBarsBehavior = androidx.core.view.WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE } }