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

Commit bcccb1af authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 893c5e0c 317a3574
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.
     *