diff options
3 files changed, 20 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 4059a675c4fd..8fb10fdc1ea5 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -3759,6 +3759,10 @@ final class ActivityStack { if (getVisibleBehindActivity() == r) { mStackSupervisor.requestVisibleBehindLocked(r, false); } + + // Clean-up activities are no longer relaunching (e.g. app process died). Notify window + // manager so it can update its bookkeeping. + mWindowManager.notifyAppRelaunchesCleared(r.appToken); } private void removeTimeoutsForActivityLocked(ActivityRecord r) { diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index b907da666fea..531146eb4863 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -625,6 +625,13 @@ class AppWindowToken extends WindowToken { } } + void clearRelaunching() { + if (canFreezeBounds()) { + unfreezeBounds(); + } + mPendingRelaunchCount = 0; + } + void addWindow(WindowState w) { for (int i = allAppWindows.size() - 1; i >= 0; i--) { WindowState candidate = allAppWindows.get(i); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 54960a4ee46c..fc0e530cedfe 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -10206,6 +10206,15 @@ public class WindowManagerService extends IWindowManager.Stub } } + public void notifyAppRelaunchesCleared(IBinder token) { + synchronized (mWindowMap) { + final AppWindowToken appWindow = findAppWindowToken(token); + if (appWindow != null) { + appWindow.clearRelaunching(); + } + } + } + @Override public int getDockedDividerInsetsLw() { return getDefaultDisplayContentLocked().getDockedDividerController().getContentInsets(); |