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

Commit cd9e1895 authored by Marcelo Arteiro's avatar Marcelo Arteiro
Browse files

Removing passing defaults to ThemeSettings.

The settings API was simplified and now writing requires all fields, to be passed, meaning no sparse input and fallback to defaults.

Reading also will not fallback to defaults and will fail in case of bad formed json settings or else.

Bug: 333694176
Test: atest FrameworksServicesTests_theme
Flag: android.server.enable_theme_service
Change-Id: I0ae920f092e6e052e811db9f65915dc719245bb9
parent 3f021540
Loading
Loading
Loading
Loading
+12 −19
Original line number Original line Diff line number Diff line
@@ -16,31 +16,23 @@


package android.content.theming;
package android.content.theming;


import android.annotation.ColorInt;
import android.annotation.FlaggedApi;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.graphics.Color;
import android.graphics.Color;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


import java.util.function.BiConsumer;
import java.util.Objects;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.regex.Pattern;


/** @hide */
/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public class FieldColor extends ThemeSettingsField<Integer, String> {
public final class FieldColor extends ThemeSettingsField<Color, String> {
    private static final Pattern COLOR_PATTERN = Pattern.compile("[0-9a-fA-F]{6,8}");
    private static final Pattern COLOR_PATTERN = Pattern.compile("[0-9a-fA-F]{6,8}");


    public FieldColor(String key, Function<ThemeSettingsUpdater, Integer> updaterGetter,
            BiConsumer<ThemeSettingsUpdater, Integer> updaterSetter,
            Function<ThemeSettings, Integer> getter, ThemeSettings defaults) {
        super(key, updaterGetter, updaterSetter, getter, defaults);
    }

    @Override
    @Override
    @ColorInt
    @Nullable
    @Nullable
    public Integer parse(String primitive) {
    public Color parse(String primitive) {
        if (primitive == null) {
        if (primitive == null) {
            return null;
            return null;
        }
        }
@@ -49,25 +41,26 @@ public class FieldColor extends ThemeSettingsField<Integer, String> {
        }
        }


        try {
        try {
            return Color.valueOf(Color.parseColor("#" + primitive)).toArgb();
            return Color.valueOf(Color.parseColor("#" + primitive));
        } catch (IllegalArgumentException e) {
        } catch (IllegalArgumentException e) {
            return null;
            return null;
        }
        }
    }
    }


    @Override
    @Override
    public String serialize(@ColorInt Integer value) {
    public String serialize(Color value) {
        return Integer.toHexString(value);
        return Integer.toHexString(value.toArgb()).toUpperCase();
    }
    }


    @Override
    @Override
    public boolean validate(Integer value) {
    public boolean validate(@NonNull Color value) {
        return !value.equals(Color.TRANSPARENT);
        Objects.requireNonNull(value);
        return value.toArgb() != Color.TRANSPARENT;
    }
    }


    @Override
    @Override
    public Class<Integer> getFieldType() {
    public Class<Color> getFieldType() {
        return Integer.class;
        return Color.class;
    }
    }


    @Override
    @Override
+1 −9
Original line number Original line Diff line number Diff line
@@ -21,18 +21,10 @@ import android.annotation.FlaggedApi;
import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


import java.util.Objects;
import java.util.Objects;
import java.util.function.BiConsumer;
import java.util.function.Function;


/** @hide */
/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public class FieldColorBoth extends ThemeSettingsField<Boolean, String> {
public final class FieldColorBoth extends ThemeSettingsField<Boolean, String> {
    public FieldColorBoth(String key, Function<ThemeSettingsUpdater, Boolean> updaterGetter,
            BiConsumer<ThemeSettingsUpdater, Boolean> updaterSetter,
            Function<ThemeSettings, Boolean> getter, ThemeSettings defaults) {
        super(key, updaterGetter, updaterSetter, getter, defaults);
    }

    @Override
    @Override
    @Nullable
    @Nullable
    public Boolean parse(String primitive) {
    public Boolean parse(String primitive) {
+6 −9
Original line number Original line Diff line number Diff line
@@ -18,20 +18,16 @@ package android.content.theming;


import android.annotation.FlaggedApi;
import android.annotation.FlaggedApi;


import java.util.function.BiConsumer;
import java.util.Objects;
import java.util.function.Function;


/** @hide */
/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public class FieldColorIndex extends ThemeSettingsField<Integer, String> {
public final class FieldColorIndex extends ThemeSettingsField<Integer, String> {
    public FieldColorIndex(String key, Function<ThemeSettingsUpdater, Integer> updaterGetter,
            BiConsumer<ThemeSettingsUpdater, Integer> updaterSetter,
            Function<ThemeSettings, Integer> getter, ThemeSettings defaults) {
        super(key, updaterGetter, updaterSetter, getter, defaults);
    }

    @Override
    @Override
    public Integer parse(String primitive) {
    public Integer parse(String primitive) {
        if (primitive == null) {
            return null;
        }
        try {
        try {
            return Integer.parseInt(primitive);
            return Integer.parseInt(primitive);
        } catch (NumberFormatException e) {
        } catch (NumberFormatException e) {
@@ -46,6 +42,7 @@ public class FieldColorIndex extends ThemeSettingsField<Integer, String> {


    @Override
    @Override
    public boolean validate(Integer value) {
    public boolean validate(Integer value) {
        Objects.requireNonNull(value);
        return value >= -1;
        return value >= -1;
    }
    }


+5 −16
Original line number Original line Diff line number Diff line
@@ -29,25 +29,13 @@ import androidx.annotation.Nullable;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.Target;
import java.util.function.BiConsumer;
import java.util.Objects;
import java.util.function.Function;


/** @hide */
/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public class FieldColorSource extends ThemeSettingsField<String, String> {
public final class FieldColorSource extends ThemeSettingsField<String, String> {
    public static final String VALUE_PRESET = "preset";
    public static final String VALUE_PRESET = "preset";
    public static final String VALUE_HOME_WALLPAPER = "home_wallpaper";
    public static final String VALUE_HOME_WALLPAPER = "home_wallpaper";
    public static final String VALUE_LOCK_WALLPAPER = "lock_wallpaper";

    public FieldColorSource(
            String key,
            Function<ThemeSettingsUpdater, String> updaterGetter,
            BiConsumer<ThemeSettingsUpdater, String> updaterSetter,
            Function<ThemeSettings, String> getter,
            ThemeSettings defaults
    ) {
        super(key, updaterGetter, updaterSetter, getter, defaults);
    }


    @Override
    @Override
    @Nullable
    @Nullable
@@ -63,8 +51,9 @@ public class FieldColorSource extends ThemeSettingsField<String, String> {


    @Override
    @Override
    public boolean validate(String value) {
    public boolean validate(String value) {
        Objects.requireNonNull(value);
        return switch (value) {
        return switch (value) {
            case VALUE_PRESET, VALUE_HOME_WALLPAPER, VALUE_LOCK_WALLPAPER -> true;
            case VALUE_PRESET, VALUE_HOME_WALLPAPER -> true;
            default -> false;
            default -> false;
        };
        };
    }
    }
@@ -80,7 +69,7 @@ public class FieldColorSource extends ThemeSettingsField<String, String> {
    }
    }




    @StringDef({VALUE_PRESET, VALUE_HOME_WALLPAPER, VALUE_LOCK_WALLPAPER})
    @StringDef({VALUE_PRESET, VALUE_HOME_WALLPAPER})
    @Target({PARAMETER, METHOD, LOCAL_VARIABLE, FIELD})
    @Target({PARAMETER, METHOD, LOCAL_VARIABLE, FIELD})
    @Retention(SOURCE)
    @Retention(SOURCE)
    @interface Type {
    @interface Type {
+3 −9
Original line number Original line Diff line number Diff line
@@ -21,18 +21,11 @@ import android.annotation.Nullable;


import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.Objects;
import java.util.function.Function;


/** @hide */
/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public class FieldThemeStyle extends ThemeSettingsField<Integer, String> {
public final class FieldThemeStyle extends ThemeSettingsField<Integer, String> {
    public FieldThemeStyle(String key, Function<ThemeSettingsUpdater, Integer> updaterGetter,
            BiConsumer<ThemeSettingsUpdater, Integer> updaterSetter,
            Function<ThemeSettings, Integer> getter, ThemeSettings defaults) {
        super(key, updaterGetter, updaterSetter, getter, defaults);
    }

    private static final @ThemeStyle.Type List<Integer> sValidStyles = Arrays.asList(
    private static final @ThemeStyle.Type List<Integer> sValidStyles = Arrays.asList(
            ThemeStyle.EXPRESSIVE, ThemeStyle.SPRITZ, ThemeStyle.TONAL_SPOT, ThemeStyle.FRUIT_SALAD,
            ThemeStyle.EXPRESSIVE, ThemeStyle.SPRITZ, ThemeStyle.TONAL_SPOT, ThemeStyle.FRUIT_SALAD,
            ThemeStyle.RAINBOW, ThemeStyle.VIBRANT, ThemeStyle.MONOCHROMATIC);
            ThemeStyle.RAINBOW, ThemeStyle.VIBRANT, ThemeStyle.MONOCHROMATIC);
@@ -44,6 +37,7 @@ public class FieldThemeStyle extends ThemeSettingsField<Integer, String> {


    @Override
    @Override
    public boolean validate(Integer value) {
    public boolean validate(Integer value) {
        Objects.requireNonNull(value);
        return sValidStyles.contains(value);
        return sValidStyles.contains(value);
    }
    }


Loading