0
0
mirror of https://github.com/thunderbird/thunderbird-android.git synced 2024-09-20 12:12:15 +02:00

Extract SettingsUpgrader implementations to separate files

This commit is contained in:
cketti 2023-10-05 16:35:10 +02:00
parent 1cb9a37625
commit 67839f3f14
14 changed files with 330 additions and 253 deletions

View File

@ -26,7 +26,6 @@ import com.fsck.k9.K9;
import com.fsck.k9.NotificationLight;
import com.fsck.k9.core.R;
import com.fsck.k9.mailstore.StorageManager;
import com.fsck.k9.notification.NotificationLightDecoder;
import com.fsck.k9.preferences.Settings.BooleanSetting;
import com.fsck.k9.preferences.Settings.ColorSetting;
import com.fsck.k9.preferences.Settings.EnumSetting;
@ -37,7 +36,13 @@ import com.fsck.k9.preferences.Settings.SettingsDescription;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
import com.fsck.k9.preferences.Settings.StringSetting;
import com.fsck.k9.preferences.Settings.V;
import kotlin.collections.SetsKt;
import com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo53;
import com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo54;
import com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo74;
import com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo80;
import com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo81;
import static com.fsck.k9.preferences.upgrader.AccountSettingsUpgraderTo53.FOLDER_NONE;
public class AccountSettingsDescriptions {
@ -59,7 +64,7 @@ public class AccountSettingsDescriptions {
new V(13, new BooleanSetting(false))
));
s.put("archiveFolderName", Settings.versions(
new V(1, new StringSetting(SettingsUpgraderV53.FOLDER_NONE)),
new V(1, new StringSetting(FOLDER_NONE)),
new V(53, new StringSetting(null))
));
s.put("autoExpandFolderName", Settings.versions(
@ -84,7 +89,7 @@ public class AccountSettingsDescriptions {
R.array.display_count_values))
));
s.put("draftsFolderName", Settings.versions(
new V(1, new StringSetting(SettingsUpgraderV53.FOLDER_NONE)),
new V(1, new StringSetting(FOLDER_NONE)),
new V(53, new StringSetting(null))
));
s.put("expungePolicy", Settings.versions(
@ -174,7 +179,7 @@ public class AccountSettingsDescriptions {
new V(1, new EnumSetting<>(Searchable.class, Searchable.ALL))
));
s.put("sentFolderName", Settings.versions(
new V(1, new StringSetting(SettingsUpgraderV53.FOLDER_NONE)),
new V(1, new StringSetting(FOLDER_NONE)),
new V(53, new StringSetting(null))
));
s.put("sortTypeEnum", Settings.versions(
@ -190,7 +195,7 @@ public class AccountSettingsDescriptions {
new V(1, new BooleanSetting(false))
));
s.put("spamFolderName", Settings.versions(
new V(1, new StringSetting(SettingsUpgraderV53.FOLDER_NONE)),
new V(1, new StringSetting(FOLDER_NONE)),
new V(53, new StringSetting(null))
));
s.put("stripSignature", Settings.versions(
@ -203,7 +208,7 @@ public class AccountSettingsDescriptions {
new V(1, new BooleanSetting(true))
));
s.put("trashFolderName", Settings.versions(
new V(1, new StringSetting(SettingsUpgraderV53.FOLDER_NONE)),
new V(1, new StringSetting(FOLDER_NONE)),
new V(53, new StringSetting(null))
));
s.put("useCompression.MOBILE", Settings.versions(
@ -285,11 +290,11 @@ public class AccountSettingsDescriptions {
SETTINGS = Collections.unmodifiableMap(s);
Map<Integer, SettingsUpgrader> u = new HashMap<>();
u.put(53, new SettingsUpgraderV53());
u.put(54, new SettingsUpgraderV54());
u.put(74, new SettingsUpgraderV74());
u.put(80, new SettingsUpgraderV80());
u.put(81, new SettingsUpgraderV81());
u.put(53, new AccountSettingsUpgraderTo53());
u.put(54, new AccountSettingsUpgraderTo54());
u.put(74, new AccountSettingsUpgraderTo74());
u.put(80, new AccountSettingsUpgraderTo80());
u.put(81, new AccountSettingsUpgraderTo81());
UPGRADERS = Collections.unmodifiableMap(u);
}
@ -468,110 +473,4 @@ public class AccountSettingsDescriptions {
}
}
/**
* Upgrades settings from version 52 to 53
*
* Replace folder entries of "-NONE-" with {@code null}.
*/
private static class SettingsUpgraderV53 implements SettingsUpgrader {
private static final String FOLDER_NONE = "-NONE-";
@Override
public Set<String> upgrade(Map<String, Object> settings) {
upgradeFolderEntry(settings, "archiveFolderName");
upgradeFolderEntry(settings, "autoExpandFolderName");
upgradeFolderEntry(settings, "draftsFolderName");
upgradeFolderEntry(settings, "sentFolderName");
upgradeFolderEntry(settings, "spamFolderName");
upgradeFolderEntry(settings, "trashFolderName");
return null;
}
private void upgradeFolderEntry(Map<String, Object> settings, String key) {
String archiveFolderName = (String) settings.get(key);
if (FOLDER_NONE.equals(archiveFolderName)) {
settings.put(key, null);
}
}
}
/**
* Upgrades settings from version 53 to 54
*
* Inserts folder selection entries with a value of "MANUAL"
*/
private static class SettingsUpgraderV54 implements SettingsUpgrader {
private static final String FOLDER_SELECTION_MANUAL = "MANUAL";
@Override
public Set<String> upgrade(Map<String, Object> settings) {
settings.put("archiveFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("draftsFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("sentFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("spamFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("trashFolderSelection", FOLDER_SELECTION_MANUAL);
return null;
}
}
/**
* Upgrades settings from version 73 to 74
*
* Rewrites 'idleRefreshMinutes' from '1' to '2' if necessary
*/
private static class SettingsUpgraderV74 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Integer idleRefreshMinutes = (Integer) settings.get("idleRefreshMinutes");
if (idleRefreshMinutes == 1) {
settings.put("idleRefreshMinutes", 2);
}
return null;
}
}
/**
* Upgrades settings from version 79 to 80
*
* Rewrites 'led' and 'lecColor' to 'notificationLight'.
*/
private static class SettingsUpgraderV80 implements SettingsUpgrader {
private final NotificationLightDecoder notificationLightDecoder = DI.get(NotificationLightDecoder.class);
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean isLedEnabled = (Boolean) settings.get("led");
Integer ledColor = (Integer) settings.get("ledColor");
Integer chipColor = (Integer) settings.get("chipColor");
if (isLedEnabled != null && ledColor != null) {
int accountColor = chipColor != null ? chipColor : 0;
NotificationLight light = notificationLightDecoder.decode(isLedEnabled, ledColor, accountColor);
settings.put("notificationLight", light.name());
}
return SetsKt.setOf("led", "ledColor");
}
}
/**
* Rewrite the per-network type IMAP compression settings to a single setting.
*/
private static class SettingsUpgraderV81 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean useCompressionWifi = (Boolean) settings.get("useCompression.WIFI");
Boolean useCompressionMobile = (Boolean) settings.get("useCompression.MOBILE");
Boolean useCompressionOther = (Boolean) settings.get("useCompression.OTHER");
boolean useCompression = useCompressionWifi != null && useCompressionMobile != null &&
useCompressionOther != null && useCompressionWifi && useCompressionMobile && useCompressionOther;
settings.put("useCompression", useCompression);
return SetsKt.setOf("useCompression.WIFI", "useCompression.MOBILE", "useCompression.OTHER");
}
}
}

