Loading services/core/java/com/android/server/display/color/ColorDisplayService.java +9 −8 Original line number Diff line number Diff line Loading @@ -162,7 +162,8 @@ public final class ColorDisplayService extends SystemService { private final ReduceBrightColorsTintController mReduceBrightColorsTintController = new ReduceBrightColorsTintController(); private final Handler mHandler; @VisibleForTesting final Handler mHandler; private final AppSaturationController mAppSaturationController = new AppSaturationController(); Loading Loading @@ -404,13 +405,13 @@ public final class ColorDisplayService extends SystemService { // existing activated state. This ensures consistency of tint across the color mode change. onDisplayColorModeChanged(getColorModeInternal()); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); if (mNightDisplayTintController.isAvailable(getContext())) { // Reset the activated state. mNightDisplayTintController.setActivated(null); // Prepare the night display color transformation matrix. mNightDisplayTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix()); mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix()); mNightDisplayTintController .setMatrix(mNightDisplayTintController.getColorTemperatureSetting()); Loading @@ -432,8 +433,7 @@ public final class ColorDisplayService extends SystemService { } if (mReduceBrightColorsTintController.isAvailable(getContext())) { mReduceBrightColorsTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix()); mReduceBrightColorsTintController.setUp(getContext(), dtm.needsLinearColorMatrix()); onReduceBrightColorsStrengthLevelChanged(); final boolean reset = resetReduceBrightColors(); if (!reset) { Loading Loading @@ -540,8 +540,8 @@ public final class ColorDisplayService extends SystemService { mDisplayWhiteBalanceTintController.cancelAnimator(); if (mNightDisplayTintController.isAvailable(getContext())) { mNightDisplayTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode)); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix(mode)); mNightDisplayTintController .setMatrix(mNightDisplayTintController.getColorTemperatureSetting()); } Loading Loading @@ -731,10 +731,11 @@ public final class ColorDisplayService extends SystemService { @VisibleForTesting void updateDisplayWhiteBalanceStatus() { boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated(); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled() && !mNightDisplayTintController.isActivated() && !isAccessibilityEnabled() && DisplayTransformManager.needsLinearColorMatrix()); && dtm.needsLinearColorMatrix()); boolean activated = mDisplayWhiteBalanceTintController.isActivated(); if (mDisplayWhiteBalanceListener != null && oldActivated != activated) { Loading services/core/java/com/android/server/display/color/DisplayTransformManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -239,7 +239,7 @@ public class DisplayTransformManager { /** * Return true when the color matrix works in linear space. */ public static boolean needsLinearColorMatrix() { public boolean needsLinearColorMatrix() { return SystemProperties.getInt(PERSISTENT_PROPERTY_DISPLAY_COLOR, DISPLAY_COLOR_UNMANAGED) != DISPLAY_COLOR_UNMANAGED; } Loading @@ -247,7 +247,7 @@ public class DisplayTransformManager { /** * Return true when the specified colorMode requires the color matrix to work in linear space. */ public static boolean needsLinearColorMatrix(int colorMode) { public boolean needsLinearColorMatrix(int colorMode) { return colorMode != ColorDisplayManager.COLOR_MODE_SATURATED; } Loading services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java +31 −37 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -53,9 +52,7 @@ import com.android.server.twilight.TwilightManager; import com.android.server.twilight.TwilightState; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; Loading @@ -76,25 +73,29 @@ public class ColorDisplayServiceTest { private int mUserId; private MockTwilightManager mTwilightManager; private DisplayTransformManager mDisplayTransformManager; private ColorDisplayService mCds; private ColorDisplayService.BinderService mBinderService; private Resources mResourcesSpy; @BeforeClass public static void setDtm() { final DisplayTransformManager dtm = Mockito.mock(DisplayTransformManager.class); LocalServices.addService(DisplayTransformManager.class, dtm); } private static final int[] MINIMAL_COLOR_MODES = new int[] { ColorDisplayManager.COLOR_MODE_NATURAL, ColorDisplayManager.COLOR_MODE_BOOSTED, }; @Before public void setUp() { mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); doReturn(mContext).when(mContext).getApplicationContext(); mResourcesSpy = Mockito.spy(mContext.getResources()); when(mContext.getResources()).thenReturn(mResourcesSpy); final Resources res = Mockito.spy(mContext.getResources()); doReturn(MINIMAL_COLOR_MODES).when(res).getIntArray(R.array.config_availableColorModes); doReturn(true).when(res).getBoolean(R.bool.config_nightDisplayAvailable); doReturn(true).when(res).getBoolean(R.bool.config_displayWhiteBalanceAvailable); when(mContext.getResources()).thenReturn(res); mResourcesSpy = res; mUserId = ActivityManager.getCurrentUser(); Loading @@ -108,6 +109,10 @@ public class ColorDisplayServiceTest { mTwilightManager = new MockTwilightManager(); LocalServices.addService(TwilightManager.class, mTwilightManager); mDisplayTransformManager = Mockito.mock(DisplayTransformManager.class); doReturn(true).when(mDisplayTransformManager).needsLinearColorMatrix(); LocalServices.addService(DisplayTransformManager.class, mDisplayTransformManager); mCds = new ColorDisplayService(mContext); mBinderService = mCds.new BinderService(); LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class, Loading @@ -116,12 +121,18 @@ public class ColorDisplayServiceTest { @After public void tearDown() { LocalServices.removeServiceForTest(TwilightManager.class); /* * Wait for internal {@link Handler} to finish processing pending messages, so that test * code can safelyremove {@link DisplayTransformManager} mock from {@link LocalServices}. */ mCds.mHandler.runWithScissors(() -> { /* nop */ }, /* timeout */ 1000); mCds = null; LocalServices.removeServiceForTest(TwilightManager.class); mTwilightManager = null; LocalServices.removeServiceForTest(DisplayTransformManager.class); mUserId = UserHandle.USER_NULL; mContext = null; Loading @@ -130,11 +141,6 @@ public class ColorDisplayServiceTest { LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class); } @AfterClass public static void removeDtm() { LocalServices.removeServiceForTest(DisplayTransformManager.class); } @Test public void customSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() { setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); Loading Loading @@ -1064,24 +1070,18 @@ public class ColorDisplayServiceTest { @Test public void compositionColorSpaces_noResources() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] {}); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorSpaces)) .thenReturn(new int[] {}); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); } @Test public void compositionColorSpaces_invalidResources() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL, Loading @@ -1094,15 +1094,12 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); } @Test public void compositionColorSpaces_validResources_validColorMode() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL Loading @@ -1113,15 +1110,12 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_SRGB)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_SRGB)); } @Test public void compositionColorSpaces_validResources_invalidColorMode() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL Loading @@ -1132,8 +1126,8 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID)); } /** Loading Loading
services/core/java/com/android/server/display/color/ColorDisplayService.java +9 −8 Original line number Diff line number Diff line Loading @@ -162,7 +162,8 @@ public final class ColorDisplayService extends SystemService { private final ReduceBrightColorsTintController mReduceBrightColorsTintController = new ReduceBrightColorsTintController(); private final Handler mHandler; @VisibleForTesting final Handler mHandler; private final AppSaturationController mAppSaturationController = new AppSaturationController(); Loading Loading @@ -404,13 +405,13 @@ public final class ColorDisplayService extends SystemService { // existing activated state. This ensures consistency of tint across the color mode change. onDisplayColorModeChanged(getColorModeInternal()); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); if (mNightDisplayTintController.isAvailable(getContext())) { // Reset the activated state. mNightDisplayTintController.setActivated(null); // Prepare the night display color transformation matrix. mNightDisplayTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix()); mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix()); mNightDisplayTintController .setMatrix(mNightDisplayTintController.getColorTemperatureSetting()); Loading @@ -432,8 +433,7 @@ public final class ColorDisplayService extends SystemService { } if (mReduceBrightColorsTintController.isAvailable(getContext())) { mReduceBrightColorsTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix()); mReduceBrightColorsTintController.setUp(getContext(), dtm.needsLinearColorMatrix()); onReduceBrightColorsStrengthLevelChanged(); final boolean reset = resetReduceBrightColors(); if (!reset) { Loading Loading @@ -540,8 +540,8 @@ public final class ColorDisplayService extends SystemService { mDisplayWhiteBalanceTintController.cancelAnimator(); if (mNightDisplayTintController.isAvailable(getContext())) { mNightDisplayTintController .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode)); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix(mode)); mNightDisplayTintController .setMatrix(mNightDisplayTintController.getColorTemperatureSetting()); } Loading Loading @@ -731,10 +731,11 @@ public final class ColorDisplayService extends SystemService { @VisibleForTesting void updateDisplayWhiteBalanceStatus() { boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated(); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled() && !mNightDisplayTintController.isActivated() && !isAccessibilityEnabled() && DisplayTransformManager.needsLinearColorMatrix()); && dtm.needsLinearColorMatrix()); boolean activated = mDisplayWhiteBalanceTintController.isActivated(); if (mDisplayWhiteBalanceListener != null && oldActivated != activated) { Loading
services/core/java/com/android/server/display/color/DisplayTransformManager.java +2 −2 Original line number Diff line number Diff line Loading @@ -239,7 +239,7 @@ public class DisplayTransformManager { /** * Return true when the color matrix works in linear space. */ public static boolean needsLinearColorMatrix() { public boolean needsLinearColorMatrix() { return SystemProperties.getInt(PERSISTENT_PROPERTY_DISPLAY_COLOR, DISPLAY_COLOR_UNMANAGED) != DISPLAY_COLOR_UNMANAGED; } Loading @@ -247,7 +247,7 @@ public class DisplayTransformManager { /** * Return true when the specified colorMode requires the color matrix to work in linear space. */ public static boolean needsLinearColorMatrix(int colorMode) { public boolean needsLinearColorMatrix(int colorMode) { return colorMode != ColorDisplayManager.COLOR_MODE_SATURATED; } Loading
services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java +31 −37 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; Loading Loading @@ -53,9 +52,7 @@ import com.android.server.twilight.TwilightManager; import com.android.server.twilight.TwilightState; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; Loading @@ -76,25 +73,29 @@ public class ColorDisplayServiceTest { private int mUserId; private MockTwilightManager mTwilightManager; private DisplayTransformManager mDisplayTransformManager; private ColorDisplayService mCds; private ColorDisplayService.BinderService mBinderService; private Resources mResourcesSpy; @BeforeClass public static void setDtm() { final DisplayTransformManager dtm = Mockito.mock(DisplayTransformManager.class); LocalServices.addService(DisplayTransformManager.class, dtm); } private static final int[] MINIMAL_COLOR_MODES = new int[] { ColorDisplayManager.COLOR_MODE_NATURAL, ColorDisplayManager.COLOR_MODE_BOOSTED, }; @Before public void setUp() { mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); doReturn(mContext).when(mContext).getApplicationContext(); mResourcesSpy = Mockito.spy(mContext.getResources()); when(mContext.getResources()).thenReturn(mResourcesSpy); final Resources res = Mockito.spy(mContext.getResources()); doReturn(MINIMAL_COLOR_MODES).when(res).getIntArray(R.array.config_availableColorModes); doReturn(true).when(res).getBoolean(R.bool.config_nightDisplayAvailable); doReturn(true).when(res).getBoolean(R.bool.config_displayWhiteBalanceAvailable); when(mContext.getResources()).thenReturn(res); mResourcesSpy = res; mUserId = ActivityManager.getCurrentUser(); Loading @@ -108,6 +109,10 @@ public class ColorDisplayServiceTest { mTwilightManager = new MockTwilightManager(); LocalServices.addService(TwilightManager.class, mTwilightManager); mDisplayTransformManager = Mockito.mock(DisplayTransformManager.class); doReturn(true).when(mDisplayTransformManager).needsLinearColorMatrix(); LocalServices.addService(DisplayTransformManager.class, mDisplayTransformManager); mCds = new ColorDisplayService(mContext); mBinderService = mCds.new BinderService(); LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class, Loading @@ -116,12 +121,18 @@ public class ColorDisplayServiceTest { @After public void tearDown() { LocalServices.removeServiceForTest(TwilightManager.class); /* * Wait for internal {@link Handler} to finish processing pending messages, so that test * code can safelyremove {@link DisplayTransformManager} mock from {@link LocalServices}. */ mCds.mHandler.runWithScissors(() -> { /* nop */ }, /* timeout */ 1000); mCds = null; LocalServices.removeServiceForTest(TwilightManager.class); mTwilightManager = null; LocalServices.removeServiceForTest(DisplayTransformManager.class); mUserId = UserHandle.USER_NULL; mContext = null; Loading @@ -130,11 +141,6 @@ public class ColorDisplayServiceTest { LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class); } @AfterClass public static void removeDtm() { LocalServices.removeServiceForTest(DisplayTransformManager.class); } @Test public void customSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() { setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); Loading Loading @@ -1064,24 +1070,18 @@ public class ColorDisplayServiceTest { @Test public void compositionColorSpaces_noResources() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] {}); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorSpaces)) .thenReturn(new int[] {}); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); } @Test public void compositionColorSpaces_invalidResources() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL, Loading @@ -1094,15 +1094,12 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID)); } @Test public void compositionColorSpaces_validResources_validColorMode() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL Loading @@ -1113,15 +1110,12 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_SRGB)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_SRGB)); } @Test public void compositionColorSpaces_validResources_invalidColorMode() { final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); reset(dtm); when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes)) .thenReturn(new int[] { ColorDisplayManager.COLOR_MODE_NATURAL Loading @@ -1132,8 +1126,8 @@ public class ColorDisplayServiceTest { }); setColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED); startService(); verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID)); verify(mDisplayTransformManager).setColorMode( eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID)); } /** Loading