Loading app/core/src/main/java/com/fsck/k9/AccountsChangeListener.java 0 → 100644 +6 −0 Original line number Diff line number Diff line package com.fsck.k9; public interface AccountsChangeListener { void onAccountsChanged(); } app/core/src/main/java/com/fsck/k9/Preferences.java +23 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import java.util.Map; import java.util.UUID; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.RestrictTo; import android.support.annotation.RestrictTo.Scope; Loading Loading @@ -48,7 +49,8 @@ public class Preferences { private Map<String, Account> accounts = null; private List<Account> accountsInOrder = null; private Account newAccount; private Context context; private final ArrayList<AccountsChangeListener> accountsChangeListeners = new ArrayList<>(); private final Context context; private final LocalStoreProvider localStoreProvider; private final CoreResourceProvider resourceProvider; private final LocalKeyStoreManager localKeyStoreManager; Loading Loading @@ -182,6 +184,8 @@ public class Preferences { if (newAccount == account) { newAccount = null; } notifyListeners(); } /** Loading Loading @@ -223,6 +227,8 @@ public class Preferences { StorageEditor editor = createStorageEditor(); accountPreferenceSerializer.save(editor, storage, account); editor.commit(); notifyListeners(); } private void ensureAssignedAccountNumber(Account account) { Loading Loading @@ -286,5 +292,21 @@ public class Preferences { accountPreferenceSerializer.move(storageEditor, account, storage, mUp); storageEditor.commit(); loadAccounts(); notifyListeners(); } private void notifyListeners() { for (AccountsChangeListener listener : accountsChangeListeners) { listener.onAccountsChanged(); } } public void addOnAccountsChangeListener(@NonNull AccountsChangeListener accountsChangeListener) { accountsChangeListeners.add(accountsChangeListener); } public void removeOnAccountsChangeListener(@NonNull AccountsChangeListener accountsChangeListener) { accountsChangeListeners.remove(accountsChangeListener); } } app/core/src/main/java/com/fsck/k9/notification/NotificationChannelManager.kt +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ class NotificationChannelManager( MESSAGES, MISCELLANEOUS } init { preferences.addOnAccountsChangeListener(this::updateChannels) } fun updateChannels() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return Loading app/ui/src/main/java/com/fsck/k9/ui/account/AccountsLiveData.kt +16 −1 Original line number Diff line number Diff line Loading @@ -2,12 +2,13 @@ package com.fsck.k9.ui.account import android.arch.lifecycle.LiveData import com.fsck.k9.Account import com.fsck.k9.AccountsChangeListener import com.fsck.k9.Preferences import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.launch import org.jetbrains.anko.coroutines.experimental.bg class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>() { class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>(), AccountsChangeListener { init { loadAccountsAsync() } Loading @@ -22,7 +23,21 @@ class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>() } } override fun onAccountsChanged() { loadAccountsAsync() } private fun loadAccounts(): List<Account> { return preferences.accounts } override fun onActive() { super.onActive() preferences.addOnAccountsChangeListener(this) } override fun onInactive() { super.onInactive() preferences.removeOnAccountsChangeListener(this) } } Loading
app/core/src/main/java/com/fsck/k9/AccountsChangeListener.java 0 → 100644 +6 −0 Original line number Diff line number Diff line package com.fsck.k9; public interface AccountsChangeListener { void onAccountsChanged(); }
app/core/src/main/java/com/fsck/k9/Preferences.java +23 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ import java.util.Map; import java.util.UUID; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.RestrictTo; import android.support.annotation.RestrictTo.Scope; Loading Loading @@ -48,7 +49,8 @@ public class Preferences { private Map<String, Account> accounts = null; private List<Account> accountsInOrder = null; private Account newAccount; private Context context; private final ArrayList<AccountsChangeListener> accountsChangeListeners = new ArrayList<>(); private final Context context; private final LocalStoreProvider localStoreProvider; private final CoreResourceProvider resourceProvider; private final LocalKeyStoreManager localKeyStoreManager; Loading Loading @@ -182,6 +184,8 @@ public class Preferences { if (newAccount == account) { newAccount = null; } notifyListeners(); } /** Loading Loading @@ -223,6 +227,8 @@ public class Preferences { StorageEditor editor = createStorageEditor(); accountPreferenceSerializer.save(editor, storage, account); editor.commit(); notifyListeners(); } private void ensureAssignedAccountNumber(Account account) { Loading Loading @@ -286,5 +292,21 @@ public class Preferences { accountPreferenceSerializer.move(storageEditor, account, storage, mUp); storageEditor.commit(); loadAccounts(); notifyListeners(); } private void notifyListeners() { for (AccountsChangeListener listener : accountsChangeListeners) { listener.onAccountsChanged(); } } public void addOnAccountsChangeListener(@NonNull AccountsChangeListener accountsChangeListener) { accountsChangeListeners.add(accountsChangeListener); } public void removeOnAccountsChangeListener(@NonNull AccountsChangeListener accountsChangeListener) { accountsChangeListeners.remove(accountsChangeListener); } }
app/core/src/main/java/com/fsck/k9/notification/NotificationChannelManager.kt +4 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,10 @@ class NotificationChannelManager( MESSAGES, MISCELLANEOUS } init { preferences.addOnAccountsChangeListener(this::updateChannels) } fun updateChannels() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { return Loading
app/ui/src/main/java/com/fsck/k9/ui/account/AccountsLiveData.kt +16 −1 Original line number Diff line number Diff line Loading @@ -2,12 +2,13 @@ package com.fsck.k9.ui.account import android.arch.lifecycle.LiveData import com.fsck.k9.Account import com.fsck.k9.AccountsChangeListener import com.fsck.k9.Preferences import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.launch import org.jetbrains.anko.coroutines.experimental.bg class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>() { class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>(), AccountsChangeListener { init { loadAccountsAsync() } Loading @@ -22,7 +23,21 @@ class AccountsLiveData(val preferences: Preferences) : LiveData<List<Account>>() } } override fun onAccountsChanged() { loadAccountsAsync() } private fun loadAccounts(): List<Account> { return preferences.accounts } override fun onActive() { super.onActive() preferences.addOnAccountsChangeListener(this) } override fun onInactive() { super.onInactive() preferences.removeOnAccountsChangeListener(this) } }