Merge "Fix freeze when Chrome multi instance split" into tm-qpr-dev am: 38abc88cc8
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20923908 Change-Id: Ic4512b1feb9c55cd9f952478831c470dd4f78afb Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -1072,6 +1072,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
mSideStage.removeAllTasks(wct, false /* toTop */);
|
mSideStage.removeAllTasks(wct, false /* toTop */);
|
||||||
mMainStage.deactivate(wct, false /* toTop */);
|
mMainStage.deactivate(wct, false /* toTop */);
|
||||||
wct.reorder(mRootTaskInfo.token, false /* onTop */);
|
wct.reorder(mRootTaskInfo.token, false /* onTop */);
|
||||||
|
wct.setForceTranslucent(mRootTaskInfo.token, true);
|
||||||
wct.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
wct.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
||||||
onTransitionAnimationComplete();
|
onTransitionAnimationComplete();
|
||||||
} else {
|
} else {
|
||||||
@@ -1103,6 +1104,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
mMainStage.deactivate(finishedWCT, childrenToTop == mMainStage /* toTop */);
|
mMainStage.deactivate(finishedWCT, childrenToTop == mMainStage /* toTop */);
|
||||||
mSideStage.removeAllTasks(finishedWCT, childrenToTop == mSideStage /* toTop */);
|
mSideStage.removeAllTasks(finishedWCT, childrenToTop == mSideStage /* toTop */);
|
||||||
finishedWCT.reorder(mRootTaskInfo.token, false /* toTop */);
|
finishedWCT.reorder(mRootTaskInfo.token, false /* toTop */);
|
||||||
|
finishedWCT.setForceTranslucent(mRootTaskInfo.token, true);
|
||||||
finishedWCT.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
finishedWCT.setBounds(mSideStage.mRootTaskInfo.token, mTempRect1);
|
||||||
mSyncQueue.queue(finishedWCT);
|
mSyncQueue.queue(finishedWCT);
|
||||||
mSyncQueue.runInSync(at -> {
|
mSyncQueue.runInSync(at -> {
|
||||||
@@ -1485,6 +1487,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onStageVisibilityChanged(StageListenerImpl stageListener) {
|
private void onStageVisibilityChanged(StageListenerImpl stageListener) {
|
||||||
|
// If split didn't active, just ignore this callback because we should already did these
|
||||||
|
// on #applyExitSplitScreen.
|
||||||
|
if (!isSplitActive()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final boolean sideStageVisible = mSideStageListener.mVisible;
|
final boolean sideStageVisible = mSideStageListener.mVisible;
|
||||||
final boolean mainStageVisible = mMainStageListener.mVisible;
|
final boolean mainStageVisible = mMainStageListener.mVisible;
|
||||||
|
|
||||||
@@ -1493,20 +1501,23 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if it needs to dismiss split screen when both stage invisible.
|
||||||
|
if (!mainStageVisible && mExitSplitScreenOnHide) {
|
||||||
|
exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RETURN_HOME);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||||
if (!mainStageVisible) {
|
if (!mainStageVisible) {
|
||||||
|
// Split entering background.
|
||||||
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
||||||
true /* setReparentLeafTaskIfRelaunch */);
|
true /* setReparentLeafTaskIfRelaunch */);
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, true);
|
wct.setForceTranslucent(mRootTaskInfo.token, true);
|
||||||
// Both stages are not visible, check if it needs to dismiss split screen.
|
|
||||||
if (mExitSplitScreenOnHide) {
|
|
||||||
exitSplitScreen(null /* childrenToTop */, EXIT_REASON_RETURN_HOME);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
||||||
false /* setReparentLeafTaskIfRelaunch */);
|
false /* setReparentLeafTaskIfRelaunch */);
|
||||||
wct.setForceTranslucent(mRootTaskInfo.token, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mSyncQueue.queue(wct);
|
mSyncQueue.queue(wct);
|
||||||
mSyncQueue.runInSync(t -> {
|
mSyncQueue.runInSync(t -> {
|
||||||
setDividerVisibility(mainStageVisible, t);
|
setDividerVisibility(mainStageVisible, t);
|
||||||
|
|||||||
Reference in New Issue
Block a user