Merge "Switch to Saturated color mode when Accessibility transforms are active" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
bcccb1aff5
@@ -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) {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user