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

am: bcccb1aff5

Change-Id: I632ac1a8b9e4e6ce9972a02dc16b07972ba7fc4c
This commit is contained in:
Daniel Solomon
2018-04-06 10:40:58 -07:00
committed by android-build-merger
3 changed files with 149 additions and 0 deletions

View File

@@ -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) {}
}
}

View File

@@ -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.

View File

@@ -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.
*