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

Commit e039c250 authored by LuK1337's avatar LuK1337
Browse files

Settings: Allow devices to provide their own color mode strings

This allows devices to not only use vendor color
modes starting at 0xFF but also provide regular
color modes under different names.

Change-Id: I19aa0ab0ece01ce3600a961e0d8b8db14f17e035
parent e333d56d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -45,4 +45,8 @@
        <item>@string/security_settings_fingerprint_sensor_location_left</item>
        <item>@string/security_settings_fingerprint_sensor_location_right</item>
    </string-array>

    <!-- Override supported color mode labels.
         NOTE: This list must have the exact same items count as config_availableColorModes -->
    <string-array name="available_vendor_color_modes" translatable="false" />
</resources>
+13 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

import com.google.common.primitives.Ints;

public class ColorModePreferenceController extends BasePreferenceController {

    private ColorDisplayManager mColorDisplayManager;
@@ -43,6 +45,17 @@ public class ColorModePreferenceController extends BasePreferenceController {
    @Override
    public CharSequence getSummary() {
        final int colorMode = getColorDisplayManager().getColorMode();
        final int[] availableColorModes = mContext.getResources().getIntArray(
                com.android.internal.R.array.config_availableColorModes);
        final String[] availableVendorColorModes = mContext.getResources().getStringArray(
                R.array.available_vendor_color_modes);
        if (availableVendorColorModes.length == availableColorModes.length) {
            int index = Ints.indexOf(availableColorModes, colorMode);
            if (index != -1) {
                return availableVendorColorModes[index];
            }
            return mContext.getText(R.string.summary_empty);
        }
        if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
            return mContext.getText(R.string.color_mode_option_automatic);
        }
+24 −2
Original line number Diff line number Diff line
@@ -50,6 +50,8 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment {
    @VisibleForTesting
    static final String KEY_COLOR_MODE_AUTOMATIC = "color_mode_automatic";

    static final String KEY_COLOR_MODE_VENDOR = "color_mode_vendor_";

    private ContentObserver mContentObserver;
    private ColorDisplayManager mColorDisplayManager;

@@ -111,9 +113,17 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment {
        final Context c = getContext();
        final int[] availableColorModes = c.getResources().getIntArray(
                com.android.internal.R.array.config_availableColorModes);
        final String[] availableVendorColorModes = c.getResources().getStringArray(
                R.array.available_vendor_color_modes);

        List<ColorModeCandidateInfo> candidates = new ArrayList<>();
        if (availableColorModes != null) {
        if (availableVendorColorModes.length == availableColorModes.length) {
            for (int i = 0; i < availableVendorColorModes.length; i++) {
                candidates.add(new ColorModeCandidateInfo(
                            availableVendorColorModes[i],
                            KEY_COLOR_MODE_VENDOR + availableColorModes[i], true /* enabled */));
            }
        } else if (availableColorModes != null) {
            for (int colorMode : availableColorModes) {
                if (colorMode == ColorDisplayManager.COLOR_MODE_NATURAL) {
                    candidates.add(new ColorModeCandidateInfo(
@@ -139,8 +149,15 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment {

    @Override
    protected String getDefaultKey() {
        final Context c = getContext();
        final int colorMode = mColorDisplayManager.getColorMode();
        if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
        final int[] availableColorModes = c.getResources().getIntArray(
                com.android.internal.R.array.config_availableColorModes);
        final String[] availableVendorColorModes = c.getResources().getStringArray(
                R.array.available_vendor_color_modes);
        if (availableVendorColorModes.length == availableColorModes.length) {
            return KEY_COLOR_MODE_VENDOR + colorMode;
        } else if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
            return KEY_COLOR_MODE_AUTOMATIC;
        } else if (colorMode == ColorDisplayManager.COLOR_MODE_SATURATED) {
            return KEY_COLOR_MODE_SATURATED;
@@ -152,6 +169,11 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment {

    @Override
    protected boolean setDefaultKey(String key) {
        if (key.startsWith(KEY_COLOR_MODE_VENDOR)) {
            mColorDisplayManager.setColorMode(
                    Integer.parseInt(key.substring(KEY_COLOR_MODE_VENDOR.length())));
            return true;
        }
        switch (key) {
            case KEY_COLOR_MODE_NATURAL:
                mColorDisplayManager.setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);