Loading services/core/java/com/android/server/wm/TransitionController.java +2 −1 Original line number Diff line number Diff line Loading @@ -267,7 +267,8 @@ class TransitionController { mSyncEngine.addOnIdleListener(this::tryStartCollectFromQueue); } private void detachPlayer() { @VisibleForTesting void detachPlayer() { if (mTransitionPlayer == null) return; // Immediately set to null so that nothing inadvertently starts/queues. mTransitionPlayer = null; Loading services/tests/wmtests/src/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncherTest.java +43 −58 Original line number Diff line number Diff line Loading @@ -16,33 +16,23 @@ package com.android.server.wm; import static android.view.WindowManager.TRANSIT_CHANGE; import static com.android.internal.R.bool.config_unfoldTransitionEnabled; import static com.android.server.wm.DeviceStateController.DeviceState.REAR; import static com.android.server.wm.DeviceStateController.DeviceState.FOLDED; import static com.android.server.wm.DeviceStateController.DeviceState.HALF_FOLDED; import static com.android.server.wm.DeviceStateController.DeviceState.OPEN; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.content.Context; import android.content.res.Resources; import android.graphics.Rect; import android.platform.test.annotations.Presubmit; import android.window.TransitionRequestInfo.DisplayChange; import static com.android.internal.R.bool.config_unfoldTransitionEnabled; import static com.android.server.wm.DeviceStateController.DeviceState.REAR; import androidx.test.filters.SmallTest; Loading @@ -50,7 +40,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading @@ -62,20 +51,19 @@ import org.mockito.MockitoAnnotations; */ @SmallTest @Presubmit public class PhysicalDisplaySwitchTransitionLauncherTest { @RunWith(WindowTestRunner.class) public class PhysicalDisplaySwitchTransitionLauncherTest extends WindowTestsBase { @Mock DisplayContent mDisplayContent; @Mock Context mContext; @Mock Resources mResources; @Mock ActivityTaskManagerService mActivityTaskManagerService; @Mock BLASTSyncEngine mSyncEngine; @Mock WindowTestsBase.TestTransitionPlayer mPlayer; TransitionController mTransitionController; DisplayContent mDisplayContent; private PhysicalDisplaySwitchTransitionLauncher mTarget; private float mOriginalAnimationScale; Loading @@ -83,9 +71,14 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); mTransitionController = new WindowTestsBase.TestTransitionController(mAtm); mTransitionController.setSyncEngine(mSyncEngine); mPlayer = new WindowTestsBase.TestTransitionPlayer( mTransitionController, mAtm.mWindowOrganizerController); when(mContext.getResources()).thenReturn(mResources); mTarget = new PhysicalDisplaySwitchTransitionLauncher(mDisplayContent, mActivityTaskManagerService, mContext, mTransitionController); mDisplayContent = new TestDisplayContent.Builder(mAtm, 100, 150).build(); mTarget = new PhysicalDisplaySwitchTransitionLauncher(mDisplayContent, mAtm, mContext, mTransitionController); mOriginalAnimationScale = ValueAnimator.getDurationScale(); } Loading @@ -100,24 +93,23 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { mTarget.foldStateChanged(FOLDED); mTarget.foldStateChanged(OPEN); final Rect origBounds = new Rect(); mDisplayContent.getBounds(origBounds); origBounds.offsetTo(0, 0); mTarget.requestDisplaySwitchTransitionIfNeeded( /* displayId= */ 123, /* oldDisplayWidth= */ 100, /* oldDisplayHeight= */ 150, mDisplayContent.getDisplayId(), origBounds.width(), origBounds.height(), /* newDisplayWidth= */ 200, /* newDisplayHeight= */ 250 ); ArgumentCaptor<DisplayChange> displayChangeArgumentCaptor = ArgumentCaptor.forClass(DisplayChange.class); verify(mTransitionController).requestTransitionIfNeeded(eq(TRANSIT_CHANGE), /* flags= */ eq(0), eq(mDisplayContent), eq(mDisplayContent), /* remoteTransition= */ isNull(), displayChangeArgumentCaptor.capture()); assertThat(displayChangeArgumentCaptor.getValue().getDisplayId()).isEqualTo(123); assertThat(displayChangeArgumentCaptor.getValue().getStartAbsBounds()).isEqualTo( new Rect(0, 0, 100, 150)); assertThat(displayChangeArgumentCaptor.getValue().getEndAbsBounds()).isEqualTo( new Rect(0, 0, 200, 250)); assertNotNull(mPlayer.mLastRequest); assertEquals(mDisplayContent.getDisplayId(), mPlayer.mLastRequest.getDisplayChange().getDisplayId()); assertEquals(origBounds, mPlayer.mLastRequest.getDisplayChange().getStartAbsBounds()); assertEquals(new Rect(0, 0, 200, 250), mPlayer.mLastRequest.getDisplayChange().getEndAbsBounds()); } @Test Loading Loading @@ -148,7 +140,7 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { mTarget.foldStateChanged(FOLDED); mTarget.foldStateChanged(OPEN); requestDisplaySwitch(); clearInvocations(mTransitionController); mPlayer.mLastRequest = null; requestDisplaySwitch(); Loading Loading @@ -220,7 +212,6 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { @Test public void testDisplaySwitchAfterUnfolding_otherCollectingTransition_collectsDisplaySwitch() { givenCollectingTransition(createTransition(TRANSIT_CHANGE)); givenAllAnimationsEnabled(); mTarget.foldStateChanged(FOLDED); Loading @@ -228,7 +219,8 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { requestDisplaySwitch(); // Collects to the current transition verify(mTransitionController).collect(mDisplayContent); assertTrue(mTransitionController.getCollectingTransition().mParticipants.contains( mDisplayContent)); } Loading @@ -245,20 +237,18 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { } private void assertTransitionRequested() { verify(mTransitionController).requestTransitionIfNeeded(anyInt(), anyInt(), any(), any(), any(), any()); assertNotNull(mPlayer.mLastRequest); } private void assertTransitionNotRequested() { verify(mTransitionController, never()).requestTransitionIfNeeded(anyInt(), anyInt(), any(), any(), any(), any()); assertNull(mPlayer.mLastRequest); } private void requestDisplaySwitch() { mTarget.requestDisplaySwitchTransitionIfNeeded( /* displayId= */ 123, /* oldDisplayWidth= */ 100, /* oldDisplayHeight= */ 150, mDisplayContent.getDisplayId(), mDisplayContent.getBounds().width(), mDisplayContent.getBounds().height(), /* newDisplayWidth= */ 200, /* newDisplayHeight= */ 250 ); Loading @@ -280,16 +270,11 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { } private void givenShellTransitionsEnabled(boolean enabled) { when(mTransitionController.isShellTransitionsEnabled()).thenReturn(enabled); } private void givenCollectingTransition(@Nullable Transition transition) { when(mTransitionController.isCollecting()).thenReturn(transition != null); when(mTransitionController.getCollectingTransition()).thenReturn(transition); if (enabled) { mTransitionController.registerTransitionPlayer(mPlayer, null /* proc */); } else { mTransitionController.detachPlayer(); } private Transition createTransition(int type) { return new Transition(type, /* flags= */ 0, mTransitionController, mSyncEngine); } private void givenDisplayContentHasContent(boolean hasContent) { Loading Loading
services/core/java/com/android/server/wm/TransitionController.java +2 −1 Original line number Diff line number Diff line Loading @@ -267,7 +267,8 @@ class TransitionController { mSyncEngine.addOnIdleListener(this::tryStartCollectFromQueue); } private void detachPlayer() { @VisibleForTesting void detachPlayer() { if (mTransitionPlayer == null) return; // Immediately set to null so that nothing inadvertently starts/queues. mTransitionPlayer = null; Loading
services/tests/wmtests/src/com/android/server/wm/PhysicalDisplaySwitchTransitionLauncherTest.java +43 −58 Original line number Diff line number Diff line Loading @@ -16,33 +16,23 @@ package com.android.server.wm; import static android.view.WindowManager.TRANSIT_CHANGE; import static com.android.internal.R.bool.config_unfoldTransitionEnabled; import static com.android.server.wm.DeviceStateController.DeviceState.REAR; import static com.android.server.wm.DeviceStateController.DeviceState.FOLDED; import static com.android.server.wm.DeviceStateController.DeviceState.HALF_FOLDED; import static com.android.server.wm.DeviceStateController.DeviceState.OPEN; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.content.Context; import android.content.res.Resources; import android.graphics.Rect; import android.platform.test.annotations.Presubmit; import android.window.TransitionRequestInfo.DisplayChange; import static com.android.internal.R.bool.config_unfoldTransitionEnabled; import static com.android.server.wm.DeviceStateController.DeviceState.REAR; import androidx.test.filters.SmallTest; Loading @@ -50,7 +40,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; Loading @@ -62,20 +51,19 @@ import org.mockito.MockitoAnnotations; */ @SmallTest @Presubmit public class PhysicalDisplaySwitchTransitionLauncherTest { @RunWith(WindowTestRunner.class) public class PhysicalDisplaySwitchTransitionLauncherTest extends WindowTestsBase { @Mock DisplayContent mDisplayContent; @Mock Context mContext; @Mock Resources mResources; @Mock ActivityTaskManagerService mActivityTaskManagerService; @Mock BLASTSyncEngine mSyncEngine; @Mock WindowTestsBase.TestTransitionPlayer mPlayer; TransitionController mTransitionController; DisplayContent mDisplayContent; private PhysicalDisplaySwitchTransitionLauncher mTarget; private float mOriginalAnimationScale; Loading @@ -83,9 +71,14 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); mTransitionController = new WindowTestsBase.TestTransitionController(mAtm); mTransitionController.setSyncEngine(mSyncEngine); mPlayer = new WindowTestsBase.TestTransitionPlayer( mTransitionController, mAtm.mWindowOrganizerController); when(mContext.getResources()).thenReturn(mResources); mTarget = new PhysicalDisplaySwitchTransitionLauncher(mDisplayContent, mActivityTaskManagerService, mContext, mTransitionController); mDisplayContent = new TestDisplayContent.Builder(mAtm, 100, 150).build(); mTarget = new PhysicalDisplaySwitchTransitionLauncher(mDisplayContent, mAtm, mContext, mTransitionController); mOriginalAnimationScale = ValueAnimator.getDurationScale(); } Loading @@ -100,24 +93,23 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { mTarget.foldStateChanged(FOLDED); mTarget.foldStateChanged(OPEN); final Rect origBounds = new Rect(); mDisplayContent.getBounds(origBounds); origBounds.offsetTo(0, 0); mTarget.requestDisplaySwitchTransitionIfNeeded( /* displayId= */ 123, /* oldDisplayWidth= */ 100, /* oldDisplayHeight= */ 150, mDisplayContent.getDisplayId(), origBounds.width(), origBounds.height(), /* newDisplayWidth= */ 200, /* newDisplayHeight= */ 250 ); ArgumentCaptor<DisplayChange> displayChangeArgumentCaptor = ArgumentCaptor.forClass(DisplayChange.class); verify(mTransitionController).requestTransitionIfNeeded(eq(TRANSIT_CHANGE), /* flags= */ eq(0), eq(mDisplayContent), eq(mDisplayContent), /* remoteTransition= */ isNull(), displayChangeArgumentCaptor.capture()); assertThat(displayChangeArgumentCaptor.getValue().getDisplayId()).isEqualTo(123); assertThat(displayChangeArgumentCaptor.getValue().getStartAbsBounds()).isEqualTo( new Rect(0, 0, 100, 150)); assertThat(displayChangeArgumentCaptor.getValue().getEndAbsBounds()).isEqualTo( new Rect(0, 0, 200, 250)); assertNotNull(mPlayer.mLastRequest); assertEquals(mDisplayContent.getDisplayId(), mPlayer.mLastRequest.getDisplayChange().getDisplayId()); assertEquals(origBounds, mPlayer.mLastRequest.getDisplayChange().getStartAbsBounds()); assertEquals(new Rect(0, 0, 200, 250), mPlayer.mLastRequest.getDisplayChange().getEndAbsBounds()); } @Test Loading Loading @@ -148,7 +140,7 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { mTarget.foldStateChanged(FOLDED); mTarget.foldStateChanged(OPEN); requestDisplaySwitch(); clearInvocations(mTransitionController); mPlayer.mLastRequest = null; requestDisplaySwitch(); Loading Loading @@ -220,7 +212,6 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { @Test public void testDisplaySwitchAfterUnfolding_otherCollectingTransition_collectsDisplaySwitch() { givenCollectingTransition(createTransition(TRANSIT_CHANGE)); givenAllAnimationsEnabled(); mTarget.foldStateChanged(FOLDED); Loading @@ -228,7 +219,8 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { requestDisplaySwitch(); // Collects to the current transition verify(mTransitionController).collect(mDisplayContent); assertTrue(mTransitionController.getCollectingTransition().mParticipants.contains( mDisplayContent)); } Loading @@ -245,20 +237,18 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { } private void assertTransitionRequested() { verify(mTransitionController).requestTransitionIfNeeded(anyInt(), anyInt(), any(), any(), any(), any()); assertNotNull(mPlayer.mLastRequest); } private void assertTransitionNotRequested() { verify(mTransitionController, never()).requestTransitionIfNeeded(anyInt(), anyInt(), any(), any(), any(), any()); assertNull(mPlayer.mLastRequest); } private void requestDisplaySwitch() { mTarget.requestDisplaySwitchTransitionIfNeeded( /* displayId= */ 123, /* oldDisplayWidth= */ 100, /* oldDisplayHeight= */ 150, mDisplayContent.getDisplayId(), mDisplayContent.getBounds().width(), mDisplayContent.getBounds().height(), /* newDisplayWidth= */ 200, /* newDisplayHeight= */ 250 ); Loading @@ -280,16 +270,11 @@ public class PhysicalDisplaySwitchTransitionLauncherTest { } private void givenShellTransitionsEnabled(boolean enabled) { when(mTransitionController.isShellTransitionsEnabled()).thenReturn(enabled); } private void givenCollectingTransition(@Nullable Transition transition) { when(mTransitionController.isCollecting()).thenReturn(transition != null); when(mTransitionController.getCollectingTransition()).thenReturn(transition); if (enabled) { mTransitionController.registerTransitionPlayer(mPlayer, null /* proc */); } else { mTransitionController.detachPlayer(); } private Transition createTransition(int type) { return new Transition(type, /* flags= */ 0, mTransitionController, mSyncEngine); } private void givenDisplayContentHasContent(boolean hasContent) { Loading