am 7fdaa397: Merge "Save preferred activity info with user id." into jb-mr1-dev
* commit '7fdaa3976d6082bd7e96329240bda478c08b751e': Save preferred activity info with user id.
This commit is contained in:
@@ -1106,7 +1106,17 @@ final class ApplicationPackageManager extends PackageManager {
|
||||
public void addPreferredActivity(IntentFilter filter,
|
||||
int match, ComponentName[] set, ComponentName activity) {
|
||||
try {
|
||||
mPM.addPreferredActivity(filter, match, set, activity);
|
||||
mPM.addPreferredActivity(filter, match, set, activity, UserHandle.myUserId());
|
||||
} catch (RemoteException e) {
|
||||
// Should never happen!
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPreferredActivity(IntentFilter filter, int match,
|
||||
ComponentName[] set, ComponentName activity, int userId) {
|
||||
try {
|
||||
mPM.addPreferredActivity(filter, match, set, activity, userId);
|
||||
} catch (RemoteException e) {
|
||||
// Should never happen!
|
||||
}
|
||||
|
||||
@@ -200,7 +200,7 @@ interface IPackageManager {
|
||||
List<PackageInfo> getPreferredPackages(int flags);
|
||||
|
||||
void addPreferredActivity(in IntentFilter filter, int match,
|
||||
in ComponentName[] set, in ComponentName activity);
|
||||
in ComponentName[] set, in ComponentName activity, int userId);
|
||||
|
||||
void replacePreferredActivity(in IntentFilter filter, int match,
|
||||
in ComponentName[] set, in ComponentName activity);
|
||||
|
||||
@@ -2459,6 +2459,17 @@ public abstract class PackageManager {
|
||||
public abstract void addPreferredActivity(IntentFilter filter, int match,
|
||||
ComponentName[] set, ComponentName activity);
|
||||
|
||||
/**
|
||||
* Same as {@link #addPreferredActivity(IntentFilter, int,
|
||||
ComponentName[], ComponentName)}, but with a specific userId to apply the preference
|
||||
to.
|
||||
* @hide
|
||||
*/
|
||||
public void addPreferredActivity(IntentFilter filter, int match,
|
||||
ComponentName[] set, ComponentName activity, int userId) {
|
||||
throw new RuntimeException("Not implemented. Must override in a subclass.");
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated This is a protected API that should not have been available
|
||||
* to third party applications. It is the platform's responsibility for
|
||||
|
||||
@@ -150,7 +150,8 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
|
||||
|
||||
resizeGrid();
|
||||
} else if (count == 1) {
|
||||
startActivity(mAdapter.intentForPosition(0));
|
||||
startActivityAsUser(mAdapter.intentForPosition(0),
|
||||
UserHandle.getUserId(mLaunchedFromUid));
|
||||
mPackageMonitor.unregister();
|
||||
mRegistered = false;
|
||||
finish();
|
||||
@@ -363,12 +364,12 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
|
||||
if (r.match > bestMatch) bestMatch = r.match;
|
||||
}
|
||||
getPackageManager().addPreferredActivity(filter, bestMatch, set,
|
||||
intent.getComponent());
|
||||
intent.getComponent(), UserHandle.getUserId(mLaunchedFromUid));
|
||||
}
|
||||
}
|
||||
|
||||
if (intent != null) {
|
||||
startActivity(intent);
|
||||
startActivityAsUser(intent, UserHandle.getUserId(mLaunchedFromUid));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -376,7 +377,7 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte
|
||||
Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
|
||||
.setData(Uri.fromParts("package", ri.activityInfo.packageName, null))
|
||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
|
||||
startActivity(in);
|
||||
startActivityAsUser(in, UserHandle.getUserId(mLaunchedFromUid));
|
||||
}
|
||||
|
||||
private final class DisplayResolveInfo {
|
||||
|
||||
@@ -2422,6 +2422,9 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
final int M = prefs.size();
|
||||
for (int i=0; i<M; i++) {
|
||||
final PreferredActivity pa = prefs.get(i);
|
||||
if (pa.mUserId != userId) {
|
||||
continue;
|
||||
}
|
||||
if (pa.mPref.mMatch != match) {
|
||||
continue;
|
||||
}
|
||||
@@ -7645,7 +7648,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
mSettings.updateSharedUserPermsLPw(deletedPs, mGlobalGids);
|
||||
}
|
||||
}
|
||||
clearPackagePreferredActivitiesLPw(deletedPs.name);
|
||||
clearPackagePreferredActivitiesLPw(deletedPs.name, UserHandle.USER_ALL);
|
||||
}
|
||||
}
|
||||
// can downgrade to reader
|
||||
@@ -8112,26 +8115,28 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
|
||||
public void addPreferredActivity(IntentFilter filter, int match,
|
||||
ComponentName[] set, ComponentName activity) {
|
||||
ComponentName[] set, ComponentName activity, int userId) {
|
||||
// writer
|
||||
int callingUid = Binder.getCallingUid();
|
||||
checkValidCaller(callingUid, userId);
|
||||
synchronized (mPackages) {
|
||||
if (mContext.checkCallingOrSelfPermission(
|
||||
android.Manifest.permission.SET_PREFERRED_APPLICATIONS)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
if (getUidTargetSdkVersionLockedLPr(Binder.getCallingUid())
|
||||
if (getUidTargetSdkVersionLockedLPr(callingUid)
|
||||
< Build.VERSION_CODES.FROYO) {
|
||||
Slog.w(TAG, "Ignoring addPreferredActivity() from uid "
|
||||
+ Binder.getCallingUid());
|
||||
+ callingUid);
|
||||
return;
|
||||
}
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
|
||||
}
|
||||
|
||||
Slog.i(TAG, "Adding preferred activity " + activity + ":");
|
||||
|
||||
Slog.i(TAG, "Adding preferred activity " + activity + " for user " + userId + " :");
|
||||
filter.dump(new LogPrinter(Log.INFO, TAG), " ");
|
||||
mSettings.mPreferredActivities.addFilter(
|
||||
new PreferredActivity(filter, match, set, activity));
|
||||
new PreferredActivity(filter, match, set, activity, userId));
|
||||
scheduleWriteSettingsLocked();
|
||||
}
|
||||
}
|
||||
@@ -8167,13 +8172,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
mContext.enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
|
||||
}
|
||||
|
||||
|
||||
final int callingUserId = UserHandle.getCallingUserId();
|
||||
ArrayList<PreferredActivity> removed = null;
|
||||
Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
|
||||
String action = filter.getAction(0);
|
||||
String category = filter.getCategory(0);
|
||||
while (it.hasNext()) {
|
||||
PreferredActivity pa = it.next();
|
||||
if (pa.mUserId != callingUserId) continue;
|
||||
if (pa.getAction(0).equals(action) && pa.getCategory(0).equals(category)) {
|
||||
if (removed == null) {
|
||||
removed = new ArrayList<PreferredActivity>();
|
||||
@@ -8189,7 +8196,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
mSettings.mPreferredActivities.removeFilter(pa);
|
||||
}
|
||||
}
|
||||
addPreferredActivity(filter, match, set, activity);
|
||||
addPreferredActivity(filter, match, set, activity, callingUserId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8213,17 +8220,21 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
if (clearPackagePreferredActivitiesLPw(packageName)) {
|
||||
if (clearPackagePreferredActivitiesLPw(packageName, UserHandle.getCallingUserId())) {
|
||||
scheduleWriteSettingsLocked();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean clearPackagePreferredActivitiesLPw(String packageName) {
|
||||
/** This method takes a specific user id as well as UserHandle.USER_ALL. */
|
||||
boolean clearPackagePreferredActivitiesLPw(String packageName, int userId) {
|
||||
ArrayList<PreferredActivity> removed = null;
|
||||
Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
|
||||
while (it.hasNext()) {
|
||||
PreferredActivity pa = it.next();
|
||||
if (userId != UserHandle.USER_ALL && pa.mUserId != userId) {
|
||||
continue;
|
||||
}
|
||||
if (pa.mPref.mComponent.getPackageName().equals(packageName)) {
|
||||
if (removed == null) {
|
||||
removed = new ArrayList<PreferredActivity>();
|
||||
@@ -8245,11 +8256,15 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
List<ComponentName> outActivities, String packageName) {
|
||||
|
||||
int num = 0;
|
||||
final int userId = UserHandle.getCallingUserId();
|
||||
// reader
|
||||
synchronized (mPackages) {
|
||||
final Iterator<PreferredActivity> it = mSettings.mPreferredActivities.filterIterator();
|
||||
while (it.hasNext()) {
|
||||
final PreferredActivity pa = it.next();
|
||||
if (pa.mUserId != userId) {
|
||||
continue;
|
||||
}
|
||||
if (packageName == null
|
||||
|| pa.mPref.mComponent.getPackageName().equals(packageName)) {
|
||||
if (outFilters != null) {
|
||||
|
||||
@@ -33,22 +33,38 @@ class PreferredActivity extends IntentFilter implements PreferredComponent.Callb
|
||||
private static final String TAG = "PreferredActivity";
|
||||
|
||||
private static final boolean DEBUG_FILTERS = false;
|
||||
static final String ATTR_USER_ID = "userId";
|
||||
|
||||
final PreferredComponent mPref;
|
||||
final int mUserId;
|
||||
|
||||
PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity) {
|
||||
this(filter, match, set, activity, 0);
|
||||
}
|
||||
|
||||
PreferredActivity(IntentFilter filter, int match, ComponentName[] set, ComponentName activity,
|
||||
int userId) {
|
||||
super(filter);
|
||||
mUserId = userId;
|
||||
mPref = new PreferredComponent(this, match, set, activity);
|
||||
}
|
||||
|
||||
PreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||
String userIdString = parser.getAttributeValue(null, ATTR_USER_ID);
|
||||
if (userIdString != null && userIdString.length() > 0) {
|
||||
mUserId = Integer.parseInt(userIdString);
|
||||
} else {
|
||||
// Old format with no userId specified - assume primary user
|
||||
mUserId = 0;
|
||||
}
|
||||
mPref = new PreferredComponent(this, parser);
|
||||
}
|
||||
|
||||
public void writeToXml(XmlSerializer serializer) throws IOException {
|
||||
serializer.attribute(null, ATTR_USER_ID, Integer.toString(mUserId));
|
||||
mPref.writeToXml(serializer);
|
||||
serializer.startTag(null, "filter");
|
||||
super.writeToXml(serializer);
|
||||
super.writeToXml(serializer);
|
||||
serializer.endTag(null, "filter");
|
||||
}
|
||||
|
||||
|
||||
@@ -506,6 +506,7 @@ public class UserManagerService extends IUserManager.Stub {
|
||||
Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
|
||||
addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userInfo.id);
|
||||
mContext.sendBroadcast(addedIntent, android.Manifest.permission.MANAGE_USERS);
|
||||
mContext.sendBroadcastToUser(new Intent(Intent.ACTION_BOOT_COMPLETED), userInfo.id);
|
||||
}
|
||||
return userInfo;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user