From 51de04a67d3c1b2ae13cfec831fbb19b3899661d Mon Sep 17 00:00:00 2001 From: Jeff Chang Date: Wed, 29 Apr 2020 16:14:31 +0800 Subject: [PATCH] Protect against assumptions of a top focused stack. Ibefc3a80, Do the protect against when get top focused stack. Here are some cases also need to do same thing to guards against the assumptions that a top focused stack exists. Bug: 153607881 Test: ActivityStarterTests ActivityRecordTest Change-Id: I004bdb97ce4c1199b37625ba18bea35ac478f81c --- services/core/java/com/android/server/wm/ActivityRecord.java | 3 +++ services/core/java/com/android/server/wm/ActivityStarter.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index dcdbfdedb0c86..64af968fe9e73 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -5536,6 +5536,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A // timeout should not be caused by this. if (stopped) { final ActivityStack stack = mRootWindowContainer.getTopDisplayFocusedStack(); + if (stack == null) { + return this; + } // Try to use the one which is closest to top. ActivityRecord r = stack.getResumedActivity(); if (r == null) { diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index df53227e27fd7..2989d3cb93c9c 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -1123,7 +1123,7 @@ class ActivityStarter { // If we are starting an activity that is not from the same uid as the currently resumed // one, check whether app switches are allowed. - if (voiceSession == null && (stack.getResumedActivity() == null + if (voiceSession == null && stack != null && (stack.getResumedActivity() == null || stack.getResumedActivity().info.applicationInfo.uid != realCallingUid)) { if (!mService.checkAppSwitchAllowedLocked(callingPid, callingUid, realCallingPid, realCallingUid, "Activity start")) {