diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/AppTransition.java | 5 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowSurfacePlacer.java | 74 |
2 files changed, 44 insertions, 35 deletions
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index c1c72cad0c6b..b1ed35867dcf 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -2044,7 +2044,10 @@ public class AppTransition implements Dump { if (forceOverride || isKeyguardTransit(transit) || !isTransitionSet() || mNextAppTransition == TRANSIT_NONE) { setAppTransition(transit, flags); - } else if (!alwaysKeepCurrent) { + } + // We never want to change from a Keyguard transit to a non-Keyguard transit, as our logic + // relies on the fact that we always execute a Keyguard transition after preparing one. + else if (!alwaysKeepCurrent && !isKeyguardTransit(transit)) { if (transit == TRANSIT_TASK_OPEN && isTransitionEqual(TRANSIT_TASK_CLOSE)) { // Opening a new task always supersedes a close for the anim. setAppTransition(transit, flags); diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index 4442bb87ec33..82c862f6a6a8 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -25,6 +25,7 @@ import static com.android.server.wm.AppTransition.TRANSIT_WALLPAPER_CLOSE; import static com.android.server.wm.AppTransition.TRANSIT_WALLPAPER_INTRA_CLOSE; import static com.android.server.wm.AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN; import static com.android.server.wm.AppTransition.TRANSIT_WALLPAPER_OPEN; +import static com.android.server.wm.AppTransition.isKeyguardGoingAwayTransit; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_LIGHT_TRANSACTIONS; @@ -239,7 +240,7 @@ class WindowSurfacePlacer { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "**** GOOD TO GO"); int transit = mService.mAppTransition.getAppTransition(); - if (mService.mSkipAppTransitionAnimation) { + if (mService.mSkipAppTransitionAnimation && !isKeyguardGoingAwayTransit(transit)) { transit = AppTransition.TRANSIT_UNSET; } mService.mSkipAppTransitionAnimation = false; @@ -598,42 +599,47 @@ class WindowSurfacePlacer { + ", openingApps=" + openingApps + ", closingApps=" + closingApps); mService.mAnimateWallpaperWithTarget = false; - if (closingAppHasWallpaper && openingAppHasWallpaper) { - if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!"); - switch (transit) { - case TRANSIT_ACTIVITY_OPEN: - case TRANSIT_TASK_OPEN: - case TRANSIT_TASK_TO_FRONT: - transit = TRANSIT_WALLPAPER_INTRA_OPEN; - break; - case TRANSIT_ACTIVITY_CLOSE: - case TRANSIT_TASK_CLOSE: - case TRANSIT_TASK_TO_BACK: - transit = TRANSIT_WALLPAPER_INTRA_CLOSE; - break; - } - if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, - "New transit: " + AppTransition.appTransitionToString(transit)); - } else if (openingCanBeWallpaperTarget && transit == TRANSIT_KEYGUARD_GOING_AWAY) { + if (openingCanBeWallpaperTarget && transit == TRANSIT_KEYGUARD_GOING_AWAY) { transit = TRANSIT_KEYGUARD_GOING_AWAY_ON_WALLPAPER; if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit: " + AppTransition.appTransitionToString(transit)); - } else if (oldWallpaper != null && !mService.mOpeningApps.isEmpty() - && !openingApps.contains(oldWallpaper.mAppToken) - && closingApps.contains(oldWallpaper.mAppToken)) { - // We are transitioning from an activity with a wallpaper to one without. - transit = TRANSIT_WALLPAPER_CLOSE; - if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit away from wallpaper: " - + AppTransition.appTransitionToString(transit)); - } else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw() && - openingApps.contains(wallpaperTarget.mAppToken)) { - // We are transitioning from an activity without - // a wallpaper to now showing the wallpaper - transit = TRANSIT_WALLPAPER_OPEN; - if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit into wallpaper: " - + AppTransition.appTransitionToString(transit)); - } else { - mService.mAnimateWallpaperWithTarget = true; + } + // We never want to change from a Keyguard transit to a non-Keyguard transit, as our logic + // relies on the fact that we always execute a Keyguard transition after preparing one. + else if (!isKeyguardGoingAwayTransit(transit)) { + if (closingAppHasWallpaper && openingAppHasWallpaper) { + if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Wallpaper animation!"); + switch (transit) { + case TRANSIT_ACTIVITY_OPEN: + case TRANSIT_TASK_OPEN: + case TRANSIT_TASK_TO_FRONT: + transit = TRANSIT_WALLPAPER_INTRA_OPEN; + break; + case TRANSIT_ACTIVITY_CLOSE: + case TRANSIT_TASK_CLOSE: + case TRANSIT_TASK_TO_BACK: + transit = TRANSIT_WALLPAPER_INTRA_CLOSE; + break; + } + if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, + "New transit: " + AppTransition.appTransitionToString(transit)); + } else if (oldWallpaper != null && !mService.mOpeningApps.isEmpty() + && !openingApps.contains(oldWallpaper.mAppToken) + && closingApps.contains(oldWallpaper.mAppToken)) { + // We are transitioning from an activity with a wallpaper to one without. + transit = TRANSIT_WALLPAPER_CLOSE; + if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit away from wallpaper: " + + AppTransition.appTransitionToString(transit)); + } else if (wallpaperTarget != null && wallpaperTarget.isVisibleLw() && + openingApps.contains(wallpaperTarget.mAppToken)) { + // We are transitioning from an activity without + // a wallpaper to now showing the wallpaper + transit = TRANSIT_WALLPAPER_OPEN; + if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "New transit into wallpaper: " + + AppTransition.appTransitionToString(transit)); + } else { + mService.mAnimateWallpaperWithTarget = true; + } } return transit; } |