summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Settings.java9
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java7
-rw-r--r--services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java15
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;