diff options
3 files changed, 31 insertions, 0 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 521aa3c0c69f..381ca4c3a36e 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4912,6 +4912,15 @@ public final class Settings { "accessibility_display_daltonizer"; /** + * Float list that specifies the color matrix to apply to + * the display. Valid values are defined in AccessibilityManager. + * + * @hide + */ + public static final String ACCESSIBILITY_DISPLAY_COLOR_MATRIX = + "accessibility_display_color_matrix"; + + /** * Setting that specifies whether automatic click when the mouse pointer stops moving is * enabled. * diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 11fdbb5886e1..8cf25b3bbd99 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -3987,6 +3987,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private final Uri mDisplayDaltonizerUri = Settings.Secure.getUriFor( Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER); + private final Uri mDisplayColorMatrixUri = Settings.Secure.getUriFor( + Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX); + private final Uri mHighTextContrastUri = Settings.Secure.getUriFor( Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED); @@ -4017,6 +4020,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { contentResolver.registerContentObserver( mDisplayDaltonizerUri, false, this, UserHandle.USER_ALL); contentResolver.registerContentObserver( + mDisplayColorMatrixUri, false, this, UserHandle.USER_ALL); + contentResolver.registerContentObserver( mHighTextContrastUri, false, this, UserHandle.USER_ALL); } @@ -4066,6 +4071,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { if (readDisplayColorAdjustmentSettingsLocked(userState)) { updateDisplayColorAdjustmentSettingsLocked(userState); } + } else if (mDisplayColorMatrixUri.equals(uri)) { + updateDisplayColorAdjustmentSettingsLocked(userState); } else if (mHighTextContrastUri.equals(uri)) { if (readHighTextContrastEnabledSettingLocked(userState)) { onUserStateChangedLocked(userState); diff --git a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java index d0b5898076fc..1a7de25988f2 100644 --- a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java +++ b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java @@ -107,9 +107,24 @@ class DisplayAdjustmentUtils { setDaltonizerMode(AccessibilityManager.DALTONIZER_DISABLED); } + String matrix = Settings.Secure.getStringForUser(cr, + Settings.Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX, userId); + if (matrix != null) { + colorMatrix = multiply(colorMatrix, getMatrix(matrix)); + } + setColorTransform(colorMatrix); } + private static float[] getMatrix(String matrix) { + String[] strValues = matrix.split(","); + float[] values = new float[strValues.length]; + for (int i = 0; i < values.length; i++) { + values[i] = Float.parseFloat(strValues[i]); + } + return values; + } + private static float[] multiply(float[] matrix, float[] other) { if (matrix == null) { return other; |