From 37b26ffe840a7e7ad526d8b6193d9ea34a52f5bc Mon Sep 17 00:00:00 2001 From: cketti Date: Thu, 5 Jan 2012 19:22:35 +0100 Subject: [PATCH] Be more careful when deleting an account Fixes issue 3954 --- src/com/fsck/k9/Account.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/com/fsck/k9/Account.java b/src/com/fsck/k9/Account.java index 3a891c286..9cab5c7d1 100644 --- a/src/com/fsck/k9/Account.java +++ b/src/com/fsck/k9/Account.java @@ -18,6 +18,7 @@ import com.fsck.k9.mail.store.StorageManager; import com.fsck.k9.mail.store.StorageManager.StorageProvider; import com.fsck.k9.view.ColorChip; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -401,18 +402,24 @@ public class Account implements BaseAccount { } protected synchronized void delete(Preferences preferences) { + // Get the list of account UUIDs String[] uuids = preferences.getPreferences().getString("accountUuids", "").split(","); - String[] newUuids = new String[uuids.length - 1]; - int i = 0; + + // Create a list of all account UUIDs excluding this account + List newUuids = new ArrayList(uuids.length); for (String uuid : uuids) { - if (uuid.equals(mUuid) == false) { - newUuids[i++] = uuid; + if (!uuid.equals(mUuid)) { + newUuids.add(uuid); } } - String accountUuids = Utility.combine(newUuids, ','); SharedPreferences.Editor editor = preferences.getPreferences().edit(); - editor.putString("accountUuids", accountUuids); + + // Only change the 'accountUuids' value if this account's UUID was listed before + if (newUuids.size() < uuids.length) { + String accountUuids = Utility.combine(newUuids.toArray(), ','); + editor.putString("accountUuids", accountUuids); + } editor.remove(mUuid + ".storeUri"); editor.remove(mUuid + ".localStoreUri");