summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Oleg Petšjonkin <petsjonkin@google.com> 2023-10-13 20:26:52 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-10-13 20:26:52 +0000
commit397f74de24d80c2b9bc4926680dbd89b6aa97568 (patch)
tree1221607532576f444c10e828fc163cf947c76327
parentaa12d0c2645793270f65405ab71b9c423e1c146f (diff)
parent459016e82fe57dcc859398e60ecb1bb25b23bc82 (diff)
Merge "ColorDisplayServiceTest - stop animation on tearDown" into main
-rw-r--r--services/core/java/com/android/server/display/color/ColorDisplayService.java13
-rw-r--r--services/tests/displayservicetests/src/com/android/server/display/color/ColorDisplayServiceTest.java44
2 files changed, 33 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/display/color/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java
index 03b0cfc3d844..e3aa161f001a 100644
--- a/services/core/java/com/android/server/display/color/ColorDisplayService.java
+++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java
@@ -234,7 +234,9 @@ public final class ColorDisplayService extends SystemService {
}
}
- @VisibleForTesting void onUserChanged(int userHandle) {
+ // should be called in handler thread (same thread that started animation)
+ @VisibleForTesting
+ void onUserChanged(int userHandle) {
final ContentResolver cr = getContext().getContentResolver();
if (mCurrentUser != UserHandle.USER_NULL) {
@@ -473,6 +475,15 @@ public final class ColorDisplayService extends SystemService {
}
}
+ // should be called in handler thread (same thread that started animation)
+ @VisibleForTesting
+ void cancelAllAnimators() {
+ mNightDisplayTintController.cancelAnimator();
+ mGlobalSaturationTintController.cancelAnimator();
+ mReduceBrightColorsTintController.cancelAnimator();
+ mDisplayWhiteBalanceTintController.cancelAnimator();
+ }
+
private boolean resetReduceBrightColors() {
if (mCurrentUser == UserHandle.USER_NULL) {
return false;
diff --git a/services/tests/displayservicetests/src/com/android/server/display/color/ColorDisplayServiceTest.java b/services/tests/displayservicetests/src/com/android/server/display/color/ColorDisplayServiceTest.java
index c7c09b5deb35..ec27f9d220dc 100644
--- a/services/tests/displayservicetests/src/com/android/server/display/color/ColorDisplayServiceTest.java
+++ b/services/tests/displayservicetests/src/com/android/server/display/color/ColorDisplayServiceTest.java
@@ -44,12 +44,12 @@ import android.provider.Settings.System;
import android.test.mock.MockContentResolver;
import android.view.Display;
-import androidx.test.InstrumentationRegistry;
+import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.R;
import com.android.internal.util.test.FakeSettingsProvider;
-import com.android.server.LocalServices;
+import com.android.internal.util.test.LocalServiceKeeperRule;
import com.android.server.SystemService;
import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager;
@@ -57,6 +57,7 @@ import com.android.server.twilight.TwilightState;
import org.junit.After;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
@@ -90,9 +91,13 @@ public class ColorDisplayServiceTest {
ColorDisplayManager.COLOR_MODE_BOOSTED,
};
+ @Rule
+ public LocalServiceKeeperRule mLocalServiceKeeperRule = new LocalServiceKeeperRule();
+
@Before
public void setUp() {
- mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
+ mContext = Mockito.spy(new ContextWrapper(
+ InstrumentationRegistry.getInstrumentation().getTargetContext()));
doReturn(mContext).when(mContext).getApplicationContext();
final Resources res = Mockito.spy(mContext.getResources());
@@ -112,43 +117,36 @@ public class ColorDisplayServiceTest {
doReturn(am).when(mContext).getSystemService(Context.ALARM_SERVICE);
mTwilightManager = new MockTwilightManager();
- LocalServices.addService(TwilightManager.class, mTwilightManager);
+ mLocalServiceKeeperRule.overrideLocalService(TwilightManager.class, mTwilightManager);
mDisplayTransformManager = Mockito.mock(DisplayTransformManager.class);
doReturn(true).when(mDisplayTransformManager).needsLinearColorMatrix();
- LocalServices.addService(DisplayTransformManager.class, mDisplayTransformManager);
+ mLocalServiceKeeperRule.overrideLocalService(
+ DisplayTransformManager.class, mDisplayTransformManager);
mDisplayManagerInternal = Mockito.mock(DisplayManagerInternal.class);
- LocalServices.removeServiceForTest(DisplayManagerInternal.class);
- LocalServices.addService(DisplayManagerInternal.class, mDisplayManagerInternal);
+ mLocalServiceKeeperRule.overrideLocalService(
+ DisplayManagerInternal.class, mDisplayManagerInternal);
mCds = new ColorDisplayService(mContext);
mBinderService = mCds.new BinderService();
- LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class,
+ mLocalServiceKeeperRule.overrideLocalService(
+ ColorDisplayService.ColorDisplayServiceInternal.class,
mCds.new ColorDisplayServiceInternal());
}
@After
public void tearDown() {
- /*
- * 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);
+ // synchronously cancel all animations
+ mCds.mHandler.runWithScissors(() -> mCds.cancelAllAnimators(), /* timeout */ 1000);
mCds = null;
- LocalServices.removeServiceForTest(TwilightManager.class);
mTwilightManager = null;
- LocalServices.removeServiceForTest(DisplayTransformManager.class);
-
mUserId = UserHandle.USER_NULL;
mContext = null;
FakeSettingsProvider.clearSettingsProvider();
-
- LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
- LocalServices.removeServiceForTest(DisplayManagerInternal.class);
}
@Test
@@ -1249,10 +1247,10 @@ public class ColorDisplayServiceTest {
private void startService() {
Secure.putIntForUser(mContext.getContentResolver(), Secure.USER_SETUP_COMPLETE, 1, mUserId);
- InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
- mCds.onBootPhase(SystemService.PHASE_BOOT_COMPLETED);
- mCds.onUserChanged(mUserId);
- });
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(
+ () -> mCds.onBootPhase(SystemService.PHASE_BOOT_COMPLETED));
+ // onUserChanged cancels running animations, and should be called in handler thread
+ mCds.mHandler.runWithScissors(() -> mCds.onUserChanged(mUserId), 1000);
}
/**