fix(multi-account): preserve existing account when adding new one
- ensureCurrentAccountInStorage(): saves current account metadata to encrypted storage before switching to new account via AddAccountDialog - AddAccountDialog calls ensureCurrentAccountInStorage() before each login method to prevent losing the previous account - LoginScreen onLoginSuccess now calls refreshAccountList() so the switcher dropdown picks up the initial account immediately Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -708,6 +708,10 @@ fun App(
|
|||||||
if (current?.signerType is com.vitorpamplona.amethyst.commons.model.account.SignerType.Remote) {
|
if (current?.signerType is com.vitorpamplona.amethyst.commons.model.account.SignerType.Remote) {
|
||||||
accountManager.startHeartbeat(scope)
|
accountManager.startHeartbeat(scope)
|
||||||
}
|
}
|
||||||
|
// Refresh account list for switcher
|
||||||
|
scope.launch(Dispatchers.IO) {
|
||||||
|
accountManager.refreshAccountList()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+11
@@ -637,6 +637,17 @@ class AccountManager internal constructor(
|
|||||||
refreshAccountList()
|
refreshAccountList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures the currently logged-in account is persisted in multi-account storage.
|
||||||
|
* Call before switching to a new account to avoid losing the current one.
|
||||||
|
*/
|
||||||
|
suspend fun ensureCurrentAccountInStorage() {
|
||||||
|
val current = currentAccount() ?: return
|
||||||
|
val info = AccountInfo(npub = current.npub, signerType = current.signerType)
|
||||||
|
accountStorage.saveAccount(info)
|
||||||
|
accountStorage.setCurrentAccount(current.npub)
|
||||||
|
}
|
||||||
|
|
||||||
suspend fun removeAccountFromStorage(npub: String) {
|
suspend fun removeAccountFromStorage(npub: String) {
|
||||||
val current = currentAccount()
|
val current = currentAccount()
|
||||||
accountStorage.deleteAccount(npub)
|
accountStorage.deleteAccount(npub)
|
||||||
|
|||||||
+20
-1
@@ -88,6 +88,12 @@ fun AddAccountDialog(
|
|||||||
) {
|
) {
|
||||||
LoginCard(
|
LoginCard(
|
||||||
onLogin = { keyInput ->
|
onLogin = { keyInput ->
|
||||||
|
// Save current account before switching
|
||||||
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
accountManager.ensureCurrentAccountInStorage()
|
||||||
|
}
|
||||||
|
}
|
||||||
accountManager.loginWithKey(keyInput).map {
|
accountManager.loginWithKey(keyInput).map {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() }
|
withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() }
|
||||||
@@ -96,18 +102,31 @@ fun AddAccountDialog(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onGenerateNew = {
|
onGenerateNew = {
|
||||||
accountManager.generateNewAccount()
|
|
||||||
scope.launch {
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
accountManager.ensureCurrentAccountInStorage()
|
||||||
|
}
|
||||||
|
accountManager.generateNewAccount()
|
||||||
withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() }
|
withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() }
|
||||||
onAccountAdded()
|
onAccountAdded()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoginBunker = { bunkerUri ->
|
onLoginBunker = { bunkerUri ->
|
||||||
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
accountManager.ensureCurrentAccountInStorage()
|
||||||
|
}
|
||||||
|
}
|
||||||
accountManager.loginWithBunker(bunkerUri).map {
|
accountManager.loginWithBunker(bunkerUri).map {
|
||||||
onAccountAdded()
|
onAccountAdded()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoginNostrConnect = { onUriGenerated ->
|
onLoginNostrConnect = { onUriGenerated ->
|
||||||
|
scope.launch {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
accountManager.ensureCurrentAccountInStorage()
|
||||||
|
}
|
||||||
|
}
|
||||||
accountManager.loginWithNostrConnect(onUriGenerated).map {
|
accountManager.loginWithNostrConnect(onUriGenerated).map {
|
||||||
onAccountAdded()
|
onAccountAdded()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user