Merge "Make sure to release split layout when returning to home" into tm-dev
This commit is contained in:
@@ -231,6 +231,26 @@ class SplitScreenTransitions {
|
|||||||
|
|
||||||
void onFinish(WindowContainerTransaction wct, WindowContainerTransactionCallback wctCB) {
|
void onFinish(WindowContainerTransaction wct, WindowContainerTransactionCallback wctCB) {
|
||||||
if (!mAnimations.isEmpty()) return;
|
if (!mAnimations.isEmpty()) return;
|
||||||
|
if (mAnimatingTransition == mPendingEnter) {
|
||||||
|
mPendingEnter = null;
|
||||||
|
}
|
||||||
|
if (mPendingDismiss != null && mPendingDismiss.mTransition == mAnimatingTransition) {
|
||||||
|
mPendingDismiss = null;
|
||||||
|
}
|
||||||
|
if (mAnimatingTransition == mPendingRecent) {
|
||||||
|
// If the clean-up wct is null when finishing recent transition, it indicates it's
|
||||||
|
// returning to home and thus no need to reorder tasks.
|
||||||
|
final boolean returnToHome = wct == null;
|
||||||
|
if (returnToHome) {
|
||||||
|
wct = new WindowContainerTransaction();
|
||||||
|
}
|
||||||
|
mStageCoordinator.onRecentTransitionFinished(returnToHome, wct, mFinishTransaction);
|
||||||
|
mPendingRecent = null;
|
||||||
|
}
|
||||||
|
mPendingRemoteHandler = null;
|
||||||
|
mActiveRemoteHandler = null;
|
||||||
|
mAnimatingTransition = null;
|
||||||
|
|
||||||
mOnFinish.run();
|
mOnFinish.run();
|
||||||
if (mFinishTransaction != null) {
|
if (mFinishTransaction != null) {
|
||||||
mFinishTransaction.apply();
|
mFinishTransaction.apply();
|
||||||
@@ -241,22 +261,6 @@ class SplitScreenTransitions {
|
|||||||
mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
|
mFinishCallback.onTransitionFinished(wct /* wct */, wctCB /* wctCB */);
|
||||||
mFinishCallback = null;
|
mFinishCallback = null;
|
||||||
}
|
}
|
||||||
if (mAnimatingTransition == mPendingEnter) {
|
|
||||||
mPendingEnter = null;
|
|
||||||
}
|
|
||||||
if (mPendingDismiss != null && mPendingDismiss.mTransition == mAnimatingTransition) {
|
|
||||||
mPendingDismiss = null;
|
|
||||||
}
|
|
||||||
if (mAnimatingTransition == mPendingRecent) {
|
|
||||||
// If the wct is not null while finishing recent transition, it indicates it's not
|
|
||||||
// dismissing split and thus need to reorder split task so they can be on top again.
|
|
||||||
final boolean dismissSplit = wct == null;
|
|
||||||
mStageCoordinator.finishRecentAnimation(dismissSplit);
|
|
||||||
mPendingRecent = null;
|
|
||||||
}
|
|
||||||
mPendingRemoteHandler = null;
|
|
||||||
mActiveRemoteHandler = null;
|
|
||||||
mAnimatingTransition = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(shell-transitions): real animations
|
// TODO(shell-transitions): real animations
|
||||||
|
|||||||
@@ -1568,8 +1568,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
logExit(dismissTransition.mReason);
|
logExit(dismissTransition.mReason);
|
||||||
// TODO: Have a proper remote for this. Until then, though, reset state and use the
|
// TODO: Have a proper remote for this. Until then, though, reset state and use the
|
||||||
// normal animation stuff (which falls back to the normal launcher remote).
|
// normal animation stuff (which falls back to the normal launcher remote).
|
||||||
setDividerVisibility(false, t);
|
mSplitLayout.release(t);
|
||||||
mSplitLayout.release();
|
|
||||||
mSplitTransitions.mPendingDismiss = null;
|
mSplitTransitions.mPendingDismiss = null;
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@@ -1595,7 +1594,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void finishRecentAnimation(boolean dismissSplit) {
|
void onRecentTransitionFinished(boolean returnToHome, WindowContainerTransaction wct,
|
||||||
|
SurfaceControl.Transaction finishT) {
|
||||||
// Exclude the case that the split screen has been dismissed already.
|
// Exclude the case that the split screen has been dismissed already.
|
||||||
if (!mMainStage.isActive()) {
|
if (!mMainStage.isActive()) {
|
||||||
// The latest split dismissing transition might be a no-op transition and thus won't
|
// The latest split dismissing transition might be a no-op transition and thus won't
|
||||||
@@ -1605,13 +1605,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dismissSplit) {
|
if (returnToHome) {
|
||||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
// When returning to home from recent apps, the splitting tasks are already hidden, so
|
||||||
|
// append the reset of dismissing operations into the clean-up wct.
|
||||||
prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
|
prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, wct);
|
||||||
mSplitTransitions.startDismissTransition(null /* transition */, wct, this,
|
setSplitsVisible(false);
|
||||||
STAGE_TYPE_UNDEFINED, EXIT_REASON_RETURN_HOME);
|
logExit(EXIT_REASON_RETURN_HOME);
|
||||||
} else {
|
} else {
|
||||||
setDividerVisibility(true, null /* t */);
|
setDividerVisibility(true, finishT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user