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

Commit 44eb8b77 authored by Alan Viverette's avatar Alan Viverette
Browse files

Revert "When keyguard exits use same anim for all windows"

Broke window animations.

This reverts commit b8340801.

BUG: 18248641
Change-Id: Ic456a5666c3199e8bb8c9c2fb1ecdbb82afaad86
parent a446195b
Loading
Loading
Loading
Loading
+15 −11
Original line number Diff line number Diff line
@@ -116,7 +116,6 @@ import java.io.FileReader;
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,20 +2299,25 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            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);
        }

            set.getAnimations().get(0).setInterpolator(mLogDecelerateInterpolator);
            return set;
        }
    }


    @Override
+60 −78
Original line number Diff line number Diff line
@@ -91,9 +91,6 @@ public class WindowAnimator {
    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 @@ public class WindowAnimator {
        ++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 @@ public class WindowAnimator {
        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,45 +327,31 @@ public class WindowAnimator {
                } 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) {
                        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<>();
                                    unForceHiding = new ArrayList<WindowStateAnimator>();
                                }
                                unForceHiding.add(winAnimator);
                                if ((flags & FLAG_SHOW_WALLPAPER) != 0) {
                                    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;
                            if (currentFocus == null || currentFocus.mLayer < win.mLayer) {
                            // We are showing on top of the current
                                // 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,
@@ -376,7 +359,8 @@ public class WindowAnimator {
                                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,33 +403,29 @@ public class WindowAnimator {
        // 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");
            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: created anim for windows");
                mPostKeyguardExitAnimation = mPolicy.createForceHideEnterAnimation(
                        wallpaperInUnForceHiding, mKeyguardGoingAwayToNotificationShade);
                    if (DEBUG_KEYGUARD) Slog.d(TAG, "updateWindowsLocked: skipping anim for win="
                            + unForceHiding.get(i));
                }
            if (mPostKeyguardExitAnimation != null) {
                for (int i=unForceHiding.size()-1; i>=0; i--) {
                if (a != null) {
                    final WindowStateAnimator winAnimator = unForceHiding.get(i);
                    winAnimator.setAnimation(mPostKeyguardExitAnimation);
                    winAnimator.setAnimation(a);
                    winAnimator.keyguardGoingAwayAnimation = true;
                }
            }
        }

        if (mPostKeyguardExitAnimation != null) {
            // We're in the midst of a keyguard exit animation.
            if (mKeyguardGoingAway) {
                mPolicy.startKeyguardExitAnimation(mCurrentTime +
                        mPostKeyguardExitAnimation.getStartOffset(),
                        mPostKeyguardExitAnimation.getDuration());
                    if (startKeyguardExit && mKeyguardGoingAway) {
                        // Do one time only.
                        mPolicy.startKeyguardExitAnimation(mCurrentTime + a.getStartOffset(),
                                a.getDuration());
                        mKeyguardGoingAway = false;
            } else if (mPostKeyguardExitAnimation.hasEnded()) {
                // Done with the animation, reset.
                mPostKeyguardExitAnimation = null;
                        startKeyguardExit = false;
                    }
                }
            }

@@ -456,7 +436,9 @@ public class WindowAnimator {
                Animation a = mPolicy.createForceHideWallpaperExitAnimation(
                        mKeyguardGoingAwayToNotificationShade);
                if (a != null) {
                wallpaper.mWinAnimator.setAnimation(a);
                    WindowStateAnimator animator = wallpaper.mWinAnimator;
                    animator.setAnimation(a);
                }
            }
        }
    }