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

Commit 58030441 authored by Chia-I Wu's avatar Chia-I Wu Committed by android-build-merger
Browse files

Merge "Add COLOR_MODE_AUTOMATIC" into pi-dev

am: 06c0c3a9

Change-Id: I39b0120433fd1585ba2be7aa777bbb1686d1a254
parents ac343380 06c0c3a9
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import android.util.MemoryIntArray;
import android.view.textservice.TextServicesManager;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.ColorDisplayController;
import com.android.internal.widget.ILockSettings;
import java.io.IOException;
@@ -3147,7 +3148,9 @@ public final class Settings {
        public static final String DISPLAY_COLOR_MODE = "display_color_mode";
        private static final Validator DISPLAY_COLOR_MODE_VALIDATOR =
                new SettingsValidators.InclusiveIntegerRangeValidator(0, 2);
                new SettingsValidators.InclusiveIntegerRangeValidator(
                        ColorDisplayController.COLOR_MODE_NATURAL,
                        ColorDisplayController.COLOR_MODE_AUTOMATIC);
        /**
         * The amount of time in milliseconds before the device goes to sleep or begins
+57 −12
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ public final class ColorDisplayController {
    public static final int AUTO_MODE_TWILIGHT = 2;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED })
    @IntDef({ COLOR_MODE_NATURAL, COLOR_MODE_BOOSTED, COLOR_MODE_SATURATED, COLOR_MODE_AUTOMATIC })
    public @interface ColorMode {}

    /**
@@ -103,12 +103,12 @@ public final class ColorDisplayController {
     * @see #setColorMode(int)
     */
    public static final int COLOR_MODE_SATURATED = 2;

    /**
     * See com.android.server.display.DisplayTransformManager.
     * Color mode with automatic colors.
     *
     * @see #setColorMode(int)
     */
    private static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
    private static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode";
    public static final int COLOR_MODE_AUTOMATIC = 3;

    private final Context mContext;
    private final int mUserId;
@@ -361,6 +361,41 @@ public final class ColorDisplayController {
            Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId);
    }

    /**
     * Get the current color mode from system properties, or return -1.
     *
     * See com.android.server.display.DisplayTransformManager.
     */
    private @ColorMode int getCurrentColorModeFromSystemProperties() {
        int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0);
        if (displayColorSetting == 0) {
            return "1.0".equals(SystemProperties.get("persist.sys.sf.color_saturation"))
                ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED;
        } else if (displayColorSetting == 1) {
            return COLOR_MODE_SATURATED;
        } else if (displayColorSetting == 2) {
            return COLOR_MODE_AUTOMATIC;
        } else {
            return -1;
        }
    }

    private boolean isColorModeAvailable(@ColorMode int colorMode) {
        // SATURATED is always allowed
        if (colorMode == COLOR_MODE_SATURATED) {
            return true;
        }

        final int[] availableColorModes = mContext.getResources().getIntArray(
                R.array.config_availableColorModes);
        for (int mode : availableColorModes) {
            if (mode == colorMode) {
                return true;
            }
        }
        return false;
    }

    /**
     * Get the current color mode.
     */
@@ -369,17 +404,27 @@ public final class ColorDisplayController {
            return COLOR_MODE_SATURATED;
        }

        final int colorMode = System.getIntForUser(mContext.getContentResolver(),
        int colorMode = System.getIntForUser(mContext.getContentResolver(),
            System.DISPLAY_COLOR_MODE, -1, mUserId);
        if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) {
        if (colorMode == -1) {
            // There still might be a legacy system property controlling color mode that we need to
            // respect.
            if ("1".equals(SystemProperties.get(PERSISTENT_PROPERTY_NATIVE_MODE))) {
                return COLOR_MODE_SATURATED;
            colorMode = getCurrentColorModeFromSystemProperties();
        }

        // This happens when a color mode is no longer available (e.g., after system update or B&R)
        // or the device does not support any color mode.
        if (!isColorModeAvailable(colorMode)) {
            if (colorMode == COLOR_MODE_BOOSTED && isColorModeAvailable(COLOR_MODE_NATURAL)) {
                colorMode = COLOR_MODE_NATURAL;
            } else if (colorMode == COLOR_MODE_SATURATED
                && isColorModeAvailable(COLOR_MODE_AUTOMATIC)) {
                colorMode = COLOR_MODE_AUTOMATIC;
            } else {
                colorMode = COLOR_MODE_SATURATED;
            }
            return "1.0".equals(SystemProperties.get(PERSISTENT_PROPERTY_SATURATION))
                    ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED;
        }

        return colorMode;
    }

@@ -389,7 +434,7 @@ public final class ColorDisplayController {
     * @param colorMode the color mode
     */
    public void setColorMode(@ColorMode int colorMode) {
        if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) {
        if (!isColorModeAvailable(colorMode)) {
            throw new IllegalArgumentException("Invalid colorMode: " + colorMode);
        }
        System.putIntForUser(mContext.getContentResolver(), System.DISPLAY_COLOR_MODE, colorMode,
+10 −0
Original line number Diff line number Diff line
@@ -948,6 +948,16 @@
        <!-- B y-intercept --> <item>-0.198650895</item>
    </string-array>


    <!-- Indicate available ColorDisplayController.COLOR_MODE_xxx. -->
    <integer-array name="config_availableColorModes">
        <!-- Example:
        <item>0</item>
        <item>1</item>
        <item>2</item>
        -->
    </integer-array>

    <!-- Indicate whether to allow the device to suspend when the screen is off
         due to the proximity sensor.  This resource should only be set to true
         if the sensor HAL correctly handles the proximity sensor as a wake-up source.
+1 −0
Original line number Diff line number Diff line
@@ -2964,6 +2964,7 @@
  <java-symbol type="integer" name="config_nightDisplayColorTemperatureMax" />
  <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficients" />
  <java-symbol type="array" name="config_nightDisplayColorTemperatureCoefficientsNative" />
  <java-symbol type="array" name="config_availableColorModes" />

  <!-- Default first user restrictions -->
  <java-symbol type="array" name="config_defaultFirstUserRestrictions" />
+1 −1
Original line number Diff line number Diff line
@@ -293,7 +293,7 @@ public final class ColorDisplayService extends SystemService
            mColorMatrixAnimator.cancel();
        }

        setCoefficientMatrix(getContext(), mode == ColorDisplayController.COLOR_MODE_SATURATED);
        setCoefficientMatrix(getContext(), DisplayTransformManager.isColorModeNative(mode));
        setMatrix(mController.getColorTemperature(), mMatrixNight);

        final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
Loading