summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java14
-rw-r--r--telephony/java/android/telephony/SubscriptionInfo.java4
-rw-r--r--telephony/java/android/telephony/SubscriptionManager.java8
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java6
4 files changed, 21 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 319800d8b0b6..1f44d250c216 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -3201,23 +3201,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// Verify they're not lying about package name
mAppOps.checkPackage(callingUid, callingPackage);
- final SubscriptionManager sm;
- final SubscriptionInfo si;
final PersistableBundle config;
+ final TelephonyManager tm;
final long token = Binder.clearCallingIdentity();
try {
- sm = mContext.getSystemService(SubscriptionManager.class);
- si = sm.getActiveSubscriptionInfo(subId);
config = mCarrierConfigManager.getConfigForSubId(subId);
+ tm = mContext.getSystemService(TelephonyManager.class);
} finally {
Binder.restoreCallingIdentity(token);
}
- // First check: is caller the CarrierService?
- if (si != null) {
- if (si.isEmbedded() && sm.canManageSubscription(si, callingPackage)) {
- return;
- }
+ // First check: does caller have carrier privilege?
+ if (tm != null && tm.hasCarrierPrivileges(subId)) {
+ return;
}
// Second check: has the CarrierService delegated access?
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 8307c035aeb2..104cc7516aeb 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -149,13 +149,14 @@ public class SubscriptionInfo implements Parcelable {
/**
* The access rules for this subscription, if it is embedded and defines any.
+ * This does not include access rules for non-embedded subscriptions.
*/
@Nullable
private UiccAccessRule[] mNativeAccessRules;
/**
* The carrier certificates for this subscription that are saved in carrier configs.
- * The other carrier certificates are embedded on Uicc and stored as part of mNativeAccessRules.
+ * This does not include access rules from the Uicc, whether embedded or non-embedded.
*/
@Nullable
private UiccAccessRule[] mCarrierConfigAccessRules;
@@ -662,7 +663,6 @@ public class SubscriptionInfo implements Parcelable {
* is authorized to manage this subscription.
* TODO and fix it properly in R / master: either deprecate this and have 3 APIs
* native + carrier + all, or have this return all by default.
- * @throws UnsupportedOperationException if this subscription is not embedded.
* @hide
*/
@SystemApi
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 47a802f07b38..2908e94aad81 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -2702,6 +2702,10 @@ public class SubscriptionManager {
* Checks whether the app with the given context is authorized to manage the given subscription
* according to its metadata.
*
+ * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
+ * true). To check for permissions for non-embedded subscription as well,
+ * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}.
+ *
* @param info The subscription to check.
* @return whether the app is authorized to manage this subscription per its metadata.
*/
@@ -2714,6 +2718,10 @@ public class SubscriptionManager {
* be authorized if it is included in the {@link android.telephony.UiccAccessRule} of the
* {@link android.telephony.SubscriptionInfo} with the access status.
*
+ * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
+ * true). To check for permissions for non-embedded subscription as well,
+ * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}.
+ *
* @param info The subscription to check.
* @param packageName Package name of the app to check.
* @return whether the app is authorized to manage this subscription per its access rules.
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index a2467f2067ac..1cfb1d43eacc 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -8549,6 +8549,9 @@ public class TelephonyManager {
* call will return true. This access is granted by the owner of the UICC
* card and does not depend on the registered carrier.
*
+ * Note that this API applies to both physical and embedded subscriptions and
+ * is a superset of the checks done in SubscriptionManager#canManageSubscription.
+ *
* @return true if the app has carrier privileges.
*/
public boolean hasCarrierPrivileges() {
@@ -8562,6 +8565,9 @@ public class TelephonyManager {
* call will return true. This access is granted by the owner of the UICC
* card and does not depend on the registered carrier.
*
+ * Note that this API applies to both physical and embedded subscriptions and
+ * is a superset of the checks done in SubscriptionManager#canManageSubscription.
+ *
* @param subId The subscription to use.
* @return true if the app has carrier privileges.
* @hide