View File

@ -3,7 +3,6 @@ package com.fsck.k9.preferences;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
@ -33,6 +32,11 @@ import com.fsck.k9.preferences.Settings.SettingsDescription;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
import com.fsck.k9.preferences.Settings.V;
import com.fsck.k9.preferences.Settings.WebFontSizeSetting;
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo24;
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo31;
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo58;
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo69;
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo79;
import static com.fsck.k9.K9.LockScreenNotificationVisibility;
@ -285,11 +289,11 @@ public class GeneralSettingsDescriptions {
SETTINGS = Collections.unmodifiableMap(s);
Map<Integer, SettingsUpgrader> u = new HashMap<>();
u.put(24, new SettingsUpgraderV24());
u.put(31, new SettingsUpgraderV31());
u.put(58, new SettingsUpgraderV58());
u.put(69, new SettingsUpgraderV69());
u.put(79, new SettingsUpgraderV79());
u.put(24, new GeneralSettingsUpgraderTo24());
u.put(31, new GeneralSettingsUpgraderTo31());
u.put(58, new GeneralSettingsUpgraderTo58());
u.put(69, new GeneralSettingsUpgraderTo69());
u.put(79, new GeneralSettingsUpgraderTo79());
UPGRADERS = Collections.unmodifiableMap(u);
}
@ -317,132 +321,6 @@ public class GeneralSettingsDescriptions {
return result;
}
/**
* Upgrades the settings from version 23 to 24.
*
* <p>
* Set <em>messageViewTheme</em> to {@link SubTheme#USE_GLOBAL} if <em>messageViewTheme</em> has
* the same value as <em>theme</em>.
* </p>
*/
private static class SettingsUpgraderV24 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
SubTheme messageViewTheme = (SubTheme) settings.get("messageViewTheme");
AppTheme theme = (AppTheme) settings.get("theme");
if ((theme == AppTheme.LIGHT && messageViewTheme == SubTheme.LIGHT) ||
(theme == AppTheme.DARK && messageViewTheme == SubTheme.DARK)) {
settings.put("messageViewTheme", SubTheme.USE_GLOBAL);
}
return null;
}
}
/**
* Upgrades the settings from version 30 to 31.
*
* <p>
* Convert value from <em>fontSizeMessageViewContent</em> to
* <em>fontSizeMessageViewContentPercent</em>.
* </p>
*/
public static class SettingsUpgraderV31 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
int oldSize = (Integer) settings.get("fontSizeMessageViewContent");
int newSize = convertFromOldSize(oldSize);
settings.put("fontSizeMessageViewContentPercent", newSize);
return new HashSet<>(Collections.singletonList("fontSizeMessageViewContent"));
}
public static int convertFromOldSize(int oldSize) {
switch (oldSize) {
case 1: {
return 40;
}
case 2: {
return 75;
}
case 4: {
return 175;
}
case 5: {
return 250;
}
case 3:
default: {
return 100;
}
}
}
}
/**
* Upgrades the settings from version 57 to 58.
*
* <p>
* Set <em>theme</em> to {@link AppTheme#FOLLOW_SYSTEM} if <em>theme</em> has the value {@link AppTheme#LIGHT}.
* </p>
*/
private static class SettingsUpgraderV58 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
AppTheme theme = (AppTheme) settings.get("theme");
if (theme == AppTheme.LIGHT) {
settings.put("theme", AppTheme.FOLLOW_SYSTEM);
}
return null;
}
}
/**
* Upgrades the settings from version 68 to 69.
*
* <p>
* Renames {@code hideSpecialAccounts} to {@code showUnifiedInbox}.
* </p>
*/
private static class SettingsUpgraderV69 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean hideSpecialAccounts = (Boolean) settings.get("hideSpecialAccounts");
boolean showUnifiedInbox = hideSpecialAccounts == null || !hideSpecialAccounts;
settings.put("showUnifiedInbox", showUnifiedInbox);
return new HashSet<>(Collections.singleton("hideSpecialAccounts"));
}
}
/**
* Upgrades the settings from version 78 to 79.
*
* <p>
* Change default value of {@code registeredNameColor} to have enough contrast in both the light and dark theme.
* </p>
*/
private static class SettingsUpgraderV79 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
final Integer registeredNameColorValue = (Integer) settings.get("registeredNameColor");
if (registeredNameColorValue != null && registeredNameColorValue == 0xFF00008F) {
settings.put("registeredNameColor", 0xFF1093F5);
}
return null;
}
}
private static class LanguageSetting extends PseudoEnumSetting<String> {
private final Context context = DI.get(Context.class);
private final Map<String, String> mapping;

View File

@ -367,7 +367,7 @@ public class Settings {
*
* @see Settings#upgrade(int, Map, Map, Map)
*/
interface SettingsUpgrader {
public interface SettingsUpgrader {
/**
* Upgrade the provided settings.
*

View File

@ -0,0 +1,34 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Replace folder entries of "-NONE-" with {@code null}.
*/
public class AccountSettingsUpgraderTo53 implements SettingsUpgrader {
public static final String FOLDER_NONE = "-NONE-";
@Override
public Set<String> upgrade(Map<String, Object> settings) {
upgradeFolderEntry(settings, "archiveFolderName");
upgradeFolderEntry(settings, "autoExpandFolderName");
upgradeFolderEntry(settings, "draftsFolderName");
upgradeFolderEntry(settings, "sentFolderName");
upgradeFolderEntry(settings, "spamFolderName");
upgradeFolderEntry(settings, "trashFolderName");
return null;
}
private void upgradeFolderEntry(Map<String, Object> settings, String key) {
String archiveFolderName = (String) settings.get(key);
if (FOLDER_NONE.equals(archiveFolderName)) {
settings.put(key, null);
}
}
}

View File

@ -0,0 +1,26 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Inserts folder selection entries with a value of "MANUAL"
*/
public class AccountSettingsUpgraderTo54 implements SettingsUpgrader {
private static final String FOLDER_SELECTION_MANUAL = "MANUAL";
@Override
public Set<String> upgrade(Map<String, Object> settings) {
settings.put("archiveFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("draftsFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("sentFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("spamFolderSelection", FOLDER_SELECTION_MANUAL);
settings.put("trashFolderSelection", FOLDER_SELECTION_MANUAL);
return null;
}
}

View File

@ -0,0 +1,23 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Rewrites 'idleRefreshMinutes' from '1' to '2' if necessary
*/
public class AccountSettingsUpgraderTo74 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Integer idleRefreshMinutes = (Integer) settings.get("idleRefreshMinutes");
if (idleRefreshMinutes == 1) {
settings.put("idleRefreshMinutes", 2);
}
return null;
}
}

View File

@ -0,0 +1,34 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.DI;
import com.fsck.k9.NotificationLight;
import com.fsck.k9.notification.NotificationLightDecoder;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
import kotlin.collections.SetsKt;
/**
* Rewrites 'led' and 'lecColor' to 'notificationLight'.
*/
public class AccountSettingsUpgraderTo80 implements SettingsUpgrader {
private final NotificationLightDecoder notificationLightDecoder = DI.get(NotificationLightDecoder.class);
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean isLedEnabled = (Boolean) settings.get("led");
Integer ledColor = (Integer) settings.get("ledColor");
Integer chipColor = (Integer) settings.get("chipColor");
if (isLedEnabled != null && ledColor != null) {
int accountColor = chipColor != null ? chipColor : 0;
NotificationLight light = notificationLightDecoder.decode(isLedEnabled, ledColor, accountColor);
settings.put("notificationLight", light.name());
}
return SetsKt.setOf("led", "ledColor");
}
}

View File

@ -0,0 +1,27 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
import kotlin.collections.SetsKt;
/**
* Rewrite the per-network type IMAP compression settings to a single setting.
*/
public class AccountSettingsUpgraderTo81 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean useCompressionWifi = (Boolean) settings.get("useCompression.WIFI");
Boolean useCompressionMobile = (Boolean) settings.get("useCompression.MOBILE");
Boolean useCompressionOther = (Boolean) settings.get("useCompression.OTHER");
boolean useCompression = useCompressionWifi != null && useCompressionMobile != null &&
useCompressionOther != null && useCompressionWifi && useCompressionMobile && useCompressionOther;
settings.put("useCompression", useCompression);
return SetsKt.setOf("useCompression.WIFI", "useCompression.MOBILE", "useCompression.OTHER");
}
}

View File

@ -0,0 +1,29 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.AppTheme;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
import com.fsck.k9.preferences.SubTheme;
/**
* Set <em>messageViewTheme</em> to {@link SubTheme#USE_GLOBAL} if <em>messageViewTheme</em> has the same value as
* <em>theme</em>.
*/
public class GeneralSettingsUpgraderTo24 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
SubTheme messageViewTheme = (SubTheme) settings.get("messageViewTheme");
AppTheme theme = (AppTheme) settings.get("theme");
if ((theme == AppTheme.LIGHT && messageViewTheme == SubTheme.LIGHT) ||
(theme == AppTheme.DARK && messageViewTheme == SubTheme.DARK)) {
settings.put("messageViewTheme", SubTheme.USE_GLOBAL);
}
return null;
}
}

