Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26a733ce authored by Craig Mautner's avatar Craig Mautner Committed by Android (Google) Code Review
Browse files

Merge "When keyguard exits use same anim for all windows" into lmp-mr1-dev

parents 8585e0dd b8340801
Loading
Loading
Loading
Loading
+11 −15
Original line number Original line Diff line number Diff line
@@ -116,6 +116,7 @@ import java.io.FileReader;
import java.io.IOException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;


import static android.view.WindowManager.LayoutParams.*;
import static android.view.WindowManager.LayoutParams.*;
import static android.view.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT;
import static android.view.WindowManagerPolicy.WindowManagerFuncs.LID_ABSENT;
@@ -2299,24 +2300,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            boolean goingToNotificationShade) {
            boolean goingToNotificationShade) {
        if (goingToNotificationShade) {
        if (goingToNotificationShade) {
            return AnimationUtils.loadAnimation(mContext, R.anim.lock_screen_behind_enter_fade_in);
            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;


            // TODO: Use XML interpolators when we have log interpolators available in XML.
        AnimationSet set = (AnimationSet) AnimationUtils.loadAnimation(mContext, onWallpaper ?
            set.getAnimations().get(0).setInterpolator(mLogDecelerateInterpolator);
                    R.anim.lock_screen_behind_enter_wallpaper :
            set.getAnimations().get(1).setInterpolator(mLogDecelerateInterpolator);
            return set;
        } else {
            Animation a = AnimationUtils.loadAnimation(mContext,
                    R.anim.lock_screen_behind_enter);
                    R.anim.lock_screen_behind_enter);
            AnimationSet set = (AnimationSet) a;


        // TODO: Use XML interpolators when we have log interpolators available in XML.
        // TODO: Use XML interpolators when we have log interpolators available in XML.
            set.getAnimations().get(0).setInterpolator(mLogDecelerateInterpolator);
        final List<Animation> animations = set.getAnimations();
            return set;
        for (int i = animations.size() - 1; i >= 0; --i) {
            animations.get(i).setInterpolator(mLogDecelerateInterpolator);
        }
        }

        return set;
    }
    }




