am 44eb8b77: Revert "When keyguard exits use same anim for all windows"
* commit '44eb8b772984164666195ea71c685292b234549a':
Revert "When keyguard exits use same anim for all windows"
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index b516f00..792712f 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -116,7 +116,6 @@
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashSet;
-import java.util.List;
import static android.view.WindowManager.LayoutParams.*;
import static android.view.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT;
@@ -2300,19 +2299,24 @@
boolean goingToNotificationShade) {
if (goingToNotificationShade) {
return AnimationUtils.loadAnimation(mContext, R.anim.lock_screen_behind_enter_fade_in);
- }
+ } else if (onWallpaper) {
+ Animation a = AnimationUtils.loadAnimation(mContext,
+ R.anim.lock_screen_behind_enter_wallpaper);
+ AnimationSet set = (AnimationSet) a;
- AnimationSet set = (AnimationSet) AnimationUtils.loadAnimation(mContext, onWallpaper ?
- R.anim.lock_screen_behind_enter_wallpaper :
+ // TODO: Use XML interpolators when we have log interpolators available in XML.
+ set.getAnimations().get(0).setInterpolator(mLogDecelerateInterpolator);
+ set.getAnimations().get(1).setInterpolator(mLogDecelerateInterpolator);
+ return set;
+ } else {
+ Animation a = AnimationUtils.loadAnimation(mContext,
R.anim.lock_screen_behind_enter);
+ AnimationSet set = (AnimationSet) a;
- // TODO: Use XML interpolators when we have log interpolators available in XML.
- final List<Animation> animations = set.getAnimations();
- for (int i = animations.size() - 1; i >= 0; --i) {
- animations.get(i).setInterpolator(mLogDecelerateInterpolator);
+ // TODO: Use XML interpolators when we have log interpolators available in XML.
+ set.getAnimations().get(0).setInterpolator(mLogDecelerateInterpolator);
+ return set;
}
-
- return set;
}
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index 8d93141..61ea1e8 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -91,9 +91,6 @@
boolean mKeyguardGoingAwayToNotificationShade;
boolean mKeyguardGoingAwayDisableWindowAnimations;
- /** Use one animation for all entering activities after keyguard is dismissed. */
- Animation mPostKeyguardExitAnimation;
-
// forceHiding states.
static final int KEYGUARD_NOT_SHOWN = 0;
static final int KEYGUARD_ANIMATING_IN = 1;
@@ -223,6 +220,9 @@
++mAnimTransactionSequence;
final WindowList windows = mService.getWindowListLocked(displayId);
+ ArrayList<WindowStateAnimator> unForceHiding = null;
+ boolean wallpaperInUnForceHiding = false;
+ WindowState wallpaper = null;
if (mKeyguardGoingAway) {
for (int i = windows.size() - 1; i >= 0; i--) {
@@ -261,9 +261,6 @@
final AppWindowToken appShowWhenLocked = winShowWhenLocked == null ?
null : winShowWhenLocked.mAppToken;
- boolean wallpaperInUnForceHiding = false;
- ArrayList<WindowStateAnimator> unForceHiding = null;
- WindowState wallpaper = null;
for (int i = windows.size() - 1; i >= 0; i--) {
WindowState win = windows.get(i);
WindowStateAnimator winAnimator = win.mWinAnimator;
@@ -330,53 +327,40 @@
} else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
final boolean hideWhenLocked = !((win.mIsImWindow && showImeOverKeyguard) ||
(appShowWhenLocked != null && appShowWhenLocked == win.mAppToken));
+ final boolean changed;
if (((mForceHiding == KEYGUARD_ANIMATING_IN)
&& (!winAnimator.isAnimating() || hideWhenLocked))
|| ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
- if (!win.hideLw(false, false)) {
- // Was already hidden
- continue;
- }
- if (DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
- "Now policy hidden: " + win);
+ changed = win.hideLw(false, false);
+ if ((DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY)
+ && changed) Slog.v(TAG, "Now policy hidden: " + win);
} else {
- if (!win.showLw(false, false)) {
- // Was already showing.
- continue;
- }
- final boolean visibleNow = win.isVisibleNow();
- if (!visibleNow) {
- // Couldn't really show, must showLw() again when win becomes visible.
- win.hideLw(false, false);
- continue;
- }
- if (DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
- "Now policy shown: " + win);
- if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0) {
- if (unForceHiding == null) {
- unForceHiding = new ArrayList<>();
+ changed = win.showLw(false, false);
+ if ((DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY)
+ && changed) Slog.v(TAG, "Now policy shown: " + win);
+ if (changed) {
+ if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0
+ && win.isVisibleNow() /*w.isReadyForDisplay()*/) {
+ if (unForceHiding == null) {
+ unForceHiding = new ArrayList<WindowStateAnimator>();
+ }
+ unForceHiding.add(winAnimator);
+ if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
+ wallpaperInUnForceHiding = true;
+ }
}
- unForceHiding.add(winAnimator);
- if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
- wallpaperInUnForceHiding = true;
+ final WindowState currentFocus = mService.mCurrentFocus;
+ if (currentFocus == null || currentFocus.mLayer < win.mLayer) {
+ // We are showing on to of the current
+ // focus, so re-evaluate focus to make
+ // sure it is correct.
+ if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.v(TAG,
+ "updateWindowsLocked: setting mFocusMayChange true");
+ mService.mFocusMayChange = true;
}
- } else if (mPostKeyguardExitAnimation != null) {
- // We're already in the middle of an animation. Use the existing
- // animation to bring in this window.
- winAnimator.setAnimation(mPostKeyguardExitAnimation);
- winAnimator.keyguardGoingAwayAnimation = true;
- }
- final WindowState currentFocus = mService.mCurrentFocus;
- if (currentFocus == null || currentFocus.mLayer < win.mLayer) {
- // We are showing on top of the current
- // focus, so re-evaluate focus to make
- // sure it is correct.
- if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.v(TAG,
- "updateWindowsLocked: setting mFocusMayChange true");
- mService.mFocusMayChange = true;
}
}
- if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
+ if (changed && (flags & FLAG_SHOW_WALLPAPER) != 0) {
mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
setPendingLayoutChanges(Display.DEFAULT_DISPLAY,
WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
@@ -419,44 +403,42 @@
// If we have windows that are being show due to them no longer
// being force-hidden, apply the appropriate animation to them.
if (unForceHiding != null) {
- // This only happens the first time that we detect the keyguard is animating out.
- if (mKeyguardGoingAwayDisableWindowAnimations) {
- if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: skipping anim for windows");
- } else {
- if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: created anim for windows");
- mPostKeyguardExitAnimation = mPolicy.createForceHideEnterAnimation(
- wallpaperInUnForceHiding, mKeyguardGoingAwayToNotificationShade);
- }
- if (mPostKeyguardExitAnimation != null) {
- for (int i=unForceHiding.size()-1; i>=0; i--) {
+ boolean startKeyguardExit = true;
+ for (int i=unForceHiding.size()-1; i>=0; i--) {
+ Animation a = null;
+ if (!mKeyguardGoingAwayDisableWindowAnimations) {
+ a = mPolicy.createForceHideEnterAnimation(wallpaperInUnForceHiding,
+ mKeyguardGoingAwayToNotificationShade);
+ if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: created anim=" + a
+ + " for win=" + unForceHiding.get(i));
+ } else {
+ if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: skipping anim for win="
+ + unForceHiding.get(i));
+ }
+ if (a != null) {
final WindowStateAnimator winAnimator = unForceHiding.get(i);
- winAnimator.setAnimation(mPostKeyguardExitAnimation);
+ winAnimator.setAnimation(a);
winAnimator.keyguardGoingAwayAnimation = true;
+ if (startKeyguardExit && mKeyguardGoingAway) {
+ // Do one time only.
+ mPolicy.startKeyguardExitAnimation(mCurrentTime + a.getStartOffset(),
+ a.getDuration());
+ mKeyguardGoingAway = false;
+ startKeyguardExit = false;
+ }
}
}
- }
- if (mPostKeyguardExitAnimation != null) {
- // We're in the midst of a keyguard exit animation.
- if (mKeyguardGoingAway) {
- mPolicy.startKeyguardExitAnimation(mCurrentTime +
- mPostKeyguardExitAnimation.getStartOffset(),
- mPostKeyguardExitAnimation.getDuration());
- mKeyguardGoingAway = false;
- } else if (mPostKeyguardExitAnimation.hasEnded()) {
- // Done with the animation, reset.
- mPostKeyguardExitAnimation = null;
- }
- }
-
- // Wallpaper is going away in un-force-hide motion, animate it as well.
- if (!wallpaperInUnForceHiding && wallpaper != null
- && !mKeyguardGoingAwayDisableWindowAnimations) {
- if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: wallpaper animating away");
- Animation a = mPolicy.createForceHideWallpaperExitAnimation(
- mKeyguardGoingAwayToNotificationShade);
- if (a != null) {
- wallpaper.mWinAnimator.setAnimation(a);
+ // Wallpaper is going away in un-force-hide motion, animate it as well.
+ if (!wallpaperInUnForceHiding && wallpaper != null
+ && !mKeyguardGoingAwayDisableWindowAnimations) {
+ if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: wallpaper animating away");
+ Animation a = mPolicy.createForceHideWallpaperExitAnimation(
+ mKeyguardGoingAwayToNotificationShade);
+ if (a != null) {
+ WindowStateAnimator animator = wallpaper.mWinAnimator;
+ animator.setAnimation(a);
+ }
}
}
}