View File

@ -0,0 +1,48 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Convert value from <em>fontSizeMessageViewContent</em> to <em>fontSizeMessageViewContentPercent</em>.
*/
public class GeneralSettingsUpgraderTo31 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
int oldSize = (Integer) settings.get("fontSizeMessageViewContent");
int newSize = convertFromOldSize(oldSize);
settings.put("fontSizeMessageViewContentPercent", newSize);
return new HashSet<>(Collections.singletonList("fontSizeMessageViewContent"));
}
public static int convertFromOldSize(int oldSize) {
switch (oldSize) {
case 1: {
return 40;
}
case 2: {
return 75;
}
case 4: {
return 175;
}
case 5: {
return 250;
}
case 3:
default: {
return 100;
}
}
}
}

View File

@ -0,0 +1,25 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.AppTheme;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Set <em>theme</em> to {@link AppTheme#FOLLOW_SYSTEM} if <em>theme</em> has the value {@link AppTheme#LIGHT}.
*/
public class GeneralSettingsUpgraderTo58 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
AppTheme theme = (AppTheme) settings.get("theme");
if (theme == AppTheme.LIGHT) {
settings.put("theme", AppTheme.FOLLOW_SYSTEM);
}
return null;
}
}

View File

@ -0,0 +1,25 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Renames {@code hideSpecialAccounts} to {@code showUnifiedInbox}.
*/
public class GeneralSettingsUpgraderTo69 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
Boolean hideSpecialAccounts = (Boolean) settings.get("hideSpecialAccounts");
boolean showUnifiedInbox = hideSpecialAccounts == null || !hideSpecialAccounts;
settings.put("showUnifiedInbox", showUnifiedInbox);
return new HashSet<>(Collections.singleton("hideSpecialAccounts"));
}
}

