Update the task stack state when resizing the tasks after the PiP animation
- When the animation into PiP ends, we clear the task stack state and request a layout prior to resizing the the stack to update the task bounds to the stack bounds. This triggers a relayout from the client, which fetches the new configuration prior to handling the PiP mode/config change scheduled as a part of the PiP mode change. We can instead update the task stack state when we resize the tasks to ensure that we don't relayout multiple times. Bug: 75995355 Test: atest CtsActivityManagerDeviceTestCases:ActivityManagerPinnedStackTests Change-Id: I58a6e30651f16b85ec160e977554b8d091b461ec
This commit is contained in:
@@ -134,7 +134,6 @@ import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemClock;
|
||||
import android.os.Trace;
|
||||
import android.os.UserHandle;
|
||||
import android.service.voice.IVoiceInteractionSession;
|
||||
import android.util.ArraySet;
|
||||
@@ -4789,6 +4788,10 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
|
||||
}
|
||||
}
|
||||
|
||||
void onPipAnimationEndResize() {
|
||||
mWindowContainerController.onPipAnimationEndResize();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Adjust bounds to stay within stack bounds.
|
||||
|
||||
@@ -2968,6 +2968,12 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
|
||||
insetBounds.right = tempPinnedTaskBounds.width();
|
||||
insetBounds.bottom = tempPinnedTaskBounds.height();
|
||||
}
|
||||
if (pinnedBounds != null && tempPinnedTaskBounds == null) {
|
||||
// We have finished the animation into PiP, and are resizing the tasks to match the
|
||||
// stack bounds, while layouts are deferred, update any task state as a part of
|
||||
// transitioning it from fullscreen into a floating state.
|
||||
stack.onPipAnimationEndResize();
|
||||
}
|
||||
stack.resize(pinnedBounds, tempPinnedTaskBounds, insetBounds);
|
||||
stack.ensureVisibleActivitiesConfigurationLocked(r, false);
|
||||
} finally {
|
||||
|
||||
@@ -192,6 +192,12 @@ public class StackWindowController
|
||||
}
|
||||
}
|
||||
|
||||
public void onPipAnimationEndResize() {
|
||||
synchronized (mService.mWindowMap) {
|
||||
mContainer.onPipAnimationEndResize();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see TaskStack.getStackDockedModeBoundsLocked(Rect, Rect, Rect, boolean)
|
||||
*/
|
||||
|
||||
@@ -1667,16 +1667,6 @@ public class TaskStack extends WindowContainer<Task> implements
|
||||
@Override // AnimatesBounds
|
||||
public void onAnimationEnd(boolean schedulePipModeChangedCallback, Rect finalStackSize,
|
||||
boolean moveToFullscreen) {
|
||||
// Hold the lock since this is called from the BoundsAnimator running on the UiThread
|
||||
synchronized (mService.mWindowMap) {
|
||||
mBoundsAnimating = false;
|
||||
for (int i = 0; i < mChildren.size(); i++) {
|
||||
final Task t = mChildren.get(i);
|
||||
t.clearPreserveNonFloatingState();
|
||||
}
|
||||
mService.requestTraversal();
|
||||
}
|
||||
|
||||
if (inPinnedWindowingMode()) {
|
||||
// Update to the final bounds if requested. This is done here instead of in the bounds
|
||||
// animator to allow us to coordinate this after we notify the PiP mode changed
|
||||
@@ -1706,6 +1696,18 @@ public class TaskStack extends WindowContainer<Task> implements
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called immediately prior to resizing the tasks at the end of the pinned stack animation.
|
||||
*/
|
||||
public void onPipAnimationEndResize() {
|
||||
mBoundsAnimating = false;
|
||||
for (int i = 0; i < mChildren.size(); i++) {
|
||||
final Task t = mChildren.get(i);
|
||||
t.clearPreserveNonFloatingState();
|
||||
}
|
||||
mService.requestTraversal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldDeferStartOnMoveToFullscreen() {
|
||||
// Workaround for the recents animation -- normally we need to wait for the new activity to
|
||||
|
||||
Reference in New Issue
Block a user