summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/AppOpsManager.java16
-rw-r--r--core/java/android/app/ApplicationPackageManager.java13
-rw-r--r--core/java/android/content/pm/IPackageManager.aidl2
-rw-r--r--core/java/android/content/pm/PackageManager.java9
-rwxr-xr-xservices/core/java/com/android/server/am/ActivityManagerService.java4
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java9
6 files changed, 40 insertions, 13 deletions
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index caadecb29dc7..a52186a446b5 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -459,15 +459,15 @@ public class AppOpsManager {
null, //POST_NOTIFICATION
null, //NEIGHBORING_CELLS
null, //CALL_PHONE
- null, //READ_SMS
- null, //WRITE_SMS
- null, //RECEIVE_SMS
- null, //RECEIVE_EMERGECY_SMS
- null, //RECEIVE_MMS
+ UserManager.DISALLOW_SMS, //READ_SMS
+ UserManager.DISALLOW_SMS, //WRITE_SMS
+ UserManager.DISALLOW_SMS, //RECEIVE_SMS
+ null, //RECEIVE_EMERGENCY_SMS
+ UserManager.DISALLOW_SMS, //RECEIVE_MMS
null, //RECEIVE_WAP_PUSH
- null, //SEND_SMS
- null, //READ_ICC_SMS
- null, //WRITE_ICC_SMS
+ UserManager.DISALLOW_SMS, //SEND_SMS
+ UserManager.DISALLOW_SMS, //READ_ICC_SMS
+ UserManager.DISALLOW_SMS, //WRITE_ICC_SMS
null, //WRITE_SETTINGS
UserManager.DISALLOW_CREATE_WINDOWS, //SYSTEM_ALERT_WINDOW
null, //ACCESS_NOTIFICATIONS
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index 18ba8c4b68ea..c75c8b73f4e6 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -1384,7 +1384,18 @@ final class ApplicationPackageManager extends PackageManager {
public void replacePreferredActivity(IntentFilter filter,
int match, ComponentName[] set, ComponentName activity) {
try {
- mPM.replacePreferredActivity(filter, match, set, activity);
+ mPM.replacePreferredActivity(filter, match, set, activity, UserHandle.myUserId());
+ } catch (RemoteException e) {
+ // Should never happen!
+ }
+ }
+
+ @Override
+ public void replacePreferredActivityAsUser(IntentFilter filter,
+ int match, ComponentName[] set, ComponentName activity,
+ int userId) {
+ try {
+ mPM.replacePreferredActivity(filter, match, set, activity, userId);
} catch (RemoteException e) {
// Should never happen!
}
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 7196372edf4f..e27ad7d8d7f5 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -233,7 +233,7 @@ interface IPackageManager {
in ComponentName[] set, in ComponentName activity, int userId);
void replacePreferredActivity(in IntentFilter filter, int match,
- in ComponentName[] set, in ComponentName activity);
+ in ComponentName[] set, in ComponentName activity, int userId);
void clearPackagePreferredActivities(String packageName);
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c5dcd8ea5786..e482bb0bce24 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -3523,6 +3523,15 @@ public abstract class PackageManager {
ComponentName[] set, ComponentName activity);
/**
+ * @hide
+ */
+ @Deprecated
+ public void replacePreferredActivityAsUser(IntentFilter filter, int match,
+ ComponentName[] set, ComponentName activity, int userId) {
+ throw new RuntimeException("Not implemented. Must override in a subclass.");
+ }
+
+ /**
* Remove all preferred activity mappings, previously added with
* {@link #addPreferredActivity}, from the
* system whose activities are implemented in the given package name.
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 29fd984af6ee..ae2ef06caf11 100755
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -13831,6 +13831,10 @@ public final class ActivityManagerService extends ActivityManagerNative
}
} else if ("system".equals(componentProcessName)) {
result = true;
+ } else if (UserHandle.isSameApp(aInfo.uid, Process.PHONE_UID)
+ && (flags & ServiceInfo.FLAG_SINGLE_USER) != 0) {
+ // Phone app is allowed to export singleuser providers.
+ result = true;
} else {
// App with pre-defined UID, check if it's a persistent app
result = (aInfo.flags & ApplicationInfo.FLAG_PERSISTENT) != 0;
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 2b55bf55ad57..0b07f0a12032 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -11410,7 +11410,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public void replacePreferredActivity(IntentFilter filter, int match,
- ComponentName[] set, ComponentName activity) {
+ ComponentName[] set, ComponentName activity, int userId) {
if (filter.countActions() != 1) {
throw new IllegalArgumentException(
"replacePreferredActivity expects filter to have only 1 action.");
@@ -11423,11 +11423,15 @@ public class PackageManagerService extends IPackageManager.Stub {
"replacePreferredActivity expects filter to have no data authorities, " +
"paths, or types; and at most one scheme.");
}
+
+ final int callingUid = Binder.getCallingUid();
+ enforceCrossUserPermission(callingUid, userId, true, "replace preferred activity");
+ final int callingUserId = UserHandle.getUserId(callingUid);
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 replacePreferredActivity() from uid "
+ Binder.getCallingUid());
@@ -11437,7 +11441,6 @@ public class PackageManagerService extends IPackageManager.Stub {
android.Manifest.permission.SET_PREFERRED_APPLICATIONS, null);
}
- final int callingUserId = UserHandle.getCallingUserId();
PreferredIntentResolver pir = mSettings.mPreferredActivities.get(callingUserId);
if (pir != null) {
Intent intent = new Intent(filter.getAction(0)).addCategory(filter.getCategory(0));