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 Diff line number Diff line
@@ -16,31 +16,23 @@

package android.content.theming;

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

import androidx.annotation.Nullable;

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

/** @hide */
@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}");

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

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

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

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

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

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

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

/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public 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);
    }

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

import android.annotation.FlaggedApi;

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

/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public 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);
    }

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

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

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

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

/** @hide */
@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_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
    @Nullable
@@ -63,8 +51,9 @@ public class FieldColorSource extends ThemeSettingsField<String, String> {

    @Override
    public boolean validate(String value) {
        Objects.requireNonNull(value);
        return switch (value) {
            case VALUE_PRESET, VALUE_HOME_WALLPAPER, VALUE_LOCK_WALLPAPER -> true;
            case VALUE_PRESET, VALUE_HOME_WALLPAPER -> true;
            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})
    @Retention(SOURCE)
    @interface Type {
+3 −9
Original line number Diff line number Diff line
@@ -21,18 +21,11 @@ import android.annotation.Nullable;

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

/** @hide */
@FlaggedApi(android.server.Flags.FLAG_ENABLE_THEME_SERVICE)
public 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);
    }

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

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

Loading