Merge "Do not require BAL opt-in for Launchers"
This commit is contained in:
committed by
Android (Google) Code Review
commit
badd5b5861
@@ -17,6 +17,8 @@
|
||||
package com.android.server.pm;
|
||||
|
||||
import static android.app.ActivityOptions.KEY_SPLASH_SCREEN_THEME;
|
||||
import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED;
|
||||
import static android.app.ComponentOptions.MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED;
|
||||
import static android.app.PendingIntent.FLAG_IMMUTABLE;
|
||||
import static android.app.PendingIntent.FLAG_MUTABLE;
|
||||
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
|
||||
@@ -1143,7 +1145,8 @@ public class LauncherAppsService extends SystemService {
|
||||
final int code;
|
||||
try {
|
||||
code = mActivityTaskManagerInternal.startActivitiesAsPackage(publisherPackage,
|
||||
publishedFeatureId, userId, intents, startActivityOptions);
|
||||
publishedFeatureId, userId, intents,
|
||||
getActivityOptionsForLauncher(startActivityOptions));
|
||||
if (ActivityManager.isStartResultSuccessful(code)) {
|
||||
return true; // Success
|
||||
} else {
|
||||
@@ -1158,6 +1161,23 @@ public class LauncherAppsService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
private Bundle getActivityOptionsForLauncher(Bundle startActivityOptions) {
|
||||
// starting a shortcut implies the user's consent, so grant the launchers/senders BAL
|
||||
// privileges (unless the caller explicitly defined the behavior)
|
||||
if (startActivityOptions == null) {
|
||||
return ActivityOptions.makeBasic().setPendingIntentBackgroundActivityStartMode(
|
||||
MODE_BACKGROUND_ACTIVITY_START_ALLOWED).toBundle();
|
||||
}
|
||||
ActivityOptions activityOptions = ActivityOptions.fromBundle(startActivityOptions);
|
||||
if (activityOptions.getPendingIntentBackgroundActivityStartMode()
|
||||
== MODE_BACKGROUND_ACTIVITY_START_SYSTEM_DEFINED) {
|
||||
// only override if the property was not explicitly set
|
||||
return activityOptions.setPendingIntentBackgroundActivityStartMode(
|
||||
MODE_BACKGROUND_ACTIVITY_START_ALLOWED).toBundle();
|
||||
}
|
||||
return startActivityOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActivityEnabled(
|
||||
String callingPackage, ComponentName component, UserHandle user)
|
||||
@@ -1216,8 +1236,8 @@ public class LauncherAppsService extends SystemService {
|
||||
i.setSourceBounds(sourceBounds);
|
||||
|
||||
mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
|
||||
callingFeatureId, i, /* resultTo= */ null, Intent.FLAG_ACTIVITY_NEW_TASK, opts,
|
||||
userId);
|
||||
callingFeatureId, i, /* resultTo= */ null, Intent.FLAG_ACTIVITY_NEW_TASK,
|
||||
getActivityOptionsForLauncher(opts), userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1264,7 +1284,8 @@ public class LauncherAppsService extends SystemService {
|
||||
|
||||
mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
|
||||
callingFeatureId, launchIntent, /* resultTo= */ null,
|
||||
Intent.FLAG_ACTIVITY_NEW_TASK, opts, user.getIdentifier());
|
||||
Intent.FLAG_ACTIVITY_NEW_TASK, getActivityOptionsForLauncher(opts),
|
||||
user.getIdentifier());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1347,7 +1368,7 @@ public class LauncherAppsService extends SystemService {
|
||||
}
|
||||
mActivityTaskManagerInternal.startActivityAsUser(caller, callingPackage,
|
||||
callingFeatureId, intent, /* resultTo= */ null, Intent.FLAG_ACTIVITY_NEW_TASK,
|
||||
opts, user.getIdentifier());
|
||||
getActivityOptionsForLauncher(opts), user.getIdentifier());
|
||||
}
|
||||
|
||||
/** Checks if user is a profile of or same as listeningUser.
|
||||
|
||||
Reference in New Issue
Block a user