summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java34
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java16
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java20
4 files changed, 35 insertions, 37 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java
index fd387d1811fb..37296531ee34 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipMotionHelper.java
@@ -350,7 +350,7 @@ public class PipMotionHelper implements PipAppOpsListener.Callback,
}
cancelPhysicsAnimation();
mMenuController.hideMenu(ANIM_TYPE_DISMISS, false /* resize */);
- mPipScheduler.removePipAfterAnimation();
+ mPipScheduler.scheduleRemovePip();
}
/** Sets the movement bounds to use to constrain PIP position animations. */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
index 4461a5c6a70c..7f673d2efc68 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java
@@ -122,34 +122,26 @@ public class PipScheduler {
* Schedules exit PiP via expand transition.
*/
public void scheduleExitPipViaExpand() {
- WindowContainerTransaction wct = getExitPipViaExpandTransaction();
- if (wct != null) {
- mMainExecutor.execute(() -> {
+ mMainExecutor.execute(() -> {
+ if (!mPipTransitionState.isInPip()) return;
+ WindowContainerTransaction wct = getExitPipViaExpandTransaction();
+ if (wct != null) {
mPipTransitionController.startExitTransition(TRANSIT_EXIT_PIP, wct,
null /* destinationBounds */);
- });
- }
- }
-
- // TODO: Optimize this by running the animation as part of the transition
- /** Runs remove PiP animation and schedules remove PiP transition after the animation ends. */
- public void removePipAfterAnimation() {
- SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction();
- PipAlphaAnimator animator = mPipAlphaAnimatorSupplier.get(mContext,
- mPipTransitionState.getPinnedTaskLeash(), tx, PipAlphaAnimator.FADE_OUT);
- animator.setAnimationEndCallback(this::scheduleRemovePipImmediately);
- animator.start();
+ }
+ });
}
/** Schedules remove PiP transition. */
- private void scheduleRemovePipImmediately() {
- WindowContainerTransaction wct = getRemovePipTransaction();
- if (wct != null) {
- mMainExecutor.execute(() -> {
+ public void scheduleRemovePip() {
+ mMainExecutor.execute(() -> {
+ if (!mPipTransitionState.isInPip()) return;
+ WindowContainerTransaction wct = getRemovePipTransaction();
+ if (wct != null) {
mPipTransitionController.startExitTransition(TRANSIT_REMOVE_PIP, wct,
null /* destinationBounds */);
- });
- }
+ }
+ });
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
index acb5622b041c..2e38449d4584 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipTransition.java
@@ -278,7 +278,8 @@ public class PipTransition extends PipTransitionController implements
}
if (isRemovePipTransition(info)) {
- return removePipImmediately(info, startTransaction, finishTransaction, finishCallback);
+ mPipTransitionState.setState(PipTransitionState.EXITING_PIP);
+ return startRemoveAnimation(info, startTransaction, finishTransaction, finishCallback);
}
return false;
}
@@ -668,13 +669,18 @@ public class PipTransition extends PipTransitionController implements
return true;
}
- private boolean removePipImmediately(@NonNull TransitionInfo info,
+ private boolean startRemoveAnimation(@NonNull TransitionInfo info,
@NonNull SurfaceControl.Transaction startTransaction,
@NonNull SurfaceControl.Transaction finishTransaction,
@NonNull Transitions.TransitionFinishCallback finishCallback) {
- startTransaction.apply();
- finishCallback.onTransitionFinished(null);
- mPipTransitionState.setState(PipTransitionState.EXITED_PIP);
+ TransitionInfo.Change pipChange = getChangeByToken(info,
+ mPipTransitionState.getPipTaskToken());
+ mFinishCallback = finishCallback;
+ PipAlphaAnimator animator = new PipAlphaAnimator(mContext, pipChange.getLeash(),
+ startTransaction, PipAlphaAnimator.FADE_OUT);
+ finishTransaction.setAlpha(pipChange.getLeash(), 0f);
+ animator.setAnimationEndCallback(this::finishTransition);
+ animator.start();
return true;
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
index 3fe8c109807a..a8aa25700c7e 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip2/phone/PipSchedulerTest.java
@@ -120,15 +120,22 @@ public class PipSchedulerTest {
@Test
public void scheduleExitPipViaExpand_nullTaskToken_noop() {
setNullPipTaskToken();
+ when(mMockPipTransitionState.isInPip()).thenReturn(true);
mPipScheduler.scheduleExitPipViaExpand();
- verify(mMockMainExecutor, never()).execute(any());
+ verify(mMockMainExecutor, times(1)).execute(mRunnableArgumentCaptor.capture());
+ assertNotNull(mRunnableArgumentCaptor.getValue());
+ mRunnableArgumentCaptor.getValue().run();
+
+ verify(mMockPipTransitionController, never())
+ .startExitTransition(eq(TRANSIT_EXIT_PIP), any(), isNull());
}
@Test
public void scheduleExitPipViaExpand_exitTransitionCalled() {
setMockPipTaskToken();
+ when(mMockPipTransitionState.isInPip()).thenReturn(true);
mPipScheduler.scheduleExitPipViaExpand();
@@ -142,20 +149,13 @@ public class PipSchedulerTest {
@Test
public void removePipAfterAnimation() {
- //TODO: Update once this is changed to run animation as part of transition
setMockPipTaskToken();
+ when(mMockPipTransitionState.isInPip()).thenReturn(true);
- mPipScheduler.removePipAfterAnimation();
- verify(mMockAlphaAnimator, times(1))
- .setAnimationEndCallback(mRunnableArgumentCaptor.capture());
- assertNotNull(mRunnableArgumentCaptor.getValue());
- verify(mMockAlphaAnimator, times(1)).start();
-
- mRunnableArgumentCaptor.getValue().run();
+ mPipScheduler.scheduleRemovePip();
verify(mMockMainExecutor, times(1)).execute(mRunnableArgumentCaptor.capture());
assertNotNull(mRunnableArgumentCaptor.getValue());
-
mRunnableArgumentCaptor.getValue().run();
verify(mMockPipTransitionController, times(1))