From ea24f4c7ab212cf2c9b17ef5f0971f75beb1889d Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Wed, 19 May 2021 12:48:44 -0700 Subject: [PATCH] Add test for move PiP upon Display change Bug: 184941272 Test: atest PipControllerTest Change-Id: I61372311c0e81c7d6b5dedd49d48b3738b796585 --- .../wm/shell/pip/phone/PipController.java | 4 +- .../wm/shell/pip/phone/PipControllerTest.java | 42 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 36589e9a367c1..4f3ec96968b29 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -51,6 +51,7 @@ import androidx.annotation.BinderThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.android.internal.annotations.VisibleForTesting; import com.android.wm.shell.R; import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.common.DisplayChangeController; @@ -168,7 +169,8 @@ public class PipController implements PipTransitionController.PipTransitionCallb } }; - private final DisplayController.OnDisplaysChangedListener mDisplaysChangedListener = + @VisibleForTesting + final DisplayController.OnDisplaysChangedListener mDisplaysChangedListener = new DisplayController.OnDisplaysChangedListener() { @Override public void onFixedRotationStarted(int displayId, int newRotation) { diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java index c61302be19b1f..935f6695538de 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.when; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; +import android.content.res.Configuration; import android.graphics.Rect; import android.os.RemoteException; import android.test.suitebuilder.annotation.SmallTest; @@ -40,12 +41,14 @@ import android.util.Size; import com.android.wm.shell.ShellTestCase; import com.android.wm.shell.WindowManagerShellWrapper; import com.android.wm.shell.common.DisplayController; +import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.onehanded.OneHandedController; import com.android.wm.shell.pip.PipBoundsAlgorithm; import com.android.wm.shell.pip.PipBoundsState; import com.android.wm.shell.pip.PipMediaController; +import com.android.wm.shell.pip.PipSnapAlgorithm; import com.android.wm.shell.pip.PipTaskOrganizer; import com.android.wm.shell.pip.PipTransitionController; @@ -70,16 +73,21 @@ public class PipControllerTest extends ShellTestCase { @Mock private PhonePipMenuController mMockPhonePipMenuController; @Mock private PipAppOpsListener mMockPipAppOpsListener; @Mock private PipBoundsAlgorithm mMockPipBoundsAlgorithm; + @Mock private PipSnapAlgorithm mMockPipSnapAlgorithm; @Mock private PipMediaController mMockPipMediaController; @Mock private PipTaskOrganizer mMockPipTaskOrganizer; @Mock private PipTransitionController mMockPipTransitionController; @Mock private PipTouchHandler mMockPipTouchHandler; + @Mock private PipMotionHelper mMockPipMotionHelper; @Mock private WindowManagerShellWrapper mMockWindowManagerShellWrapper; @Mock private PipBoundsState mMockPipBoundsState; @Mock private TaskStackListenerImpl mMockTaskStackListener; @Mock private ShellExecutor mMockExecutor; @Mock private Optional mMockOneHandedController; + @Mock private DisplayLayout mMockDisplayLayout1; + @Mock private DisplayLayout mMockDisplayLayout2; + @Before public void setUp() throws RemoteException { MockitoAnnotations.initMocks(this); @@ -92,6 +100,8 @@ public class PipControllerTest extends ShellTestCase { mMockPipMediaController, mMockPhonePipMenuController, mMockPipTaskOrganizer, mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper, mMockTaskStackListener, mMockOneHandedController, mMockExecutor); + when(mMockPipBoundsAlgorithm.getSnapAlgorithm()).thenReturn(mMockPipSnapAlgorithm); + when(mMockPipTouchHandler.getMotionHelper()).thenReturn(mMockPipMotionHelper); } @Test @@ -167,4 +177,36 @@ public class PipControllerTest extends ShellTestCase { verify(mMockPipBoundsState).saveReentryState(new Size(30, 30), 1.0f); } + + @Test + public void onDisplayConfigurationChanged_inPip_movePip() { + final int displayId = 1; + final Rect bounds = new Rect(0, 0, 10, 10); + when(mMockPipBoundsAlgorithm.getDefaultBounds()).thenReturn(bounds); + when(mMockPipBoundsState.getDisplayId()).thenReturn(displayId); + when(mMockPipBoundsState.getDisplayLayout()).thenReturn(mMockDisplayLayout1); + when(mMockDisplayController.getDisplayLayout(displayId)).thenReturn(mMockDisplayLayout2); + + when(mMockPipTaskOrganizer.isInPip()).thenReturn(true); + mPipController.mDisplaysChangedListener.onDisplayConfigurationChanged( + displayId, new Configuration()); + + verify(mMockPipMotionHelper).movePip(any(Rect.class)); + } + + @Test + public void onDisplayConfigurationChanged_notInPip_doesNotMovePip() { + final int displayId = 1; + final Rect bounds = new Rect(0, 0, 10, 10); + when(mMockPipBoundsAlgorithm.getDefaultBounds()).thenReturn(bounds); + when(mMockPipBoundsState.getDisplayId()).thenReturn(displayId); + when(mMockPipBoundsState.getDisplayLayout()).thenReturn(mMockDisplayLayout1); + when(mMockDisplayController.getDisplayLayout(displayId)).thenReturn(mMockDisplayLayout2); + + when(mMockPipTaskOrganizer.isInPip()).thenReturn(false); + mPipController.mDisplaysChangedListener.onDisplayConfigurationChanged( + displayId, new Configuration()); + + verify(mMockPipMotionHelper, never()).movePip(any(Rect.class)); + } }