diff options
author | 2025-02-18 10:41:11 +0000 | |
---|---|---|
committer | 2025-02-20 11:14:38 +0000 | |
commit | ca4bd050a60f62b3fd54903550c881e054066b2a (patch) | |
tree | 9148ff1e13db538c400623ba80c2d9aa3a149a91 /services | |
parent | 793ae0501e6b25106a5ce0ee78d74ff75f1c7cf4 (diff) |
Add the finishing task as a trigger for crash.
When activity crashes, set the finishing task as the trigger task. This
allows shell to better handle crashes through #handleRequest.
Fix: 361058348
Fix: 356187158
Test: Open any app, crash it using "adb shel am crash", see that trigger
task set instead of being null.
Flag: EXEMPT Bugfix
Change-Id: I24d63ad5e74a336871327872d007663d65f8cbfc
Diffstat (limited to 'services')
5 files changed, 8 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 85416903b274..f3931817ec79 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -5612,8 +5612,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp * @see AppTransition#prepareAppTransition */ void requestTransitionAndLegacyPrepare(@WindowManager.TransitionType int transit, - @WindowManager.TransitionFlags int flags) { - mTransitionController.requestTransitionIfNeeded(transit, flags, null /* trigger */, this); + @WindowManager.TransitionFlags int flags, @Nullable WindowContainer trigger) { + mTransitionController.requestTransitionIfNeeded(transit, flags, trigger, this); } void executeAppTransition() { diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java index 6091b8334438..6d73739e5046 100644 --- a/services/core/java/com/android/server/wm/KeyguardController.java +++ b/services/core/java/com/android/server/wm/KeyguardController.java @@ -250,7 +250,7 @@ class KeyguardController { // to the locked state before holding the sleep token again if (!ENABLE_NEW_KEYGUARD_SHELL_TRANSITIONS) { dc.requestTransitionAndLegacyPrepare( - TRANSIT_TO_FRONT, TRANSIT_FLAG_KEYGUARD_APPEARING); + TRANSIT_TO_FRONT, TRANSIT_FLAG_KEYGUARD_APPEARING, /* trigger= */ null); } dc.mWallpaperController.adjustWallpaperWindows(); dc.executeAppTransition(); diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 8e5e2f311489..6cd1336122be 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -5480,7 +5480,8 @@ class Task extends TaskFragment { Slog.w(TAG, " Force finishing activity " + r.intent.getComponent().flattenToShortString()); Task finishedTask = r.getTask(); - mDisplayContent.requestTransitionAndLegacyPrepare(TRANSIT_CLOSE, TRANSIT_FLAG_APP_CRASHED); + mDisplayContent.requestTransitionAndLegacyPrepare(TRANSIT_CLOSE, TRANSIT_FLAG_APP_CRASHED, + finishedTask); r.finishIfPossible(reason, false /* oomAdj */); // Also terminate any activities below it that aren't yet stopped, to avoid a situation diff --git a/services/core/java/com/android/server/wm/WindowProcessController.java b/services/core/java/com/android/server/wm/WindowProcessController.java index b2d28a369edc..270de0197a4e 100644 --- a/services/core/java/com/android/server/wm/WindowProcessController.java +++ b/services/core/java/com/android/server/wm/WindowProcessController.java @@ -482,8 +482,9 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio r.detachFromProcess(); if (r.isVisibleRequested()) { hasVisibleActivity = true; + Task finishingTask = r.getTask(); r.mDisplayContent.requestTransitionAndLegacyPrepare(TRANSIT_CLOSE, - TRANSIT_FLAG_APP_CRASHED); + TRANSIT_FLAG_APP_CRASHED, finishingTask); } r.destroyIfPossible("handleAppCrashed"); } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java index 181853066f7b..9c483846217b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java @@ -1821,7 +1821,7 @@ public class DisplayContentTests extends WindowTestsBase { .setTask(nonTopVisible.getTask()).setVisible(false) .setActivityTheme(android.R.style.Theme_Translucent).build(); final TestTransitionPlayer player = registerTestTransitionPlayer(); - mDisplayContent.requestTransitionAndLegacyPrepare(WindowManager.TRANSIT_OPEN, 0); + mDisplayContent.requestTransitionAndLegacyPrepare(WindowManager.TRANSIT_OPEN, 0, null); translucentTop.setVisibility(true); mDisplayContent.updateOrientation(); assertEquals("Non-top visible activity must be portrait", |