private int mTransit;
private int mTransitFlags;
- /** WindowStateAnimator from mAppAnimator.allAppWindows as of last performLayout */
- ArrayList<WindowStateAnimator> mAllAppWinAnimators = new ArrayList<>();
-
/** True if the current animation was transferred from another AppWindowAnimator.
* See {@link #transferCurrentAnimation}*/
boolean usingTransferredAnimation = false;
toAppAnimator.mTransit = mTransit;
}
if (transferWinAnimator != null) {
- mAllAppWinAnimators.remove(transferWinAnimator);
- toAppAnimator.mAllAppWinAnimators.add(transferWinAnimator);
toAppAnimator.hasTransformation = transferWinAnimator.mAppAnimator.hasTransformation;
if (toAppAnimator.hasTransformation) {
toAppAnimator.transformation.set(transferWinAnimator.mAppAnimator.transformation);
transformation.clear();
- final int numAllAppWinAnimators = mAllAppWinAnimators.size();
- for (int i = 0; i < numAllAppWinAnimators; i++) {
- mAllAppWinAnimators.get(i).mWin.onExitAnimationDone();
- }
+ mAppToken.forAllWindows(WindowState::onExitAnimationDone, false /* traverseTopToBottom */);
mService.mAppTransition.notifyAppTransitionFinishedLocked(mAppToken.token);
return false;
}
// This must be called while inside a transaction.
- boolean showAllWindowsLocked() {
- boolean isAnimating = false;
- final int NW = mAllAppWinAnimators.size();
- for (int i=0; i<NW; i++) {
- WindowStateAnimator winAnimator = mAllAppWinAnimators.get(i);
- if (DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + winAnimator);
- winAnimator.mWin.performShowLocked();
- isAnimating |= winAnimator.isAnimationSet();
- }
- return isAnimating;
+ void showAllWindowsLocked() {
+ mAppToken.forAllWindows(windowState -> {
+ if (DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + windowState);
+ windowState.performShowLocked();
+ }, false /* traverseTopToBottom */);
}
void dump(PrintWriter pw, String prefix) {
pw.print(prefix); pw.print("thumbnailTransformation=");
pw.println(thumbnailTransformation.toShortString());
}
- for (int i=0; i<mAllAppWinAnimators.size(); i++) {
- WindowStateAnimator wanim = mAllAppWinAnimators.get(i);
- pw.print(prefix); pw.print("App Win Anim #"); pw.print(i);
- pw.print(": "); pw.println(wanim);
- }
}
void startProlongAnimation(int prolongType) {
return mChildren.size() == 1 && mChildren.get(0) == win;
}
- void setAllAppWinAnimators() {
- final ArrayList<WindowStateAnimator> allAppWinAnimators = mAppAnimator.mAllAppWinAnimators;
- allAppWinAnimators.clear();
-
- final int windowsCount = mChildren.size();
- for (int j = 0; j < windowsCount; j++) {
- (mChildren.get(j)).addWinAnimatorToList(allAppWinAnimators);
- }
- }
-
@Override
void onAppTransitionDone() {
sendingToBottom = false;
// We can now show all of the drawn windows!
if (!mService.mOpeningApps.contains(this)) {
- mService.mAnimator.orAnimating(mAppAnimator.showAllWindowsLocked());
+ mAppAnimator.showAllWindowsLocked();
}
}
}
}
wtoken.updateReportedVisibilityLocked();
wtoken.waitingToShow = false;
- wtoken.setAllAppWinAnimators();
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
">>> OPEN TRANSACTION handleAppTransitionReadyLocked()");
mService.openSurfaceTransaction();
try {
- mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked());
+ appAnimator.showAllWindowsLocked();
} finally {
mService.closeSurfaceTransaction("handleAppTransitionReadyLocked");
if (SHOW_LIGHT_TRANSACTIONS) Slog.i(TAG,
appAnimator.setNullAnimation();
// TODO: Do we need to add to mNoAnimationNotifyOnTransitionFinished like above if not
// animating?
- wtoken.setAllAppWinAnimators();
wtoken.setVisibility(animLp, false, transit, false, voiceInteraction);
wtoken.updateReportedVisibilityLocked();
- // setAllAppWinAnimators so the windows get onExitAnimationDone once the animation is
- // done.
- wtoken.setAllAppWinAnimators();
// Force the allDrawn flag, because we want to start
// this guy's animations regardless of whether it's
// gotten drawn.
appAnimator.setNullAnimation();
mService.updateTokenInPlaceLocked(wtoken, transit);
wtoken.updateReportedVisibilityLocked();
- wtoken.setAllAppWinAnimators();
mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating();
- mService.mAnimator.orAnimating(appAnimator.showAllWindowsLocked());
+ appAnimator.showAllWindowsLocked();
}
}
}