From 08e7fa9b6918f442669970aa0dc048625424c07b Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Mon, 7 Dec 2015 20:05:08 -0500 Subject: [PATCH] Allow color matrix to be controlled by secure setting Change-Id: Ia5518ad79fae502e814034edd7ae8d7a57b3eaeb --- core/java/android/provider/Settings.java | 9 +++++++++ .../AccessibilityManagerService.java | 7 +++++++ .../accessibility/DisplayAdjustmentUtils.java | 15 +++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index dad3c67967b81..7c24e9c64453c 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -4911,6 +4911,15 @@ public final class Settings { public static final String ACCESSIBILITY_DISPLAY_DALTONIZER = "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 11fdbb5886e16..8cf25b3bbd991 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); @@ -4016,6 +4019,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { mDisplayDaltonizerEnabledUri, false, this, UserHandle.USER_ALL); 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 d0b5898076fcd..1a7de25988f2b 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;