1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-27 11:42:16 -05:00

Merge branch 'pr/349'

Remove remote/local store references when deleting accounts
This commit is contained in:
cketti 2013-08-30 03:03:30 +02:00
commit 8fb2c5a490
2 changed files with 48 additions and 2 deletions

View File

@ -11,6 +11,8 @@ import java.util.Map;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Log; import android.util.Log;
import com.fsck.k9.mail.Store;
import com.fsck.k9.preferences.Editor; import com.fsck.k9.preferences.Editor;
import com.fsck.k9.preferences.Storage; import com.fsck.k9.preferences.Storage;
@ -123,6 +125,8 @@ public class Preferences {
accountsInOrder.remove(account); accountsInOrder.remove(account);
} }
Store.removeAccount(account);
account.delete(this); account.delete(this);
if (newAccount == account) { if (newAccount == account) {

View File

@ -7,8 +7,10 @@ import java.util.concurrent.ConcurrentHashMap;
import android.app.Application; import android.app.Application;
import android.content.Context; import android.content.Context;
import android.util.Log;
import com.fsck.k9.Account; import com.fsck.k9.Account;
import com.fsck.k9.K9;
import com.fsck.k9.mail.store.ImapStore; import com.fsck.k9.mail.store.ImapStore;
import com.fsck.k9.mail.store.LocalStore; import com.fsck.k9.mail.store.LocalStore;
import com.fsck.k9.mail.store.Pop3Store; import com.fsck.k9.mail.store.Pop3Store;
@ -111,6 +113,48 @@ public abstract class Store {
} }
} }
public static void removeAccount(Account account) {
try {
removeRemoteInstance(account);
} catch (Exception e) {
Log.e(K9.LOG_TAG, "Failed to reset remote store for account " + account.getUuid(), e);
}
try {
removeLocalInstance(account);
} catch (Exception e) {
Log.e(K9.LOG_TAG, "Failed to reset local store for account " + account.getUuid(), e);
}
}
/**
* Release reference to a local mail store instance.
*
* @param account
* {@link Account} instance that is used to get the local mail store instance.
*/
private static void removeLocalInstance(Account account) {
String accountUuid = account.getUuid();
sLocalStores.remove(accountUuid);
}
/**
* Release reference to a remote mail store instance.
*
* @param account
* {@link Account} instance that is used to get the remote mail store instance.
*/
private synchronized static void removeRemoteInstance(Account account) {
String uri = account.getStoreUri();
if (uri.startsWith("local")) {
throw new RuntimeException("Asked to get non-local Store object but given " +
"LocalStore URI");
}
sStores.remove(uri);
}
/** /**
* Decodes the contents of store-specific URIs and puts them into a {@link ServerSettings} * Decodes the contents of store-specific URIs and puts them into a {@link ServerSettings}
* object. * object.
@ -208,6 +252,4 @@ public abstract class Store {
public Account getAccount() { public Account getAccount() {
return mAccount; return mAccount;
} }
} }