am 1ba4477c: Merge "Introducing removable and non-removable ForwardingIntentFilters."

* commit '1ba4477c1f029cb9803b33476fee25b162b5a579':
  Introducing removable and non-removable ForwardingIntentFilters.
This commit is contained in:
Nicolas Prevot
2014-05-06 13:58:53 +00:00
committed by Android Git Automerger
4 changed files with 23 additions and 12 deletions

View File

@@ -247,7 +247,8 @@ interface IPackageManager {
void clearPackagePersistentPreferredActivities(String packageName, int userId);
void addForwardingIntentFilter(in IntentFilter filter, int userIdOrig, int userIdDest);
void addForwardingIntentFilter(in IntentFilter filter, boolean removable, int userIdOrig,
int userIdDest);
void clearForwardingIntentFilters(int userIdOrig);

View File

@@ -32,22 +32,29 @@ import android.os.UserHandle;
*/
class ForwardingIntentFilter extends IntentFilter {
private static final String ATTR_USER_ID_DEST = "userIdDest";
private static final String ATTR_REMOVABLE = "removable";
private static final String ATTR_FILTER = "filter";
private static final String TAG = "ForwardingIntentFilter";
// If the intent matches the IntentFilter, then it can be forwarded to this userId.
final int mUserIdDest;
boolean mRemovable;
ForwardingIntentFilter(IntentFilter filter, int userIdDest) {
ForwardingIntentFilter(IntentFilter filter, boolean removable, int userIdDest) {
super(filter);
mUserIdDest = userIdDest;
mRemovable = removable;
}
public int getUserIdDest() {
return mUserIdDest;
}
public boolean isRemovable() {
return mRemovable;
}
ForwardingIntentFilter(XmlPullParser parser) throws XmlPullParserException, IOException {
String userIdDestString = parser.getAttributeValue(null, ATTR_USER_ID_DEST);
if (userIdDestString == null) {
@@ -58,6 +65,10 @@ class ForwardingIntentFilter extends IntentFilter {
} else {
mUserIdDest = Integer.parseInt(userIdDestString);
}
String removableString = parser.getAttributeValue(null, ATTR_REMOVABLE);
if (removableString != null) {
mRemovable = Boolean.parseBoolean(removableString);
}
int outerDepth = parser.getDepth();
String tagName = parser.getName();
int type;
@@ -89,6 +100,7 @@ class ForwardingIntentFilter extends IntentFilter {
public void writeToXml(XmlSerializer serializer) throws IOException {
serializer.attribute(null, ATTR_USER_ID_DEST, Integer.toString(mUserIdDest));
serializer.attribute(null, ATTR_REMOVABLE, Boolean.toString(mRemovable));
serializer.startTag(null, ATTR_FILTER);
super.writeToXml(serializer);
serializer.endTag(null, ATTR_FILTER);

View File

@@ -11112,13 +11112,9 @@ public class PackageManagerService extends IPackageManager.Stub {
}
}
/*
* For filters that are added with this method:
* if an intent for the user whose id is userIdOrig matches the filter, then this intent can
* also be resolved in the user whose id is userIdDest.
*/
@Override
public void addForwardingIntentFilter(IntentFilter filter, int userIdOrig, int userIdDest) {
public void addForwardingIntentFilter(IntentFilter filter, boolean removable, int userIdOrig,
int userIdDest) {
int callingUid = Binder.getCallingUid();
if (callingUid != Process.SYSTEM_UID) {
throw new SecurityException(
@@ -11130,7 +11126,7 @@ public class PackageManagerService extends IPackageManager.Stub {
}
synchronized (mPackages) {
mSettings.editForwardingIntentResolverLPw(userIdOrig).addFilter(
new ForwardingIntentFilter(filter, userIdDest));
new ForwardingIntentFilter(filter, removable, userIdDest));
mSettings.writePackageRestrictionsLPr(userIdOrig);
}
}
@@ -11147,7 +11143,7 @@ public class PackageManagerService extends IPackageManager.Stub {
HashSet<ForwardingIntentFilter> set =
new HashSet<ForwardingIntentFilter>(fir.filterSet());
for (ForwardingIntentFilter fif : set) {
fir.removeFilter(fif);
if (fif.isRemovable()) fir.removeFilter(fif);
}
mSettings.writePackageRestrictionsLPr(userIdOrig);
}

View File

@@ -3094,10 +3094,12 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
long id = Binder.clearCallingIdentity();
try {
if ((flags & DevicePolicyManager.FLAG_TO_PRIMARY_USER) != 0) {
pm.addForwardingIntentFilter(filter, callingUserId, UserHandle.USER_OWNER);
pm.addForwardingIntentFilter(filter, true /*removable*/, callingUserId,
UserHandle.USER_OWNER);
}
if ((flags & DevicePolicyManager.FLAG_TO_MANAGED_PROFILE) != 0) {
pm.addForwardingIntentFilter(filter, UserHandle.USER_OWNER, callingUserId);
pm.addForwardingIntentFilter(filter, true /*removable*/, UserHandle.USER_OWNER,
callingUserId);
}
} catch (RemoteException re) {
// Shouldn't happen