diff options
| author | 2012-12-26 11:56:30 -0800 | |
|---|---|---|
| committer | 2012-12-26 11:56:30 -0800 | |
| commit | 273fa2708a208155fedcf22161d2dfd4ab1ec6df (patch) | |
| tree | 95a80edcc2458fb908c62da3ca7fc20658b4a574 | |
| parent | c30f45b97f0aeefef05f51208f54eafa3499e40b (diff) | |
| parent | 72669d18016446d874e4fa1005464e36375124e4 (diff) | |
Merge "Fixes to clean up icon launching during animations."
4 files changed, 33 insertions, 22 deletions
diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index 34513a188410..ad683078747d 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -58,9 +58,9 @@ public class AppWindowAnimator { } public void setAnimation(Animation anim, int width, int height) { - if (WindowManagerService.localLOGV) Slog.v( - TAG, "Setting animation in " + mAppToken + ": " + anim - + " wxh=" + width + "x" + height); + if (WindowManagerService.localLOGV) Slog.v(TAG, "Setting animation in " + mAppToken + + ": " + anim + " wxh=" + width + "x" + height + + " isVisible=" + mAppToken.isVisible()); animation = anim; animating = false; if (!anim.isInitialized()) { @@ -82,16 +82,17 @@ public class AppWindowAnimator { } // Start out animation gone if window is gone, or visible if window is visible. transformation.clear(); - transformation.setAlpha(mAppToken.reportedVisible ? 1 : 0); + transformation.setAlpha(mAppToken.isVisible() ? 1 : 0); hasTransformation = true; } public void setDummyAnimation() { - if (WindowManagerService.localLOGV) Slog.v(TAG, "Setting dummy animation in " + mAppToken); + if (WindowManagerService.localLOGV) Slog.v(TAG, "Setting dummy animation in " + mAppToken + + " isVisible=" + mAppToken.isVisible()); animation = sDummyAnimation; hasTransformation = true; transformation.clear(); - transformation.setAlpha(mAppToken.reportedVisible ? 1 : 0); + transformation.setAlpha(mAppToken.isVisible() ? 1 : 0); } public void clearAnimation() { diff --git a/services/java/com/android/server/wm/AppWindowToken.java b/services/java/com/android/server/wm/AppWindowToken.java index 275c9bf311dc..adad09d8f07e 100644 --- a/services/java/com/android/server/wm/AppWindowToken.java +++ b/services/java/com/android/server/wm/AppWindowToken.java @@ -223,6 +223,22 @@ class AppWindowToken extends WindowToken { return null; } + boolean isVisible() { + final int N = allAppWindows.size(); + // TODO: Consider using allDrawn instead of a single window. + for (int i=0; i<N; i++) { + WindowState win = allAppWindows.get(i); + if (!win.mAppFreezing + && (win.mViewVisibility == View.VISIBLE || + (win.mWinAnimator.isAnimating() && + !service.mAppTransition.isTransitionSet())) + && !win.mDestroying && win.isDrawnLw()) { + return true; + } + } + return false; + } + @Override void dump(PrintWriter pw, String prefix) { super.dump(pw, prefix); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3e506145b4e0..c67a4656047e 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -4476,8 +4476,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_TOKEN_MOVEMENT || DEBUG_REORDER) Slog.v(TAG, "Start moving token " + wtoken + " initially at " + oldIndex); - if (oldIndex > index && mAppTransition.isTransitionSet() - && !mAppTransition.isRunning()) { + if (oldIndex > index && mAppTransition.isTransitionSet()) { // animation towards back has not started, copy old list for duration of animation. mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); @@ -4491,7 +4490,7 @@ public class WindowManagerService extends IWindowManager.Stub if (DEBUG_REORDER) Slog.v(TAG, "Moved " + token + " to " + index + ":"); else if (DEBUG_TOKEN_MOVEMENT) Slog.v(TAG, "Moved " + token + " to " + index); if (DEBUG_REORDER) dumpAppTokensLocked(); - if (!mAppTransition.isTransitionSet() && !mAppTransition.isRunning()) { + if (!mAppTransition.isTransitionSet()) { // Not animating, bring animating app list in line with mAppTokens. mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); @@ -4612,11 +4611,9 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (!mAppTransition.isRunning()) { - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - moveAppWindowsLocked(tokens, mAppTokens.size()); - } + mAnimatingAppTokens.clear(); + mAnimatingAppTokens.addAll(mAppTokens); + moveAppWindowsLocked(tokens, mAppTokens.size()); } Binder.restoreCallingIdentity(origId); } @@ -4631,7 +4628,7 @@ public class WindowManagerService extends IWindowManager.Stub final long origId = Binder.clearCallingIdentity(); synchronized(mWindowMap) { final int N = tokens.size(); - if (N > 0 && !mAppTransition.isRunning()) { + if (N > 0) { // animating towards back, hang onto old list for duration of animation. mAnimatingAppTokens.clear(); mAnimatingAppTokens.addAll(mAppTokens); @@ -4651,11 +4648,9 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (!mAppTransition.isRunning()) { - mAnimatingAppTokens.clear(); - mAnimatingAppTokens.addAll(mAppTokens); - moveAppWindowsLocked(tokens, 0); - } + mAnimatingAppTokens.clear(); + mAnimatingAppTokens.addAll(mAppTokens); + moveAppWindowsLocked(tokens, 0); } Binder.restoreCallingIdentity(origId); } @@ -7949,7 +7944,6 @@ public class WindowManagerService extends IWindowManager.Stub final AppWindowAnimator appAnimator = wtoken.mAppAnimator; if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken); appAnimator.clearThumbnail(); - wtoken.reportedVisible = false; wtoken.inPendingTransaction = false; appAnimator.animation = null; setTokenVisibilityLocked(wtoken, animLp, true, transit, false); diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 9acdd49f15d3..5b7cb99d5bdf 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -1223,7 +1223,7 @@ class WindowStateAnimator { if (mIsWallpaper && !mWin.mWallpaperVisible) { // Wallpaper is no longer visible and there is no wp target => hide it. hide(); - } else if (w.mAttachedHidden || !w.isReadyForDisplay()) { + } else if (w.mAttachedHidden || !w.isOnScreen()) { hide(); mAnimator.hideWallpapersLocked(w); |