diff --git a/app/src/main/java/com/rosetta/messenger/MainActivity.kt b/app/src/main/java/com/rosetta/messenger/MainActivity.kt index 41ed3a9..c33cb33 100644 --- a/app/src/main/java/com/rosetta/messenger/MainActivity.kt +++ b/app/src/main/java/com/rosetta/messenger/MainActivity.kt @@ -428,7 +428,8 @@ fun MainScreen( onToggleTheme: () -> Unit = {}, onLogout: () -> Unit = {} ) { - val accountName = account?.name ?: "Account" + // Reactive state for account name and username + var accountName by remember { mutableStateOf(account?.name ?: "Account") } val accountPhone = account?.publicKey?.take(16)?.let { "+${it.take(1)} ${it.substring(1, 4)} ${it.substring(4, 7)}${it.substring(7)}" @@ -443,14 +444,15 @@ fun MainScreen( var accountUsername by remember { mutableStateOf("") } var reloadTrigger by remember { mutableIntStateOf(0) } - // Load username from AccountManager (persisted in DataStore) + // Load username AND name from AccountManager (persisted in DataStore) val context = LocalContext.current LaunchedEffect(accountPublicKey, reloadTrigger) { if (accountPublicKey.isNotBlank() && accountPublicKey != "04c266b98ae5") { val accountManager = AccountManager(context) val encryptedAccount = accountManager.getAccount(accountPublicKey) accountUsername = encryptedAccount?.username ?: "" - Log.d("MainActivity", "Loaded username from DB: $accountUsername") + accountName = encryptedAccount?.name ?: accountName + Log.d("MainActivity", "Loaded from DB: name=$accountName, username=$accountUsername") } } @@ -710,10 +712,11 @@ fun MainScreen( // Following desktop version pattern: // 1. Server confirms save (handled in ProfileViewModel) // 2. Local DB updated (handled in ProfileScreen LaunchedEffect) - // 3. This callback updates UI state (reloads username from DB) + // 3. This callback updates UI state immediately + accountName = name accountUsername = username reloadTrigger++ - Log.d("MainActivity", "Profile saved: name=$name, username=$username, reloading...") + Log.d("MainActivity", "Profile saved: name=$name, username=$username, UI updated") }, onLogout = onLogout, onNavigateToTheme = { diff --git a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt index 5eb64b7..e727b8f 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/settings/ProfileScreen.kt @@ -139,9 +139,9 @@ fun ProfileScreen( val secondaryTextColor = if (isDarkTheme) Color(0xFF8E8E93) else Color(0xFF666666) val avatarColors = getAvatarColor(accountPublicKey, isDarkTheme) - // State for editing - var editedName by remember { mutableStateOf(accountName) } - var editedUsername by remember { mutableStateOf(accountUsername) } + // State for editing - Update when account data changes + var editedName by remember(accountName) { mutableStateOf(accountName) } + var editedUsername by remember(accountUsername) { mutableStateOf(accountUsername) } var hasChanges by remember { mutableStateOf(false) } // ViewModel state