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

Commit e0834064 authored by Alan Viverette's avatar Alan Viverette
Browse files

Simplify accessibility display adjustments

Makes the inversion bit public so apps can be smarter about rendering
images non-inverted (if they are so inclined).

BUG: 14680114
Change-Id: I8ca2b2517af2ffc13446d7e0b4e859c1171e2d0e
parent cfd9d7ee
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -23498,6 +23498,7 @@ package android.provider {
    method public static boolean putLong(android.content.ContentResolver, java.lang.String, long);
    method public static boolean putString(android.content.ContentResolver, java.lang.String, java.lang.String);
    method public static final deprecated void setLocationProviderEnabled(android.content.ContentResolver, java.lang.String, boolean);
    field public static final java.lang.String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED = "accessibility_display_inversion_enabled";
    field public static final java.lang.String ACCESSIBILITY_ENABLED = "accessibility_enabled";
    field public static final java.lang.String ACCESSIBILITY_SPEAK_PASSWORD = "speak_password";
    field public static final deprecated java.lang.String ADB_ENABLED = "adb_enabled";
+0 −49
Original line number Diff line number Diff line
@@ -3838,21 +3838,10 @@ public final class Settings {

        /**
         * Setting that specifies whether display color inversion is enabled.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED =
                "accessibility_display_inversion_enabled";

        /**
         * Integer property that specifies the type of color inversion to
         * perform. Valid values are defined in AccessibilityManager.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_INVERSION =
                "accessibility_display_inversion";

        /**
         * Setting that specifies whether the quick setting tile for display
         * color space adjustment is enabled.
@@ -3880,44 +3869,6 @@ public final class Settings {
        public static final String ACCESSIBILITY_DISPLAY_DALTONIZER =
                "accessibility_display_daltonizer";

        /**
         * Setting that specifies whether the quick setting tile for display
         * contrast enhancement is enabled.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED =
                "accessibility_display_contrast_quick_setting_enabled";

        /**
         * Setting that specifies whether display contrast enhancement is
         * enabled.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED =
                "accessibility_display_contrast_enabled";

        /**
         * Floating point property that specifies display contrast adjustment.
         * Valid range is [0, ...] where 0 is gray, 1 is normal, and higher
         * values indicate enhanced contrast.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_CONTRAST =
                "accessibility_display_contrast";

        /**
         * Floating point property that specifies display brightness adjustment.
         * Valid range is [-1, 1] where -1 is black, 0 is default, and 1 is
         * white.
         *
         * @hide
         */
        public static final String ACCESSIBILITY_DISPLAY_BRIGHTNESS =
                "accessibility_display_brightness";

        /**
         * The timout for considering a press to be a long press in milliseconds.
         * @hide
+1 −22
Original line number Diff line number Diff line
@@ -3698,17 +3698,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
        private final Uri mEnhancedWebAccessibilityUri = Settings.Secure
                .getUriFor(Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION);

        private final Uri mDisplayContrastEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED);
        private final Uri mDisplayContrastUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST);
        private final Uri mDisplayBrightnessUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS);

        private final Uri mDisplayInversionEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
        private final Uri mDisplayInversionUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION);

        private final Uri mDisplayDaltonizerEnabledUri = Settings.Secure.getUriFor(
                Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
@@ -3733,16 +3724,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                    false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(mEnhancedWebAccessibilityUri,
                    false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayContrastEnabledUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayContrastUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayBrightnessUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayInversionEnabledUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayInversionUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
                    mDisplayDaltonizerEnabledUri, false, this, UserHandle.USER_ALL);
            contentResolver.registerContentObserver(
@@ -3823,12 +3806,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub {
                        }
                    }
                }
            } else if (mDisplayContrastEnabledUri.equals(uri)
                    || mDisplayInversionEnabledUri.equals(uri)
            } else if (mDisplayInversionEnabledUri.equals(uri)
                    || mDisplayDaltonizerEnabledUri.equals(uri)
                    || mDisplayContrastUri.equals(uri)
                    || mDisplayBrightnessUri.equals(uri)
                    || mDisplayInversionUri.equals(uri)
                    || mDisplayDaltonizerUri.equals(uri)) {
                synchronized (mLock) {
                    // Profiles share the accessibility state of the parent. Therefore,
+1 −70
Original line number Diff line number Diff line
@@ -41,22 +41,6 @@ class DisplayAdjustmentUtils {
             0,      0,      0, 1
    };

    /** Matrix and offset used for standard display inversion. */
    private static final float[] INVERSION_MATRIX_STANDARD = new float[] {
        -1,  0,  0, 0,
         0, -1,  0, 0,
         0,  0, -1, 0,
         1,  1,  1, 1
    };

    /** Matrix and offset used for hue-only display inversion. */
    private static final float[] INVERSION_MATRIX_HUE_ONLY = new float[] {
          0, .5f, .5f, 0,
        .5f,   0, .5f, 0,
        .5f, .5f,   0, 0,
          0,   0,   0, 1
    };

    /** Matrix and offset used for value-only display inversion. */
    private static final float[] INVERSION_MATRIX_VALUE_ONLY = new float[] {
           0, -.5f, -.5f, 0,
@@ -65,15 +49,6 @@ class DisplayAdjustmentUtils {
           1,    1,    1, 1
    };

    /** Default contrast for display contrast enhancement. */
    private static final float DEFAULT_DISPLAY_CONTRAST = 2;

    /** Default brightness for display contrast enhancement. */
    private static final float DEFAULT_DISPLAY_BRIGHTNESS = 0;

    /** Default inversion mode for display color inversion. */
    private static final int DEFAULT_DISPLAY_INVERSION = AccessibilityManager.INVERSION_STANDARD;

    /** Default inversion mode for display color correction. */
    private static final int DEFAULT_DISPLAY_DALTONIZER =
            AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY;
@@ -88,11 +63,6 @@ class DisplayAdjustmentUtils {
        boolean hasColorTransform = Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, userId) == 1;

        if (!hasColorTransform) {
            hasColorTransform |= Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, userId) == 1;
        }

        if (!hasColorTransform) {
            hasColorTransform |= Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, userId) == 1;
@@ -115,21 +85,7 @@ class DisplayAdjustmentUtils {
        final boolean inversionEnabled = Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, userId) == 1;
        if (inversionEnabled) {
            final int inversionMode = Settings.Secure.getIntForUser(cr,
                    Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION, DEFAULT_DISPLAY_INVERSION,
                    userId);
            final float[] inversionMatrix;
            switch (inversionMode) {
                case AccessibilityManager.INVERSION_HUE_ONLY:
                    inversionMatrix = INVERSION_MATRIX_HUE_ONLY;
                    break;
                case AccessibilityManager.INVERSION_VALUE_ONLY:
                    inversionMatrix = INVERSION_MATRIX_VALUE_ONLY;
                    break;
                default:
                    inversionMatrix = INVERSION_MATRIX_STANDARD;
            }

            final float[] inversionMatrix = INVERSION_MATRIX_VALUE_ONLY;
            Matrix.multiplyMM(outputMatrix, 0, colorMatrix, 0, inversionMatrix, 0);

            colorMatrix = outputMatrix;
@@ -138,31 +94,6 @@ class DisplayAdjustmentUtils {
            hasColorTransform = true;
        }

        final boolean contrastEnabled = Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, userId) == 1;
        if (contrastEnabled) {
            final float contrast = Settings.Secure.getFloatForUser(cr,
                    Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST, DEFAULT_DISPLAY_CONTRAST,
                    userId);
            final float brightness = Settings.Secure.getFloatForUser(cr,
                    Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY_BRIGHTNESS,
                    userId);
            final float off = brightness * contrast - 0.5f * contrast + 0.5f;
            final float[] contrastMatrix = {
                    contrast, 0, 0, 0,
                    0, contrast, 0, 0,
                    0, 0, contrast, 0,
                    off, off, off, 1
            };

            Matrix.multiplyMM(outputMatrix, 0, colorMatrix, 0, contrastMatrix, 0);

            colorMatrix = outputMatrix;
            outputMatrix = colorMatrix;

            hasColorTransform = true;
        }

        final boolean daltonizerEnabled = Settings.Secure.getIntForUser(
                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, userId) != 0;
        if (daltonizerEnabled) {