Loading api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -45106,6 +45106,7 @@ package android.telephony { method public long getDataLimitBytes(); method public long getDataUsageBytes(); method public long getDataUsageTime(); method @Nullable public int[] getNetworkTypes(); method @Nullable public CharSequence getSummary(); method @Nullable public CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); Loading @@ -45125,6 +45126,7 @@ package android.telephony { method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period); method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int); method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long); method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@Nullable int[]); method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence); method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence); } core/java/android/net/INetworkPolicyListener.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package android.net; import android.telephony.SubscriptionPlan; /** {@hide} */ oneway interface INetworkPolicyListener { Loading @@ -22,5 +23,6 @@ oneway interface INetworkPolicyListener { void onMeteredIfacesChanged(in String[] meteredIfaces); void onRestrictBackgroundChanged(boolean restrictBackground); void onUidPoliciesChanged(int uid, int uidPolicies); void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask); void onSubscriptionOverride(int subId, int overrideMask, int overrideValue); void onSubscriptionPlansChanged(int subId, in SubscriptionPlan[] plans); } core/java/android/net/INetworkPolicyManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ interface INetworkPolicyManager { SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage); void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage); String getSubscriptionPlansOwner(int subId); void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask, long timeoutMillis, String callingPackage); void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long timeoutMillis, String callingPackage); void factoryReset(String subscriber); Loading core/java/android/net/NetworkPolicyManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.net.wifi.WifiInfo; import android.os.Build; import android.os.RemoteException; import android.os.UserHandle; import android.telephony.SubscriptionPlan; import android.util.DebugUtils; import android.util.Pair; import android.util.Range; Loading Loading @@ -380,7 +381,8 @@ public class NetworkPolicyManager { @Override public void onMeteredIfacesChanged(String[] meteredIfaces) { } @Override public void onRestrictBackgroundChanged(boolean restrictBackground) { } @Override public void onUidPoliciesChanged(int uid, int uidPolicies) { } @Override public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask) { } @Override public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue) { } @Override public void onSubscriptionPlansChanged(int subId, SubscriptionPlan[] plans) { } } } services/core/java/com/android/server/net/NetworkPolicyManagerService.java +64 −21 Original line number Diff line number Diff line Loading @@ -217,7 +217,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.PhoneConstants; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ConcurrentUtils; Loading Loading @@ -385,6 +384,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final int MSG_SUBSCRIPTION_OVERRIDE = 16; private static final int MSG_METERED_RESTRICTED_PACKAGES_CHANGED = 17; private static final int MSG_SET_NETWORK_TEMPLATE_ENABLED = 18; private static final int MSG_SUBSCRIPTION_PLANS_CHANGED = 19; private static final int UID_MSG_STATE_CHANGED = 100; private static final int UID_MSG_GONE = 101; Loading Loading @@ -3069,6 +3069,34 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mContext.enforceCallingOrSelfPermission(MANAGE_SUBSCRIPTION_PLANS, TAG); } private void enforceSubscriptionPlanValidity(SubscriptionPlan[] plans) { // nothing to check if no plans if (plans.length == 0) { return; } long applicableNetworkTypes = 0; boolean allNetworks = false; for (SubscriptionPlan plan : plans) { if (plan.getNetworkTypes() == null) { allNetworks = true; } else { if ((applicableNetworkTypes & plan.getNetworkTypesBitMask()) != 0) { throw new IllegalArgumentException( "Multiple subscription plans defined for a single network type."); } else { applicableNetworkTypes |= plan.getNetworkTypesBitMask(); } } } // ensure at least one plan applies for every network type if (!allNetworks) { throw new IllegalArgumentException( "No generic subscription plan that applies to all network types."); } } @Override public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); Loading Loading @@ -3233,6 +3261,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @Override public void setSubscriptionPlans(int subId, SubscriptionPlan[] plans, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); enforceSubscriptionPlanValidity(plans); for (SubscriptionPlan plan : plans) { Preconditions.checkNotNull(plan); Loading Loading @@ -3261,6 +3290,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId); mContext.sendBroadcast(intent, android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS); mHandler.sendMessage( mHandler.obtainMessage(MSG_SUBSCRIPTION_PLANS_CHANGED, subId, 0, plans)); } finally { Binder.restoreCallingIdentity(token); } Loading @@ -3287,7 +3318,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @Override public void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask, long timeoutMillis, String callingPackage) { long timeoutMillis, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); // We can only override when carrier told us about plans Loading @@ -3305,16 +3336,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final boolean overrideEnabled = Settings.Global.getInt(mContext.getContentResolver(), NETPOLICY_OVERRIDE_ENABLED, 1) != 0; if (overrideEnabled || overrideValue == 0) { SomeArgs args = SomeArgs.obtain(); args.arg1 = subId; args.arg2 = overrideMask; args.arg3 = overrideValue; args.arg4 = networkTypeMask; mHandler.sendMessage(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, args)); mHandler.sendMessage(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, overrideMask, overrideValue, subId)); if (timeoutMillis > 0) { args.arg3 = 0; mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, args), timeoutMillis); mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, overrideMask, 0, subId), timeoutMillis); } } } Loading Loading @@ -4450,11 +4476,20 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } private void dispatchSubscriptionOverride(INetworkPolicyListener listener, int subId, int overrideMask, int overrideValue, long networkTypeMask) { int overrideMask, int overrideValue) { if (listener != null) { try { listener.onSubscriptionOverride(subId, overrideMask, overrideValue, networkTypeMask); listener.onSubscriptionOverride(subId, overrideMask, overrideValue); } catch (RemoteException ignored) { } } } private void dispatchSubscriptionPlansChanged(INetworkPolicyListener listener, int subId, SubscriptionPlan[] plans) { if (listener != null) { try { listener.onSubscriptionPlansChanged(subId, plans); } catch (RemoteException ignored) { } } Loading Loading @@ -4555,16 +4590,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return true; } case MSG_SUBSCRIPTION_OVERRIDE: { final SomeArgs args = (SomeArgs) msg.obj; final int subId = (int) args.arg1; final int overrideMask = (int) args.arg2; final int overrideValue = (int) args.arg3; final long networkTypeMask = (long) args.arg4; final int overrideMask = msg.arg1; final int overrideValue = msg.arg2; final int subId = (int) msg.obj; final int length = mListeners.beginBroadcast(); for (int i = 0; i < length; i++) { final INetworkPolicyListener listener = mListeners.getBroadcastItem(i); dispatchSubscriptionOverride(listener, subId, overrideMask, overrideValue, networkTypeMask); dispatchSubscriptionOverride(listener, subId, overrideMask, overrideValue); } mListeners.finishBroadcast(); return true; Loading @@ -4581,6 +4613,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { setNetworkTemplateEnabledInner(template, enabled); return true; } case MSG_SUBSCRIPTION_PLANS_CHANGED: { final SubscriptionPlan[] plans = (SubscriptionPlan[]) msg.obj; final int subId = msg.arg1; final int length = mListeners.beginBroadcast(); for (int i = 0; i < length; i++) { final INetworkPolicyListener listener = mListeners.getBroadcastItem(i); dispatchSubscriptionPlansChanged(listener, subId, plans); } mListeners.finishBroadcast(); return true; } default: { return false; } Loading Loading
api/current.txt +2 −0 Original line number Diff line number Diff line Loading @@ -45106,6 +45106,7 @@ package android.telephony { method public long getDataLimitBytes(); method public long getDataUsageBytes(); method public long getDataUsageTime(); method @Nullable public int[] getNetworkTypes(); method @Nullable public CharSequence getSummary(); method @Nullable public CharSequence getTitle(); method public void writeToParcel(android.os.Parcel, int); Loading @@ -45125,6 +45126,7 @@ package android.telephony { method public static android.telephony.SubscriptionPlan.Builder createRecurring(java.time.ZonedDateTime, java.time.Period); method public android.telephony.SubscriptionPlan.Builder setDataLimit(long, int); method public android.telephony.SubscriptionPlan.Builder setDataUsage(long, long); method @NonNull public android.telephony.SubscriptionPlan.Builder setNetworkTypes(@Nullable int[]); method public android.telephony.SubscriptionPlan.Builder setSummary(@Nullable CharSequence); method public android.telephony.SubscriptionPlan.Builder setTitle(@Nullable CharSequence); }
core/java/android/net/INetworkPolicyListener.aidl +3 −1 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package android.net; import android.telephony.SubscriptionPlan; /** {@hide} */ oneway interface INetworkPolicyListener { Loading @@ -22,5 +23,6 @@ oneway interface INetworkPolicyListener { void onMeteredIfacesChanged(in String[] meteredIfaces); void onRestrictBackgroundChanged(boolean restrictBackground); void onUidPoliciesChanged(int uid, int uidPolicies); void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask); void onSubscriptionOverride(int subId, int overrideMask, int overrideValue); void onSubscriptionPlansChanged(int subId, in SubscriptionPlan[] plans); }
core/java/android/net/INetworkPolicyManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ interface INetworkPolicyManager { SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage); void setSubscriptionPlans(int subId, in SubscriptionPlan[] plans, String callingPackage); String getSubscriptionPlansOwner(int subId); void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask, long timeoutMillis, String callingPackage); void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long timeoutMillis, String callingPackage); void factoryReset(String subscriber); Loading
core/java/android/net/NetworkPolicyManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import android.net.wifi.WifiInfo; import android.os.Build; import android.os.RemoteException; import android.os.UserHandle; import android.telephony.SubscriptionPlan; import android.util.DebugUtils; import android.util.Pair; import android.util.Range; Loading Loading @@ -380,7 +381,8 @@ public class NetworkPolicyManager { @Override public void onMeteredIfacesChanged(String[] meteredIfaces) { } @Override public void onRestrictBackgroundChanged(boolean restrictBackground) { } @Override public void onUidPoliciesChanged(int uid, int uidPolicies) { } @Override public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask) { } @Override public void onSubscriptionOverride(int subId, int overrideMask, int overrideValue) { } @Override public void onSubscriptionPlansChanged(int subId, SubscriptionPlan[] plans) { } } }
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +64 −21 Original line number Diff line number Diff line Loading @@ -217,7 +217,6 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.PhoneConstants; import com.android.internal.util.ArrayUtils; import com.android.internal.util.ConcurrentUtils; Loading Loading @@ -385,6 +384,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final int MSG_SUBSCRIPTION_OVERRIDE = 16; private static final int MSG_METERED_RESTRICTED_PACKAGES_CHANGED = 17; private static final int MSG_SET_NETWORK_TEMPLATE_ENABLED = 18; private static final int MSG_SUBSCRIPTION_PLANS_CHANGED = 19; private static final int UID_MSG_STATE_CHANGED = 100; private static final int UID_MSG_GONE = 101; Loading Loading @@ -3069,6 +3069,34 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mContext.enforceCallingOrSelfPermission(MANAGE_SUBSCRIPTION_PLANS, TAG); } private void enforceSubscriptionPlanValidity(SubscriptionPlan[] plans) { // nothing to check if no plans if (plans.length == 0) { return; } long applicableNetworkTypes = 0; boolean allNetworks = false; for (SubscriptionPlan plan : plans) { if (plan.getNetworkTypes() == null) { allNetworks = true; } else { if ((applicableNetworkTypes & plan.getNetworkTypesBitMask()) != 0) { throw new IllegalArgumentException( "Multiple subscription plans defined for a single network type."); } else { applicableNetworkTypes |= plan.getNetworkTypesBitMask(); } } } // ensure at least one plan applies for every network type if (!allNetworks) { throw new IllegalArgumentException( "No generic subscription plan that applies to all network types."); } } @Override public SubscriptionPlan[] getSubscriptionPlans(int subId, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); Loading Loading @@ -3233,6 +3261,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @Override public void setSubscriptionPlans(int subId, SubscriptionPlan[] plans, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); enforceSubscriptionPlanValidity(plans); for (SubscriptionPlan plan : plans) { Preconditions.checkNotNull(plan); Loading Loading @@ -3261,6 +3290,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId); mContext.sendBroadcast(intent, android.Manifest.permission.MANAGE_SUBSCRIPTION_PLANS); mHandler.sendMessage( mHandler.obtainMessage(MSG_SUBSCRIPTION_PLANS_CHANGED, subId, 0, plans)); } finally { Binder.restoreCallingIdentity(token); } Loading @@ -3287,7 +3318,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { @Override public void setSubscriptionOverride(int subId, int overrideMask, int overrideValue, long networkTypeMask, long timeoutMillis, String callingPackage) { long timeoutMillis, String callingPackage) { enforceSubscriptionPlanAccess(subId, Binder.getCallingUid(), callingPackage); // We can only override when carrier told us about plans Loading @@ -3305,16 +3336,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final boolean overrideEnabled = Settings.Global.getInt(mContext.getContentResolver(), NETPOLICY_OVERRIDE_ENABLED, 1) != 0; if (overrideEnabled || overrideValue == 0) { SomeArgs args = SomeArgs.obtain(); args.arg1 = subId; args.arg2 = overrideMask; args.arg3 = overrideValue; args.arg4 = networkTypeMask; mHandler.sendMessage(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, args)); mHandler.sendMessage(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, overrideMask, overrideValue, subId)); if (timeoutMillis > 0) { args.arg3 = 0; mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, args), timeoutMillis); mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SUBSCRIPTION_OVERRIDE, overrideMask, 0, subId), timeoutMillis); } } } Loading Loading @@ -4450,11 +4476,20 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } private void dispatchSubscriptionOverride(INetworkPolicyListener listener, int subId, int overrideMask, int overrideValue, long networkTypeMask) { int overrideMask, int overrideValue) { if (listener != null) { try { listener.onSubscriptionOverride(subId, overrideMask, overrideValue, networkTypeMask); listener.onSubscriptionOverride(subId, overrideMask, overrideValue); } catch (RemoteException ignored) { } } } private void dispatchSubscriptionPlansChanged(INetworkPolicyListener listener, int subId, SubscriptionPlan[] plans) { if (listener != null) { try { listener.onSubscriptionPlansChanged(subId, plans); } catch (RemoteException ignored) { } } Loading Loading @@ -4555,16 +4590,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return true; } case MSG_SUBSCRIPTION_OVERRIDE: { final SomeArgs args = (SomeArgs) msg.obj; final int subId = (int) args.arg1; final int overrideMask = (int) args.arg2; final int overrideValue = (int) args.arg3; final long networkTypeMask = (long) args.arg4; final int overrideMask = msg.arg1; final int overrideValue = msg.arg2; final int subId = (int) msg.obj; final int length = mListeners.beginBroadcast(); for (int i = 0; i < length; i++) { final INetworkPolicyListener listener = mListeners.getBroadcastItem(i); dispatchSubscriptionOverride(listener, subId, overrideMask, overrideValue, networkTypeMask); dispatchSubscriptionOverride(listener, subId, overrideMask, overrideValue); } mListeners.finishBroadcast(); return true; Loading @@ -4581,6 +4613,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { setNetworkTemplateEnabledInner(template, enabled); return true; } case MSG_SUBSCRIPTION_PLANS_CHANGED: { final SubscriptionPlan[] plans = (SubscriptionPlan[]) msg.obj; final int subId = msg.arg1; final int length = mListeners.beginBroadcast(); for (int i = 0; i < length; i++) { final INetworkPolicyListener listener = mListeners.getBroadcastItem(i); dispatchSubscriptionPlansChanged(listener, subId, plans); } mListeners.finishBroadcast(); return true; } default: { return false; } Loading