From 926406edd3e155bd9bf9273631aa0d7ff629b671 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 c1fc7a482..3d49694b6 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; @@ -415,18 +416,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");