summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityStarter.java17
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java1
2 files changed, 17 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java
index e2ef82b81a18..a9a25fc2d272 100644
--- a/services/core/java/com/android/server/wm/ActivityStarter.java
+++ b/services/core/java/com/android/server/wm/ActivityStarter.java
@@ -86,6 +86,7 @@ import android.app.IApplicationThread;
import android.app.PendingIntent;
import android.app.ProfilerInfo;
import android.app.WaitResult;
+import android.content.ComponentName;
import android.content.IIntentSender;
import android.content.Intent;
import android.content.IntentSender;
@@ -1221,6 +1222,20 @@ class ActivityStarter {
mController.onExecutionComplete(this);
}
+ private boolean isHomeApp(int uid, @Nullable String packageName) {
+ if (mService.mHomeProcess != null) {
+ // Fast check
+ return uid == mService.mHomeProcess.mUid;
+ }
+ if (packageName == null) {
+ return false;
+ }
+ ComponentName activity =
+ mService.getPackageManagerInternalLocked().getDefaultHomeActivity(
+ UserHandle.getUserId(uid));
+ return activity != null && packageName.equals(activity.getPackageName());
+ }
+
boolean shouldAbortBackgroundActivityStart(int callingUid, int callingPid,
final String callingPackage, int realCallingUid, int realCallingPid,
WindowProcessController callerApp, PendingIntentRecord originatingPendingIntent,
@@ -1236,7 +1251,7 @@ class ActivityStarter {
}
// Always allow home application to start activities.
- if (mService.mHomeProcess != null && callingUid == mService.mHomeProcess.mUid) {
+ if (isHomeApp(callingUid, callingPackage)) {
if (DEBUG_ACTIVITY_STARTS) {
Slog.d(TAG, "Activity start allowed for home app callingUid (" + callingUid + ")");
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
index 0a36af2d586a..d0588a30ca67 100644
--- a/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStarterTests.java
@@ -348,6 +348,7 @@ public class ActivityStarterTests extends WindowTestsBase {
invocation -> {
throw new RuntimeException("Not stubbed");
});
+ doReturn(null).when(mMockPackageManager).getDefaultHomeActivity(anyInt());
doReturn(mMockPackageManager).when(mAtm).getPackageManagerInternalLocked();
doReturn(false).when(mMockPackageManager).isInstantAppInstallerComponent(any());
doReturn(null).when(mMockPackageManager).resolveIntent(any(), any(), anyInt(), anyInt(),