View File

@ -0,0 +1,29 @@
package com.fsck.k9.preferences.upgrader;
import java.util.Map;
import java.util.Set;
import com.fsck.k9.preferences.Settings.SettingsUpgrader;
/**
* Upgrades the settings from version 78 to 79.
*
* <p>
* Change default value of {@code registeredNameColor} to have enough contrast in both the light and dark theme.
* </p>
*/
public class GeneralSettingsUpgraderTo79 implements SettingsUpgrader {
@Override
public Set<String> upgrade(Map<String, Object> settings) {
final Integer registeredNameColorValue = (Integer) settings.get("registeredNameColor");
if (registeredNameColorValue != null && registeredNameColorValue == 0xFF00008F) {
settings.put("registeredNameColor", 0xFF1093F5);
}
return null;
}
}

View File

@ -1,7 +1,7 @@
package com.fsck.k9.preferences.migrations
import android.database.sqlite.SQLiteDatabase
import com.fsck.k9.preferences.GeneralSettingsDescriptions
import com.fsck.k9.preferences.upgrader.GeneralSettingsUpgraderTo31
/**
* Convert old value for message view content font size to new format.
@ -19,7 +19,7 @@ class StorageMigrationTo11(
if (newFontSizeValue != null) return
val oldFontSizeValue = migrationsHelper.readValue(db, "fontSizeMessageViewContent")?.toIntOrNull() ?: 3
val fontSizeValue = GeneralSettingsDescriptions.SettingsUpgraderV31.convertFromOldSize(oldFontSizeValue)
val fontSizeValue = GeneralSettingsUpgraderTo31.convertFromOldSize(oldFontSizeValue)
migrationsHelper.writeValue(db, "fontSizeMessageViewContentPercent", fontSizeValue.toString())
migrationsHelper.writeValue(db, "fontSizeMessageViewContent", null)
}