+78 −60
Original line number Original line Diff line number Diff line
@@ -91,6 +91,9 @@ public class WindowAnimator {
    boolean mKeyguardGoingAwayToNotificationShade;
    boolean mKeyguardGoingAwayToNotificationShade;
    boolean mKeyguardGoingAwayDisableWindowAnimations;
    boolean mKeyguardGoingAwayDisableWindowAnimations;


    /** Use one animation for all entering activities after keyguard is dismissed. */
    Animation mPostKeyguardExitAnimation;

    // forceHiding states.
    // forceHiding states.
    static final int KEYGUARD_NOT_SHOWN     = 0;
    static final int KEYGUARD_NOT_SHOWN     = 0;
    static final int KEYGUARD_ANIMATING_IN  = 1;
    static final int KEYGUARD_ANIMATING_IN  = 1;
@@ -220,9 +223,6 @@ public class WindowAnimator {
        ++mAnimTransactionSequence;
        ++mAnimTransactionSequence;


        final WindowList windows = mService.getWindowListLocked(displayId);
        final WindowList windows = mService.getWindowListLocked(displayId);
        ArrayList<WindowStateAnimator> unForceHiding = null;
        boolean wallpaperInUnForceHiding = false;
        WindowState wallpaper = null;


        if (mKeyguardGoingAway) {
        if (mKeyguardGoingAway) {
            for (int i = windows.size() - 1; i >= 0; i--) {
            for (int i = windows.size() - 1; i >= 0; i--) {
@@ -261,6 +261,9 @@ public class WindowAnimator {
        final AppWindowToken appShowWhenLocked = winShowWhenLocked == null ?
        final AppWindowToken appShowWhenLocked = winShowWhenLocked == null ?
                null : winShowWhenLocked.mAppToken;
                null : winShowWhenLocked.mAppToken;


        boolean wallpaperInUnForceHiding = false;
        ArrayList<WindowStateAnimator> unForceHiding = null;
        WindowState wallpaper = null;
        for (int i = windows.size() - 1; i >= 0; i--) {
        for (int i = windows.size() - 1; i >= 0; i--) {
            WindowState win = windows.get(i);
            WindowState win = windows.get(i);
            WindowStateAnimator winAnimator = win.mWinAnimator;
            WindowStateAnimator winAnimator = win.mWinAnimator;
@@ -327,31 +330,45 @@ public class WindowAnimator {
                } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
                } else if (mPolicy.canBeForceHidden(win, win.mAttrs)) {
                    final boolean hideWhenLocked = !((win.mIsImWindow && showImeOverKeyguard) ||
                    final boolean hideWhenLocked = !((win.mIsImWindow && showImeOverKeyguard) ||
                            (appShowWhenLocked != null && appShowWhenLocked == win.mAppToken));
                            (appShowWhenLocked != null && appShowWhenLocked == win.mAppToken));
                    final boolean changed;
                    if (((mForceHiding == KEYGUARD_ANIMATING_IN)
                    if (((mForceHiding == KEYGUARD_ANIMATING_IN)
                                && (!winAnimator.isAnimating() || hideWhenLocked))
                                && (!winAnimator.isAnimating() || hideWhenLocked))
                            || ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
                            || ((mForceHiding == KEYGUARD_SHOWN) && hideWhenLocked)) {
                        changed = win.hideLw(false, false);
                        if (!win.hideLw(false, false)) {
                        if ((DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY)
                            // Was already hidden
                                && changed) Slog.v(TAG, "Now policy hidden: " + win);
                            continue;
                        }
                        if (DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG,
                                "Now policy hidden: " + win);
                    } else {
                    } else {
                        changed = win.showLw(false, false);
                        if (!win.showLw(false, false)) {
                        if ((DEBUG_KEYGUARD || WindowManagerService.DEBUG_VISIBILITY)
                            // Was already showing.
                                && changed) Slog.v(TAG, "Now policy shown: " + win);
                            continue;
                        if (changed) {
                        }
                            if ((mBulkUpdateParams & SET_FORCE_HIDING_CHANGED) != 0
                        final boolean visibleNow = win.isVisibleNow();
                                    && win.isVisibleNow() /*w.isReadyForDisplay()*/) {
                        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) {
                            if (unForceHiding == null) {
                                    unForceHiding = new ArrayList<WindowStateAnimator>();
                                unForceHiding = new ArrayList<>();
                            }
                            }
                            unForceHiding.add(winAnimator);
                            unForceHiding.add(winAnimator);
                            if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
                            if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
                                wallpaperInUnForceHiding = true;
                                wallpaperInUnForceHiding = 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;
                        final WindowState currentFocus = mService.mCurrentFocus;
                        if (currentFocus == null || currentFocus.mLayer < win.mLayer) {
                        if (currentFocus == null || currentFocus.mLayer < win.mLayer) {
                                // We are showing on to of the current
                            // We are showing on top of the current
                            // focus, so re-evaluate focus to make
                            // focus, so re-evaluate focus to make
                            // sure it is correct.
                            // sure it is correct.
                            if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.v(TAG,
                            if (WindowManagerService.DEBUG_FOCUS_LIGHT) Slog.v(TAG,
@@ -359,8 +376,7 @@ public class WindowAnimator {
                            mService.mFocusMayChange = true;
                            mService.mFocusMayChange = true;
                        }
                        }
                    }
                    }
                    }
                    if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
                    if (changed && (flags & FLAG_SHOW_WALLPAPER) != 0) {
                        mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
                        mBulkUpdateParams |= SET_WALLPAPER_MAY_CHANGE;
                        setPendingLayoutChanges(Display.DEFAULT_DISPLAY,
                        setPendingLayoutChanges(Display.DEFAULT_DISPLAY,
                                WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
                                WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER);
@@ -403,32 +419,36 @@ public class WindowAnimator {
        // If we have windows that are being show due to them no longer
        // If we have windows that are being show due to them no longer
        // being force-hidden, apply the appropriate animation to them.
        // being force-hidden, apply the appropriate animation to them.
        if (unForceHiding != null) {
        if (unForceHiding != null) {
            boolean startKeyguardExit = true;
            // This only happens the first time that we detect the keyguard is animating out.
            for (int i=unForceHiding.size()-1; i>=0; i--) {
            if (mKeyguardGoingAwayDisableWindowAnimations) {
                Animation a = null;
                if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: skipping anim for windows");
                if (!mKeyguardGoingAwayDisableWindowAnimations) {
                    a = mPolicy.createForceHideEnterAnimation(wallpaperInUnForceHiding,
                            mKeyguardGoingAwayToNotificationShade);
                    if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: created anim=" + a
                            + " for win=" + unForceHiding.get(i));
            } else {
            } else {
                    if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: skipping anim for win="
                if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: created anim for windows");
                            + unForceHiding.get(i));
                mPostKeyguardExitAnimation = mPolicy.createForceHideEnterAnimation(
                        wallpaperInUnForceHiding, mKeyguardGoingAwayToNotificationShade);
            }
            }
                if (a != null) {
            if (mPostKeyguardExitAnimation != null) {
                for (int i=unForceHiding.size()-1; i>=0; i--) {
                    final WindowStateAnimator winAnimator = unForceHiding.get(i);
                    final WindowStateAnimator winAnimator = unForceHiding.get(i);
                    winAnimator.setAnimation(a);
                    winAnimator.setAnimation(mPostKeyguardExitAnimation);
                    winAnimator.keyguardGoingAwayAnimation = true;
                    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.
        // Wallpaper is going away in un-force-hide motion, animate it as well.
        if (!wallpaperInUnForceHiding && wallpaper != null
        if (!wallpaperInUnForceHiding && wallpaper != null
                && !mKeyguardGoingAwayDisableWindowAnimations) {
                && !mKeyguardGoingAwayDisableWindowAnimations) {
@@ -436,9 +456,7 @@ public class WindowAnimator {
            Animation a = mPolicy.createForceHideWallpaperExitAnimation(
            Animation a = mPolicy.createForceHideWallpaperExitAnimation(
                    mKeyguardGoingAwayToNotificationShade);
                    mKeyguardGoingAwayToNotificationShade);
            if (a != null) {
            if (a != null) {
                    WindowStateAnimator animator = wallpaper.mWinAnimator;
                wallpaper.mWinAnimator.setAnimation(a);
                    animator.setAnimation(a);
                }
            }
            }
        }
        }
    }
    }