summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityStartInterceptor.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
index 6709e3a72db0..a318c4bf334f 100644
--- a/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
+++ b/services/core/java/com/android/server/wm/ActivityStartInterceptor.java
@@ -16,6 +16,7 @@
package com.android.server.wm;
+import static android.Manifest.permission.MANAGE_ACTIVITY_TASKS;
import static android.app.ActivityManager.INTENT_SENDER_ACTIVITY;
import static android.app.ActivityOptions.ANIM_OPEN_CROSS_PROFILE_APPS;
import static android.app.ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
@@ -35,6 +36,7 @@ import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
import static android.content.Intent.FLAG_ACTIVITY_TASK_ON_HOME;
import static android.content.pm.ApplicationInfo.FLAG_SUSPENDED;
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME;
@@ -510,6 +512,14 @@ class ActivityStartInterceptor {
}
if (mComponentSpecified) {
+ Slog.w(TAG, "Starting home with component specified, uid=" + mCallingUid);
+ if (mService.isCallerRecents(mCallingUid)
+ || ActivityTaskManagerService.checkPermission(MANAGE_ACTIVITY_TASKS,
+ mCallingPid, mCallingUid) == PERMISSION_GRANTED) {
+ // Allow home component specified from trusted callers.
+ return false;
+ }
+
final ComponentName homeComponent = mIntent.getComponent();
final Intent homeIntent = mService.getHomeIntent();
final ActivityInfo aInfo = mService.mRootWindowContainer.resolveHomeActivity(