From 556503318c118765e8038ca388e999c9288f4555 Mon Sep 17 00:00:00 2001 From: cketti Date: Tue, 26 Feb 2013 18:29:12 +0100 Subject: [PATCH] Rework code for predefinied account colors --- src/com/fsck/k9/Account.java | 87 ++++--------------- .../k9/activity/setup/AccountSettings.java | 2 +- .../fsck/k9/preferences/GlobalSettings.java | 4 - src/com/fsck/k9/preferences/Settings.java | 2 +- 4 files changed, 19 insertions(+), 76 deletions(-) diff --git a/src/com/fsck/k9/Account.java b/src/com/fsck/k9/Account.java index 3a8c18492..1a85715fb 100644 --- a/src/com/fsck/k9/Account.java +++ b/src/com/fsck/k9/Account.java @@ -11,7 +11,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.HashMap; -import java.util.HashSet; import java.util.concurrent.ConcurrentHashMap; import android.content.ContentResolver; @@ -91,18 +90,16 @@ public class Account implements BaseAccount { public static final String IDENTITY_EMAIL_KEY = "email"; public static final String IDENTITY_DESCRIPTION_KEY = "description"; - private static final String EMPTY = "empty"; - /* - http://developer.android.com/design/style/color.html - Note: Order does matter, it's the order in which they will be picked. - */ + * http://developer.android.com/design/style/color.html + * Note: Order does matter, it's the order in which they will be picked. + */ public static final Integer[] PREDEFINED_COLORS = new Integer[] { Color.parseColor("#0099CC"), // blue Color.parseColor("#669900"), // green Color.parseColor("#FF8800"), // orange - Color.parseColor("#CC0000"), // red - Color.parseColor("#9933CC") // purple + Color.parseColor("#CC0000"), // red + Color.parseColor("#9933CC") // purple }; public enum SortType { @@ -345,59 +342,22 @@ public class Account implements BaseAccount { * Pick a nice Android guidelines color if we haven't used them all yet. */ private int pickColor(Context context) { - SharedPreferences prefs = Preferences.getPreferences(context).getPreferences(); - String availableColors = prefs.getString("availableColors",""); + Account[] accounts = Preferences.getPreferences(context).getAccounts(); - if (!availableColors.equals(EMPTY)) { + List availableColors = new ArrayList(PREDEFINED_COLORS.length); + Collections.addAll(availableColors, PREDEFINED_COLORS); - // first run - if (availableColors.isEmpty()) { - availableColors = Utility.combine(Account.PREDEFINED_COLORS, ','); - } - - String[] colors = availableColors.split(","); - - // determine remaining colors - String remainingColors = ""; - if (colors.length > 1) { - remainingColors = Utility.combine(Arrays.copyOfRange(colors, 1, colors.length), ','); - } else { - remainingColors = EMPTY; - } - - // save remaining colors - SharedPreferences.Editor editor = prefs.edit(); - editor.putString("availableColors", remainingColors); - editor.commit(); - - return Integer.parseInt(colors[0]); - } else { - return ColorPicker.getRandomColor(); - } - } - - /* - Put the account color back in circulation if it's a predefined one, - we also want to maintain the order of preference. - */ - private String calculateAvailableColors(Preferences preferences, int currentColor) { - ArrayList newAvailableColors = new ArrayList(); - HashSet oldAvailableColors = new HashSet(); - String oldColors = preferences.getPreferences().getString("availableColors", ""); - - if (!oldColors.equals(EMPTY)) { - for (String color : oldColors.split(",")) { - oldAvailableColors.add(Integer.parseInt(color)); + for (Account account : accounts) { + Integer color = account.getChipColor(); + if (availableColors.contains(color)) { + availableColors.remove(color); + if (availableColors.isEmpty()) { + break; + } } } - for (Integer color : PREDEFINED_COLORS) { - if (color == currentColor || oldAvailableColors.contains(color)) { - newAvailableColors.add(color); - } - } - - return Utility.combine(newAvailableColors.toArray(), ','); + return (availableColors.isEmpty()) ? ColorPicker.getRandomColor() : availableColors.get(0); } protected Account(Preferences preferences, String uuid) { @@ -566,11 +526,6 @@ public class Account implements BaseAccount { editor.putString("accountUuids", accountUuids); } - // Put color back in circulation if necesarry - if (Arrays.asList(PREDEFINED_COLORS).contains(mChipColor)) { - editor.putString("availableColors", calculateAvailableColors(preferences, mChipColor)); - } - editor.remove(mUuid + ".storeUri"); editor.remove(mUuid + ".localStoreUri"); editor.remove(mUuid + ".transportUri"); @@ -884,15 +839,7 @@ public class Account implements BaseAccount { } - public synchronized void setChipColor(Context context, int color) { - // release current color if predefined one - if (Arrays.asList(PREDEFINED_COLORS).contains(mChipColor)) { - String availableColors = calculateAvailableColors(Preferences.getPreferences(context), color); - SharedPreferences.Editor editor = Preferences.getPreferences(context).getPreferences().edit(); - editor.putString("availableColors", availableColors); - editor.commit(); - } - + public synchronized void setChipColor(int color) { mChipColor = color; cacheChips(); } diff --git a/src/com/fsck/k9/activity/setup/AccountSettings.java b/src/com/fsck/k9/activity/setup/AccountSettings.java index 6e3a7ff6b..ff50eef14 100644 --- a/src/com/fsck/k9/activity/setup/AccountSettings.java +++ b/src/com/fsck/k9/activity/setup/AccountSettings.java @@ -884,7 +884,7 @@ public class AccountSettings extends K9PreferenceActivity { dialog = new ColorPickerDialog(this, new ColorPickerDialog.OnColorChangedListener() { public void colorChanged(int color) { - mAccount.setChipColor(AccountSettings.this, color); + mAccount.setChipColor(color); } }, mAccount.getChipColor()); diff --git a/src/com/fsck/k9/preferences/GlobalSettings.java b/src/com/fsck/k9/preferences/GlobalSettings.java index d51942020..5357149ae 100644 --- a/src/com/fsck/k9/preferences/GlobalSettings.java +++ b/src/com/fsck/k9/preferences/GlobalSettings.java @@ -21,7 +21,6 @@ import com.fsck.k9.K9.SplitViewMode; import com.fsck.k9.K9.Theme; import com.fsck.k9.R; import com.fsck.k9.Account.SortType; -import com.fsck.k9.helper.Utility; import com.fsck.k9.preferences.Settings.*; public class GlobalSettings { @@ -222,9 +221,6 @@ public class GlobalSettings { s.put("showContactPicture", Settings.versions( new V(25, new BooleanSetting(true)) )); - s.put("availableColors", Settings.versions( - new V(26, new StringSetting(Utility.combine(Account.PREDEFINED_COLORS, ','))) - )); SETTINGS = Collections.unmodifiableMap(s); diff --git a/src/com/fsck/k9/preferences/Settings.java b/src/com/fsck/k9/preferences/Settings.java index e52872f20..b56f2d87e 100644 --- a/src/com/fsck/k9/preferences/Settings.java +++ b/src/com/fsck/k9/preferences/Settings.java @@ -35,7 +35,7 @@ public class Settings { * * @see SettingsExporter */ - public static final int VERSION = 27; + public static final int VERSION = 26; public static Map validate(int version, Map> settings,