Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cad7da10 authored by Vincent Breitmoser's avatar Vincent Breitmoser
Browse files

use generics for all SettingsDescription subclasses

parent a6dfa14a
Loading
Loading
Loading
Loading
+22 −12
Original line number Diff line number Diff line
package com.fsck.k9.preferences;


import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
@@ -19,7 +20,16 @@ import com.fsck.k9.Account.SortType;
import com.fsck.k9.K9;
import com.fsck.k9.R;
import com.fsck.k9.mailstore.StorageManager;
import com.fsck.k9.preferences.Settings.*;
import com.fsck.k9.preferences.Settings.BooleanSetting;
import com.fsck.k9.preferences.Settings.ColorSetting;
import com.fsck.k9.preferences.Settings.EnumSetting;
import com.fsck.k9.preferences.Settings.IntegerRangeSetting;
import com.fsck.k9.preferences.Settings.InvalidSettingValueException;
import com.fsck.k9.preferences.Settings.PseudoEnumSetting;
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;

public class AccountSettings {
    public static final Map<String, TreeMap<Integer, SettingsDescription>> SETTINGS;
@@ -273,7 +283,7 @@ public class AccountSettings {
        public IntegerResourceSetting(int defaultValue, int resId) {
            super(defaultValue);

            Map<Integer, String> mapping = new HashMap<Integer, String>();
            Map<Integer, String> mapping = new HashMap<>();
            String[] values = K9.app.getResources().getStringArray(resId);
            for (String value : values) {
                int intValue = Integer.parseInt(value);
@@ -288,7 +298,7 @@ public class AccountSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                return Integer.parseInt(value);
            } catch (NumberFormatException e) {
@@ -324,7 +334,7 @@ public class AccountSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            if (!mMapping.containsKey(value)) {
                throw new InvalidSettingValueException();
            }
@@ -335,13 +345,13 @@ public class AccountSettings {
    /**
     * The notification ringtone setting.
     */
    public static class RingtoneSetting extends SettingsDescription {
    public static class RingtoneSetting extends SettingsDescription<String> {
        public RingtoneSetting(String defaultValue) {
            super(defaultValue);
        }

        @Override
        public Object fromString(String value) {
        public String fromString(String value) {
            //TODO: add validation
            return value;
        }
@@ -350,18 +360,18 @@ public class AccountSettings {
    /**
     * The storage provider setting.
     */
    public static class StorageProviderSetting extends SettingsDescription {
    public static class StorageProviderSetting extends SettingsDescription<String> {
        public StorageProviderSetting() {
            super(null);
        }

        @Override
        public Object getDefaultValue() {
        public String getDefaultValue() {
            return StorageManager.getInstance(K9.app).getDefaultProviderId();
        }

        @Override
        public Object fromString(String value) {
        public String fromString(String value) {
            StorageManager storageManager = StorageManager.getInstance(K9.app);
            Map<String, String> providers = storageManager.getAvailableProviders();
            if (providers.containsKey(value)) {
@@ -375,8 +385,8 @@ public class AccountSettings {
        private Map<Integer, String> mMapping;

        public DeletePolicySetting(DeletePolicy defaultValue) {
            super(defaultValue);
            Map<Integer, String> mapping = new HashMap<Integer, String>();
            super(defaultValue.setting);
            Map<Integer, String> mapping = new HashMap<>();
            mapping.put(DeletePolicy.NEVER.setting, "NEVER");
            mapping.put(DeletePolicy.ON_DELETE.setting, "DELETE");
            mapping.put(DeletePolicy.MARK_AS_READ.setting, "MARK_AS_READ");
@@ -389,7 +399,7 @@ public class AccountSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                Integer deletePolicy = Integer.parseInt(value);
                if (mMapping.containsKey(deletePolicy)) {
+29 −18
Original line number Diff line number Diff line
package com.fsck.k9.preferences;


import java.io.File;
import java.util.Arrays;
import java.util.Collections;
@@ -13,6 +14,7 @@ import java.util.TreeMap;
import android.os.Environment;

import com.fsck.k9.Account;
import com.fsck.k9.Account.SortType;
import com.fsck.k9.FontSizes;
import com.fsck.k9.K9;
import com.fsck.k9.K9.NotificationHideSubject;
@@ -20,8 +22,17 @@ import com.fsck.k9.K9.NotificationQuickDelete;
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.preferences.Settings.*;
import com.fsck.k9.preferences.Settings.BooleanSetting;
import com.fsck.k9.preferences.Settings.ColorSetting;
import com.fsck.k9.preferences.Settings.EnumSetting;
import com.fsck.k9.preferences.Settings.FontSizeSetting;
import com.fsck.k9.preferences.Settings.IntegerRangeSetting;
import com.fsck.k9.preferences.Settings.InvalidSettingValueException;
import com.fsck.k9.preferences.Settings.PseudoEnumSetting;
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 static com.fsck.k9.K9.LockScreenNotificationVisibility;

@@ -431,7 +442,7 @@ public class GlobalSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            if (mMapping.containsKey(value)) {
                return value;
            }
@@ -443,7 +454,7 @@ public class GlobalSettings {
    /**
     * The theme setting.
     */
    public static class ThemeSetting extends SettingsDescription {
    public static class ThemeSetting extends SettingsDescription<K9.Theme> {
        private static final String THEME_LIGHT = "light";
        private static final String THEME_DARK = "dark";

@@ -452,7 +463,7 @@ public class GlobalSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public K9.Theme fromString(String value) throws InvalidSettingValueException {
            try {
                Integer theme = Integer.parseInt(value);
                if (theme == K9.Theme.LIGHT.ordinal() ||
@@ -470,7 +481,7 @@ public class GlobalSettings {
        }

        @Override
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
        public K9.Theme fromPrettyString(String value) throws InvalidSettingValueException {
            if (THEME_LIGHT.equals(value)) {
                return K9.Theme.LIGHT;
            } else if (THEME_DARK.equals(value)) {
@@ -481,8 +492,8 @@ public class GlobalSettings {
        }

        @Override
        public String toPrettyString(Object value) {
            switch ((K9.Theme) value) {
        public String toPrettyString(K9.Theme value) {
            switch (value) {
                case DARK: {
                    return THEME_DARK;
                }
@@ -493,8 +504,8 @@ public class GlobalSettings {
        }

        @Override
        public String toString(Object value) {
            return Integer.toString(((K9.Theme) value).ordinal());
        public String toString(K9.Theme value) {
            return Integer.toString(value.ordinal());
        }
    }

@@ -509,7 +520,7 @@ public class GlobalSettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public K9.Theme fromString(String value) throws InvalidSettingValueException {
            try {
                Integer theme = Integer.parseInt(value);
                if (theme == K9.Theme.USE_GLOBAL.ordinal()) {
@@ -523,7 +534,7 @@ public class GlobalSettings {
        }

        @Override
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
        public K9.Theme fromPrettyString(String value) throws InvalidSettingValueException {
            if (THEME_USE_GLOBAL.equals(value)) {
                return K9.Theme.USE_GLOBAL;
            }
@@ -532,8 +543,8 @@ public class GlobalSettings {
        }

        @Override
        public String toPrettyString(Object value) {
            if (((K9.Theme) value) == K9.Theme.USE_GLOBAL) {
        public String toPrettyString(K9.Theme value) {
            if (value == K9.Theme.USE_GLOBAL) {
                return THEME_USE_GLOBAL;
            }

@@ -544,13 +555,13 @@ public class GlobalSettings {
    /**
     * A time setting.
     */
    public static class TimeSetting extends SettingsDescription {
    public static class TimeSetting extends SettingsDescription<String> {
        public TimeSetting(String defaultValue) {
            super(defaultValue);
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            if (!value.matches(TimePickerPreference.VALIDATION_EXPRESSION)) {
                throw new InvalidSettingValueException();
            }
@@ -561,13 +572,13 @@ public class GlobalSettings {
    /**
     * A directory on the file system.
     */
    public static class DirectorySetting extends SettingsDescription {
    public static class DirectorySetting extends SettingsDescription<String> {
        public DirectorySetting(File defaultPath) {
            super(defaultPath.toString());
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            try {
                if (new File(value).isDirectory()) {
                    return value;
+11 −11
Original line number Diff line number Diff line
@@ -76,18 +76,18 @@ public class IdentitySettings {
    /**
     * The message signature setting.
     */
    public static class SignatureSetting extends SettingsDescription {
    public static class SignatureSetting extends SettingsDescription<String> {
        public SignatureSetting() {
            super(null);
        }

        @Override
        public Object getDefaultValue() {
        public String getDefaultValue() {
            return K9.app.getResources().getString(R.string.default_signature);
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            return value;
        }
    }
@@ -95,7 +95,7 @@ public class IdentitySettings {
    /**
     * An optional email address setting.
     */
    public static class OptionalEmailAddressSetting extends SettingsDescription {
    public static class OptionalEmailAddressSetting extends SettingsDescription<String> {
        private EmailAddressValidator mValidator;

        public OptionalEmailAddressSetting() {
@@ -104,7 +104,7 @@ public class IdentitySettings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public String fromString(String value) throws InvalidSettingValueException {
            if (value != null && !mValidator.isValidAddressOnly(value)) {
                throw new InvalidSettingValueException();
            }
@@ -112,18 +112,18 @@ public class IdentitySettings {
        }

        @Override
        public String toString(Object value) {
            return (value != null) ? value.toString() : null;
        public String toString(String value) {
            return (value != null) ? value : null;
        }

        @Override
        public String toPrettyString(Object value) {
            return (value == null) ? "" : value.toString();
        public String toPrettyString(String value) {
            return (value == null) ? "" : value;
        }

        @Override
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
            return ("".equals(value)) ? null : fromString(value);
        public String fromPrettyString(String value) throws InvalidSettingValueException {
            return "".equals(value) ? null : fromString(value);
        }
    }
}
+28 −28
Original line number Diff line number Diff line
@@ -272,13 +272,13 @@ public class Settings {
     * negligible.
     * </p>
     */
    static abstract class SettingsDescription {
    static abstract class SettingsDescription<A> {
        /**
         * The setting's default value (internal representation).
         */
        Object mDefaultValue;
        A mDefaultValue;

        SettingsDescription(Object defaultValue) {
        SettingsDescription(A defaultValue) {
            mDefaultValue = defaultValue;
        }

@@ -287,7 +287,7 @@ public class Settings {
         *
         * @return The internal representation of the default value.
         */
        public Object getDefaultValue() {
        public A getDefaultValue() {
            return mDefaultValue;
        }

@@ -299,7 +299,7 @@ public class Settings {
         *
         * @return The string representation of {@code value}.
         */
        public String toString(Object value) {
        public String toString(A value) {
            return value.toString();
        }

@@ -314,7 +314,7 @@ public class Settings {
         * @throws InvalidSettingValueException
         *         If {@code value} contains an invalid value.
         */
        public abstract Object fromString(String value) throws InvalidSettingValueException;
        public abstract A fromString(String value) throws InvalidSettingValueException;

        /**
         * Convert a setting value to the "pretty" string representation.
@@ -324,7 +324,7 @@ public class Settings {
         *
         * @return A pretty-printed version of the setting's value.
         */
        public String toPrettyString(Object value) {
        public String toPrettyString(A value) {
            return toString(value);
        }

@@ -340,7 +340,7 @@ public class Settings {
         * @throws InvalidSettingValueException
         *         If {@code value} contains an invalid value.
         */
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
        public A fromPrettyString(String value) throws InvalidSettingValueException {
            return fromString(value);
        }
    }
@@ -383,13 +383,13 @@ public class Settings {
    /**
     * A string setting.
     */
    static class StringSetting extends SettingsDescription {
    static class StringSetting extends SettingsDescription<String> {
        StringSetting(String defaultValue) {
            super(defaultValue);
        }

        @Override
        public Object fromString(String value) {
        public String fromString(String value) {
            return value;
        }
    }
@@ -397,13 +397,13 @@ public class Settings {
    /**
     * A boolean setting.
     */
    static class BooleanSetting extends SettingsDescription {
    static class BooleanSetting extends SettingsDescription<Boolean> {
        BooleanSetting(boolean defaultValue) {
            super(defaultValue);
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Boolean fromString(String value) throws InvalidSettingValueException {
            if (Boolean.TRUE.toString().equals(value)) {
                return true;
            } else if (Boolean.FALSE.toString().equals(value)) {
@@ -416,13 +416,13 @@ public class Settings {
    /**
     * A color setting.
     */
    static class ColorSetting extends SettingsDescription {
    static class ColorSetting extends SettingsDescription<Integer> {
        ColorSetting(int defaultValue) {
            super(defaultValue);
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                return Integer.parseInt(value);
            } catch (NumberFormatException e) {
@@ -431,13 +431,13 @@ public class Settings {
        }

        @Override
        public String toPrettyString(Object value) {
            int color = ((Integer) value) & 0x00FFFFFF;
        public String toPrettyString(Integer value) {
            int color = value & 0x00FFFFFF;
            return String.format("#%06x", color);
        }

        @Override
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
        public Integer fromPrettyString(String value) throws InvalidSettingValueException {
            try {
                if (value.length() == 7) {
                    return Integer.parseInt(value.substring(1), 16) | 0xFF000000;
@@ -455,16 +455,16 @@ public class Settings {
     * {@link Enum#toString()} is used to obtain the "pretty" string representation.
     * </p>
     */
    static class EnumSetting<T extends Enum<T>> extends SettingsDescription {
    static class EnumSetting<T extends Enum<T>> extends SettingsDescription<T> {
        private Class<T> mEnumClass;

        EnumSetting(Class<T> enumClass, Object defaultValue) {
        EnumSetting(Class<T> enumClass, T defaultValue) {
            super(defaultValue);
            mEnumClass = enumClass;
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public T fromString(String value) throws InvalidSettingValueException {
            try {
                return Enum.valueOf(mEnumClass, value);
            } catch (Exception e) {
@@ -479,20 +479,20 @@ public class Settings {
     * @param <A>
     *         The type of the internal representation (e.g. {@code Integer}).
     */
    abstract static class PseudoEnumSetting<A> extends SettingsDescription {
        PseudoEnumSetting(Object defaultValue) {
    abstract static class PseudoEnumSetting<A> extends SettingsDescription<A> {
        PseudoEnumSetting(A defaultValue) {
            super(defaultValue);
        }

        protected abstract Map<A, String> getMapping();

        @Override
        public String toPrettyString(Object value) {
        public String toPrettyString(A value) {
            return getMapping().get(value);
        }

        @Override
        public Object fromPrettyString(String value) throws InvalidSettingValueException {
        public A fromPrettyString(String value) throws InvalidSettingValueException {
            for (Entry<A, String> entry : getMapping().entrySet()) {
                if (entry.getValue().equals(value)) {
                    return entry.getKey();
@@ -529,7 +529,7 @@ public class Settings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                Integer fontSize = Integer.parseInt(value);
                if (mMapping.containsKey(fontSize)) {
@@ -565,7 +565,7 @@ public class Settings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                Integer fontSize = Integer.parseInt(value);
                if (mMapping.containsKey(fontSize)) {
@@ -580,7 +580,7 @@ public class Settings {
    /**
     * An integer settings whose values a limited to a certain range.
     */
    static class IntegerRangeSetting extends SettingsDescription {
    static class IntegerRangeSetting extends SettingsDescription<Integer> {
        private int mStart;
        private int mEnd;

@@ -591,7 +591,7 @@ public class Settings {
        }

        @Override
        public Object fromString(String value) throws InvalidSettingValueException {
        public Integer fromString(String value) throws InvalidSettingValueException {
            try {
                int intValue = Integer.parseInt(value);
                if (mStart <= intValue && intValue <= mEnd) {