Loading legacy/common/src/main/AndroidManifest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ android:exported="true"> <intent-filter> <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> <action android:name="foundation.e.accountmanager.account.create"/> <action android:name="android.accounts.action.ACCOUNT_REMOVED"/> </intent-filter> </receiver> Loading legacy/ui/legacy/src/main/java/com/fsck/k9/AccountReceiver.kt +32 −10 Original line number Diff line number Diff line Loading @@ -18,30 +18,52 @@ package com.fsck.k9 import android.accounts.AccountManager import android.accounts.AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.fsck.k9.account.BackgroundAccountRemover import com.fsck.k9.activity.accountmanager.AccountManagerConstants import com.fsck.k9.activity.accountmanager.EeloAccountCreator import com.fsck.k9.controller.push.PushController import org.koin.core.component.KoinComponent import org.koin.core.component.inject class AccountReceiver : BroadcastReceiver() { class AccountReceiver : BroadcastReceiver(), KoinComponent { private val pushController: PushController by inject() private val preferences: Preferences by inject() private val accountRemover: BackgroundAccountRemover by inject() override fun onReceive(context: Context, intent: Intent?) { val action = intent?.action ?: return if (intent == null) { return } val accountCreator = EeloAccountCreator(context) when (action) { AccountManagerConstants.ACCOUNT_CREATION_ACTION, LOGIN_ACCOUNTS_CHANGED_ACTION -> { when (intent.action) { AccountManagerConstants.ACCOUNT_CREATION_ACTION -> { accountCreator.loadAccountsFromAccountManager() } AccountManagerConstants.ACCOUNT_REMOVAL_ACTION -> { intent.extras?.let { extras -> val accountType = extras.getString(AccountManager.KEY_ACCOUNT_TYPE) ?: return val accountName = extras.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return accountCreator.removeAccount(accountType, accountName) removeAccount(intent) } AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION -> { pushController.init() accountCreator.loadAccountsFromAccountManager() } } } private fun removeAccount(intent: Intent) { val accountType = intent.extras?.getString(AccountManager.KEY_ACCOUNT_TYPE) ?: return if (!AccountManagerConstants.ACCOUNT_TYPES.contains(accountType)) return val account = intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return preferences.getAccounts().forEach { if (it.email == account) { accountRemover.removeAccountAsync(it.uuid) } } } } legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt +12 −2 Original line number Diff line number Diff line Loading @@ -145,13 +145,15 @@ open class MessageList : return } val accountCreator = EeloAccountCreator(this) var accounts = accountManager.getAccounts() deleteIncompleteAccounts(accounts) if (EeloAccountCreator(this).loadAccountsFromAccountManager()) { if (accountCreator.loadAccountsFromAccountManager()) { accounts = accountManager.getAccounts() } deleteIncompleteAccounts(accounts) val hasAccountSetup = accounts.any { it.isFinishedSetup } if (!hasAccountSetup) { FeatureLauncherActivity.launch(this, FeatureLauncherTarget.Onboarding) Loading Loading @@ -206,6 +208,7 @@ open class MessageList : } } public override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) Loading Loading @@ -540,6 +543,13 @@ open class MessageList : public override fun onResume() { super.onResume() val hasAccountSetup = preferences.getAccounts().any { it.isFinishedSetup } if (!hasAccountSetup) { FeatureLauncherActivity.launch(this, FeatureLauncherTarget.Onboarding) finish() return } if (messageListActivityConfig == null) { messageListActivityConfig = MessageListActivityConfig.create(generalSettingsManager) } else if (messageListActivityConfig != MessageListActivityConfig.create(generalSettingsManager)) { Loading legacy/ui/legacy/src/main/java/com/fsck/k9/activity/accountmanager/EeloAccountCreator.kt +5 −8 Original line number Diff line number Diff line Loading @@ -83,21 +83,18 @@ internal class EeloAccountCreator(context: Context) : KoinComponent { return true } fun removeAccount(accountType: String, accountName: String) { if (AccountManagerConstants.ACCOUNT_TYPES.contains(accountType)) { preferences.getAccounts().forEach { if (it.email == accountName) { private fun deleteIncompleteAccounts() { val accounts = preferences.getAccounts() accounts.filter { !it.isFinishedSetup }.forEach { accountRemover.removeAccountAsync(it.uuid) } } } } fun loadAccountsFromAccountManager(): Boolean { try { val accountManager = AccountManager.get(mContext) val accounts = preferences.getAccounts() EeloAccountHelper.deleteIncompleteAccounts(accounts, accountRemover) deleteIncompleteAccounts() AccountManagerConstants.ACCOUNT_TYPES .forEach { accountType -> loadAccounts( Loading legacy/ui/legacy/src/main/java/com/fsck/k9/activity/accountmanager/EeloAccountHelper.kt +0 −5 Original line number Diff line number Diff line Loading @@ -78,9 +78,4 @@ object EeloAccountHelper { val authState = accountManager.getUserData(account, AccountManagerConstants.KEY_AUTH_STATE) return authState != null && authState.trim { it <= ' ' }.isNotEmpty() } fun deleteIncompleteAccounts(accounts: List<kAccount>, accountRemover: BackgroundAccountRemover) { accounts.stream().filter { account: kAccount -> !account.isFinishedSetup } .forEach { account: kAccount -> accountRemover.removeAccountAsync(account.uuid) } } } Loading
legacy/common/src/main/AndroidManifest.xml +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ android:exported="true"> <intent-filter> <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> <action android:name="foundation.e.accountmanager.account.create"/> <action android:name="android.accounts.action.ACCOUNT_REMOVED"/> </intent-filter> </receiver> Loading
legacy/ui/legacy/src/main/java/com/fsck/k9/AccountReceiver.kt +32 −10 Original line number Diff line number Diff line Loading @@ -18,30 +18,52 @@ package com.fsck.k9 import android.accounts.AccountManager import android.accounts.AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.fsck.k9.account.BackgroundAccountRemover import com.fsck.k9.activity.accountmanager.AccountManagerConstants import com.fsck.k9.activity.accountmanager.EeloAccountCreator import com.fsck.k9.controller.push.PushController import org.koin.core.component.KoinComponent import org.koin.core.component.inject class AccountReceiver : BroadcastReceiver() { class AccountReceiver : BroadcastReceiver(), KoinComponent { private val pushController: PushController by inject() private val preferences: Preferences by inject() private val accountRemover: BackgroundAccountRemover by inject() override fun onReceive(context: Context, intent: Intent?) { val action = intent?.action ?: return if (intent == null) { return } val accountCreator = EeloAccountCreator(context) when (action) { AccountManagerConstants.ACCOUNT_CREATION_ACTION, LOGIN_ACCOUNTS_CHANGED_ACTION -> { when (intent.action) { AccountManagerConstants.ACCOUNT_CREATION_ACTION -> { accountCreator.loadAccountsFromAccountManager() } AccountManagerConstants.ACCOUNT_REMOVAL_ACTION -> { intent.extras?.let { extras -> val accountType = extras.getString(AccountManager.KEY_ACCOUNT_TYPE) ?: return val accountName = extras.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return accountCreator.removeAccount(accountType, accountName) removeAccount(intent) } AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION -> { pushController.init() accountCreator.loadAccountsFromAccountManager() } } } private fun removeAccount(intent: Intent) { val accountType = intent.extras?.getString(AccountManager.KEY_ACCOUNT_TYPE) ?: return if (!AccountManagerConstants.ACCOUNT_TYPES.contains(accountType)) return val account = intent.extras?.getString(AccountManager.KEY_ACCOUNT_NAME) ?: return preferences.getAccounts().forEach { if (it.email == account) { accountRemover.removeAccountAsync(it.uuid) } } } }
legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt +12 −2 Original line number Diff line number Diff line Loading @@ -145,13 +145,15 @@ open class MessageList : return } val accountCreator = EeloAccountCreator(this) var accounts = accountManager.getAccounts() deleteIncompleteAccounts(accounts) if (EeloAccountCreator(this).loadAccountsFromAccountManager()) { if (accountCreator.loadAccountsFromAccountManager()) { accounts = accountManager.getAccounts() } deleteIncompleteAccounts(accounts) val hasAccountSetup = accounts.any { it.isFinishedSetup } if (!hasAccountSetup) { FeatureLauncherActivity.launch(this, FeatureLauncherTarget.Onboarding) Loading Loading @@ -206,6 +208,7 @@ open class MessageList : } } public override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) Loading Loading @@ -540,6 +543,13 @@ open class MessageList : public override fun onResume() { super.onResume() val hasAccountSetup = preferences.getAccounts().any { it.isFinishedSetup } if (!hasAccountSetup) { FeatureLauncherActivity.launch(this, FeatureLauncherTarget.Onboarding) finish() return } if (messageListActivityConfig == null) { messageListActivityConfig = MessageListActivityConfig.create(generalSettingsManager) } else if (messageListActivityConfig != MessageListActivityConfig.create(generalSettingsManager)) { Loading
legacy/ui/legacy/src/main/java/com/fsck/k9/activity/accountmanager/EeloAccountCreator.kt +5 −8 Original line number Diff line number Diff line Loading @@ -83,21 +83,18 @@ internal class EeloAccountCreator(context: Context) : KoinComponent { return true } fun removeAccount(accountType: String, accountName: String) { if (AccountManagerConstants.ACCOUNT_TYPES.contains(accountType)) { preferences.getAccounts().forEach { if (it.email == accountName) { private fun deleteIncompleteAccounts() { val accounts = preferences.getAccounts() accounts.filter { !it.isFinishedSetup }.forEach { accountRemover.removeAccountAsync(it.uuid) } } } } fun loadAccountsFromAccountManager(): Boolean { try { val accountManager = AccountManager.get(mContext) val accounts = preferences.getAccounts() EeloAccountHelper.deleteIncompleteAccounts(accounts, accountRemover) deleteIncompleteAccounts() AccountManagerConstants.ACCOUNT_TYPES .forEach { accountType -> loadAccounts( Loading
legacy/ui/legacy/src/main/java/com/fsck/k9/activity/accountmanager/EeloAccountHelper.kt +0 −5 Original line number Diff line number Diff line Loading @@ -78,9 +78,4 @@ object EeloAccountHelper { val authState = accountManager.getUserData(account, AccountManagerConstants.KEY_AUTH_STATE) return authState != null && authState.trim { it <= ' ' }.isNotEmpty() } fun deleteIncompleteAccounts(accounts: List<kAccount>, accountRemover: BackgroundAccountRemover) { accounts.stream().filter { account: kAccount -> !account.isFinishedSetup } .forEach { account: kAccount -> accountRemover.removeAccountAsync(account.uuid) } } }