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

Commit 7c7ebb8a authored by Daniel Solomon's avatar Daniel Solomon Committed by android-build-merger
Browse files

Merge "Switch to Saturated color mode when Accessibility transforms are...

Merge "Switch to Saturated color mode when Accessibility transforms are active" into pi-dev am: bcccb1af
am: d8409474

Change-Id: I6ea692433c265e3db1eb71c7c2294e44b4b3690a
parents 85f27d43 d8409474
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -365,6 +365,10 @@ public final class ColorDisplayController {
     * Get the current color mode.
     */
    public int getColorMode() {
        if (getAccessibilityTransformActivated()) {
            return COLOR_MODE_SATURATED;
        }

        final int colorMode = System.getIntForUser(mContext.getContentResolver(),
            System.DISPLAY_COLOR_MODE, -1, mUserId);
        if (colorMode < COLOR_MODE_NATURAL || colorMode > COLOR_MODE_SATURATED) {
@@ -416,6 +420,18 @@ public final class ColorDisplayController {
                R.integer.config_nightDisplayColorTemperatureDefault);
    }

    /**
     * Returns true if any Accessibility color transforms are enabled.
     */
    public boolean getAccessibilityTransformActivated() {
        final ContentResolver cr = mContext.getContentResolver();
        return
            Secure.getIntForUser(cr, Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
                    0, mUserId) == 1
            || Secure.getIntForUser(cr, Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
                    0, mUserId) == 1;
    }

    private void onSettingChanged(@NonNull String setting) {
        if (DEBUG) {
            Slog.d(TAG, "onSettingChanged: " + setting);
@@ -441,6 +457,10 @@ public final class ColorDisplayController {
                case System.DISPLAY_COLOR_MODE:
                    mCallback.onDisplayColorModeChanged(getColorMode());
                    break;
                case Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED:
                case Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED:
                    mCallback.onAccessibilityTransformChanged(getAccessibilityTransformActivated());
                    break;
            }
        }
    }
@@ -471,6 +491,12 @@ public final class ColorDisplayController {
                        false /* notifyForDescendants */, mContentObserver, mUserId);
                cr.registerContentObserver(System.getUriFor(System.DISPLAY_COLOR_MODE),
                        false /* notifyForDecendants */, mContentObserver, mUserId);
                cr.registerContentObserver(
                        Secure.getUriFor(Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED),
                        false /* notifyForDecendants */, mContentObserver, mUserId);
                cr.registerContentObserver(
                        Secure.getUriFor(Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED),
                        false /* notifyForDecendants */, mContentObserver, mUserId);
            }
        }
    }
@@ -531,5 +557,12 @@ public final class ColorDisplayController {
         * @param displayColorMode the color mode
         */
        default void onDisplayColorModeChanged(int displayColorMode) {}

        /**
         * Callback invoked when Accessibility color transforms change.
         *
         * @param state the state Accessibility color transforms (true of active)
         */
        default void onAccessibilityTransformChanged(boolean state) {}
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -300,6 +300,11 @@ public final class ColorDisplayService extends SystemService
        dtm.setColorMode(mode, mIsActivated ? mMatrixNight : MATRIX_IDENTITY);
    }

    @Override
    public void onAccessibilityTransformChanged(boolean state) {
        onDisplayColorModeChanged(mController.getColorMode());
    }

    /**
     * Set coefficients based on native mode. Use DisplayTransformManager#isNativeModeEnabled while
     * setting is stable; when setting is changing, pass native mode selection directly.
+111 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.Handler;
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Secure;
import android.provider.Settings.System;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.mock.MockContentResolver;
@@ -895,6 +896,52 @@ public class ColorDisplayServiceTest {
        assertActivated(true /* activated */);
    }

    @Test
    public void accessibility_colorInversion_transformActivated() {
        setAccessibilityColorInversion(true);
        setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);

        startService();
        assertAccessibilityTransformActivated(true /* activated */ );
        assertUserColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
        assertActiveColorMode(ColorDisplayController.COLOR_MODE_SATURATED);
    }

    @Test
    public void accessibility_colorCorrection_transformActivated() {
        setAccessibilityColorCorrection(true);
        setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);

        startService();
        assertAccessibilityTransformActivated(true /* activated */ );
        assertUserColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
        assertActiveColorMode(ColorDisplayController.COLOR_MODE_SATURATED);
    }

    @Test
    public void accessibility_all_transformActivated() {
        setAccessibilityColorCorrection(true);
        setAccessibilityColorInversion(true);
        setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);

        startService();
        assertAccessibilityTransformActivated(true /* activated */ );
        assertUserColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
        assertActiveColorMode(ColorDisplayController.COLOR_MODE_SATURATED);
    }

    @Test
    public void accessibility_none_transformActivated() {
        setAccessibilityColorCorrection(false);
        setAccessibilityColorInversion(false);
        setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);

        startService();
        assertAccessibilityTransformActivated(false /* activated */ );
        assertUserColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
        assertActiveColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
    }

    /**
     * Configures Night display to use a custom schedule.
     *
@@ -934,6 +981,35 @@ public class ColorDisplayServiceTest {
                mUserId);
    }

    /**
     * Configures the Accessibility color correction setting state.
     *
     * @param state {@code true} if color inversion should be activated
     */
    private void setAccessibilityColorCorrection(boolean state) {
        Secure.putIntForUser(mContext.getContentResolver(),
                Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, state ? 1 : 0, mUserId);
    }

    /**
     * Configures the Accessibility color inversion setting state.
     *
     * @param state {@code true} if color inversion should be activated
     */
    private void setAccessibilityColorInversion(boolean state) {
        Secure.putIntForUser(mContext.getContentResolver(),
                Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, state ? 1 : 0, mUserId);
    }

    /**
     * Configures color mode via ColorDisplayController.
     *
     * @param mode the color mode to set
     */
    private void setColorMode(int mode) {
        mColorDisplayController.setColorMode(mode);
    }

    /**
     * Convenience method to start {@link #mColorDisplayService}.
     */
@@ -961,6 +1037,41 @@ public class ColorDisplayServiceTest {
                .isEqualTo(activated);
    }

    /**
     * Convenience method for asserting that Accessibility color transform is detected.
     *
     * @param state {@code true} if any Accessibility transform should be activated
     */
    private void assertAccessibilityTransformActivated(boolean state) {
        assertWithMessage("Unexpected Accessibility color transform state")
                .that(mColorDisplayController.getAccessibilityTransformActivated())
                .isEqualTo(state);
    }

    /**
     * Convenience method for asserting that the active color mode matches expectation.
     *
     * @param mode the expected active color mode.
     */
    private void assertActiveColorMode(int mode) {
        assertWithMessage("Unexpected color mode setting")
                .that(mColorDisplayController.getColorMode())
                .isEqualTo(mode);
    }

    /**
     * Convenience method for asserting that the user chosen color mode matches expectation.
     *
     * @param mode the expected color mode setting.
     */
    private void assertUserColorMode(int mode) {
        final int actualMode = System.getIntForUser(mContext.getContentResolver(),
                System.DISPLAY_COLOR_MODE, -1, mUserId);
        assertWithMessage("Unexpected color mode setting")
                .that(actualMode)
                .isEqualTo(mode);
    }

    /**
     * Convenience for making a {@link LocalTime} instance with an offset relative to now.
     *