Loading api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -46004,6 +46004,7 @@ package android.telephony { method public int getSimState(); method public int getSimState(int); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSubscriberId(); method public int getSubscriptionId(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getSubscriptionId(@NonNull android.telecom.PhoneAccountHandle); method public int getSupportedModemCount(); method @Nullable public String getTypeAllocationCode(); services/core/java/com/android/server/net/NetworkPolicyManagerService.java +12 −10 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.internal.util.CollectionUtils; import com.android.internal.util.ConcurrentUtils; import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; Loading Loading @@ -1803,7 +1804,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { /** * Examine all currently active subscriptions from * {@link SubscriptionManager#getActiveSubscriptionIdList()} and update * {@link SubscriptionManager#getActiveSubscriptionInfoList()} and update * internal data structures. * <p> * Callers <em>must not</em> hold any locks when this method called. Loading @@ -1814,21 +1815,22 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); final SubscriptionManager sm = mContext.getSystemService(SubscriptionManager.class); final List<SubscriptionInfo> subList = CollectionUtils.emptyIfNull( sm.getActiveSubscriptionInfoList()); final int[] subIds = ArrayUtils.defeatNullable(sm.getActiveSubscriptionIdList()); final List<String[]> mergedSubscriberIdsList = new ArrayList(); final SparseArray<String> subIdToSubscriberId = new SparseArray<>(subIds.length); for (int subId : subIds) { final String subscriberId = tm.getSubscriberId(subId); final SparseArray<String> subIdToSubscriberId = new SparseArray<>(subList.size()); for (SubscriptionInfo sub : subList) { final TelephonyManager tmSub = tm.createForSubscriptionId(sub.getSubscriptionId()); final String subscriberId = tmSub.getSubscriberId(); if (!TextUtils.isEmpty(subscriberId)) { subIdToSubscriberId.put(subId, subscriberId); subIdToSubscriberId.put(tmSub.getSubscriptionId(), subscriberId); } else { Slog.wtf(TAG, "Missing subscriberId for subId " + subId); Slog.wtf(TAG, "Missing subscriberId for subId " + tmSub.getSubscriptionId()); } String[] mergedSubscriberId = ArrayUtils.defeatNullable( tm.createForSubscriptionId(subId).getMergedImsisFromGroup()); final String[] mergedSubscriberId = ArrayUtils.defeatNullable( tmSub.getMergedImsisFromGroup()); mergedSubscriberIdsList.add(mergedSubscriberId); } Loading services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +41 −14 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ import android.os.SystemClock; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionPlan; import android.telephony.TelephonyManager; Loading Loading @@ -261,7 +262,7 @@ public class NetworkPolicyManagerServiceTest { private static final int USER_ID = 0; private static final int FAKE_SUB_ID = 3737373; private static final String FAKE_SUBSCRIBER_ID = "FAKE_SUB_ID"; private static final String FAKE_SUBSCRIBER_ID = "FAKE_SUBSCRIBER_ID"; private static final int DEFAULT_CYCLE_DAY = 1; private static final int INVALID_CARRIER_CONFIG_VALUE = -9999; private long mDefaultWarningBytes; // filled in with the actual default before tests are run Loading Loading @@ -1461,10 +1462,9 @@ public class NetworkPolicyManagerServiceTest { private PersistableBundle setupUpdateMobilePolicyCycleTests() throws RemoteException { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(FAKE_SUB_ID, FAKE_SUBSCRIBER_ID); PersistableBundle bundle = CarrierConfigManager.getDefaultConfig(); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(bundle); setNetworkPolicies(buildDefaultFakeMobilePolicy()); Loading @@ -1474,10 +1474,9 @@ public class NetworkPolicyManagerServiceTest { @Test public void testUpdateMobilePolicyCycleWithNullConfig() throws RemoteException { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(FAKE_SUB_ID, FAKE_SUBSCRIBER_ID); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(null); setNetworkPolicies(buildDefaultFakeMobilePolicy()); // smoke test to make sure no errors are raised Loading Loading @@ -1930,11 +1929,7 @@ public class NetworkPolicyManagerServiceTest { } private void expectMobileDefaults() throws Exception { when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn( new int[] { TEST_SUB_ID }); when(mTelephonyManager.getSubscriberId(TEST_SUB_ID)).thenReturn(TEST_IMSI); when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(TEST_SUB_ID, TEST_IMSI); doNothing().when(mTelephonyManager).setPolicyDataEnabled(anyBoolean(), anyInt()); expectNetworkState(false /* roaming */); } Loading Loading @@ -2093,6 +2088,38 @@ public class NetworkPolicyManagerServiceTest { return mock; } /** * Creates a mock {@link TelephonyManager} and {@link SubscriptionManager}. */ private void setupTelephonySubscriptionManagers(int subscriptionId, String subscriberId) { when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn( createSubscriptionInfoList(subscriptionId)); TelephonyManager subTelephonyManager; subTelephonyManager = mock(TelephonyManager.class); when(subTelephonyManager.getSubscriptionId()).thenReturn(subscriptionId); when(subTelephonyManager.getSubscriberId()).thenReturn(subscriberId); when(mTelephonyManager.createForSubscriptionId(subscriptionId)) .thenReturn(subTelephonyManager); } /** * Creates mock {@link SubscriptionInfo} from subscription id. */ private List<SubscriptionInfo> createSubscriptionInfoList(int subId) { final List<SubscriptionInfo> sub = new ArrayList<>(); sub.add(createSubscriptionInfo(subId)); return sub; } /** * Creates mock {@link SubscriptionInfo} from subscription id. */ private SubscriptionInfo createSubscriptionInfo(int subId) { return new SubscriptionInfo(subId, null, -1, null, null, -1, -1, null, -1, null, null, null, null, false, null, null); } /** * Custom Mockito answer used to verify async {@link INetworkPolicyListener} calls. * Loading telephony/java/android/telephony/TelephonyManager.java +13 −1 Original line number Diff line number Diff line Loading @@ -6425,7 +6425,19 @@ public class TelephonyManager { * Return an appropriate subscription ID for any situation. * * If this object has been created with {@link #createForSubscriptionId}, then the provided * subId is returned. Otherwise, the default subId will be returned. * subscription ID is returned. Otherwise, the default subscription ID will be returned. * */ public int getSubscriptionId() { return getSubId(); } /** * Return an appropriate subscription ID for any situation. * * If this object has been created with {@link #createForSubscriptionId}, then the provided * subscription ID is returned. Otherwise, the default subscription ID will be returned. * */ private int getSubId() { if (SubscriptionManager.isUsableSubIdValue(mSubId)) { Loading Loading
api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -46004,6 +46004,7 @@ package android.telephony { method public int getSimState(); method public int getSimState(int); method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public String getSubscriberId(); method public int getSubscriptionId(); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getSubscriptionId(@NonNull android.telecom.PhoneAccountHandle); method public int getSupportedModemCount(); method @Nullable public String getTypeAllocationCode();
services/core/java/com/android/server/net/NetworkPolicyManagerService.java +12 −10 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.util.ArrayUtils; import com.android.internal.util.CollectionUtils; import com.android.internal.util.ConcurrentUtils; import com.android.internal.util.DumpUtils; import com.android.internal.util.FastXmlSerializer; Loading Loading @@ -1803,7 +1804,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { /** * Examine all currently active subscriptions from * {@link SubscriptionManager#getActiveSubscriptionIdList()} and update * {@link SubscriptionManager#getActiveSubscriptionInfoList()} and update * internal data structures. * <p> * Callers <em>must not</em> hold any locks when this method called. Loading @@ -1814,21 +1815,22 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class); final SubscriptionManager sm = mContext.getSystemService(SubscriptionManager.class); final List<SubscriptionInfo> subList = CollectionUtils.emptyIfNull( sm.getActiveSubscriptionInfoList()); final int[] subIds = ArrayUtils.defeatNullable(sm.getActiveSubscriptionIdList()); final List<String[]> mergedSubscriberIdsList = new ArrayList(); final SparseArray<String> subIdToSubscriberId = new SparseArray<>(subIds.length); for (int subId : subIds) { final String subscriberId = tm.getSubscriberId(subId); final SparseArray<String> subIdToSubscriberId = new SparseArray<>(subList.size()); for (SubscriptionInfo sub : subList) { final TelephonyManager tmSub = tm.createForSubscriptionId(sub.getSubscriptionId()); final String subscriberId = tmSub.getSubscriberId(); if (!TextUtils.isEmpty(subscriberId)) { subIdToSubscriberId.put(subId, subscriberId); subIdToSubscriberId.put(tmSub.getSubscriptionId(), subscriberId); } else { Slog.wtf(TAG, "Missing subscriberId for subId " + subId); Slog.wtf(TAG, "Missing subscriberId for subId " + tmSub.getSubscriptionId()); } String[] mergedSubscriberId = ArrayUtils.defeatNullable( tm.createForSubscriptionId(subId).getMergedImsisFromGroup()); final String[] mergedSubscriberId = ArrayUtils.defeatNullable( tmSub.getMergedImsisFromGroup()); mergedSubscriberIdsList.add(mergedSubscriberId); } Loading
services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +41 −14 Original line number Diff line number Diff line Loading @@ -124,6 +124,7 @@ import android.os.SystemClock; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionPlan; import android.telephony.TelephonyManager; Loading Loading @@ -261,7 +262,7 @@ public class NetworkPolicyManagerServiceTest { private static final int USER_ID = 0; private static final int FAKE_SUB_ID = 3737373; private static final String FAKE_SUBSCRIBER_ID = "FAKE_SUB_ID"; private static final String FAKE_SUBSCRIBER_ID = "FAKE_SUBSCRIBER_ID"; private static final int DEFAULT_CYCLE_DAY = 1; private static final int INVALID_CARRIER_CONFIG_VALUE = -9999; private long mDefaultWarningBytes; // filled in with the actual default before tests are run Loading Loading @@ -1461,10 +1462,9 @@ public class NetworkPolicyManagerServiceTest { private PersistableBundle setupUpdateMobilePolicyCycleTests() throws RemoteException { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(FAKE_SUB_ID, FAKE_SUBSCRIBER_ID); PersistableBundle bundle = CarrierConfigManager.getDefaultConfig(); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(bundle); setNetworkPolicies(buildDefaultFakeMobilePolicy()); Loading @@ -1474,10 +1474,9 @@ public class NetworkPolicyManagerServiceTest { @Test public void testUpdateMobilePolicyCycleWithNullConfig() throws RemoteException { when(mConnManager.getAllNetworkState()).thenReturn(new NetworkState[0]); when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn(new int[]{FAKE_SUB_ID}); when(mTelephonyManager.getSubscriberId(FAKE_SUB_ID)).thenReturn(FAKE_SUBSCRIBER_ID); when(mTelephonyManager.createForSubscriptionId(FAKE_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(FAKE_SUB_ID, FAKE_SUBSCRIBER_ID); when(mCarrierConfigManager.getConfigForSubId(FAKE_SUB_ID)).thenReturn(null); setNetworkPolicies(buildDefaultFakeMobilePolicy()); // smoke test to make sure no errors are raised Loading Loading @@ -1930,11 +1929,7 @@ public class NetworkPolicyManagerServiceTest { } private void expectMobileDefaults() throws Exception { when(mSubscriptionManager.getActiveSubscriptionIdList()).thenReturn( new int[] { TEST_SUB_ID }); when(mTelephonyManager.getSubscriberId(TEST_SUB_ID)).thenReturn(TEST_IMSI); when(mTelephonyManager.createForSubscriptionId(TEST_SUB_ID)) .thenReturn(mock(TelephonyManager.class)); setupTelephonySubscriptionManagers(TEST_SUB_ID, TEST_IMSI); doNothing().when(mTelephonyManager).setPolicyDataEnabled(anyBoolean(), anyInt()); expectNetworkState(false /* roaming */); } Loading Loading @@ -2093,6 +2088,38 @@ public class NetworkPolicyManagerServiceTest { return mock; } /** * Creates a mock {@link TelephonyManager} and {@link SubscriptionManager}. */ private void setupTelephonySubscriptionManagers(int subscriptionId, String subscriberId) { when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn( createSubscriptionInfoList(subscriptionId)); TelephonyManager subTelephonyManager; subTelephonyManager = mock(TelephonyManager.class); when(subTelephonyManager.getSubscriptionId()).thenReturn(subscriptionId); when(subTelephonyManager.getSubscriberId()).thenReturn(subscriberId); when(mTelephonyManager.createForSubscriptionId(subscriptionId)) .thenReturn(subTelephonyManager); } /** * Creates mock {@link SubscriptionInfo} from subscription id. */ private List<SubscriptionInfo> createSubscriptionInfoList(int subId) { final List<SubscriptionInfo> sub = new ArrayList<>(); sub.add(createSubscriptionInfo(subId)); return sub; } /** * Creates mock {@link SubscriptionInfo} from subscription id. */ private SubscriptionInfo createSubscriptionInfo(int subId) { return new SubscriptionInfo(subId, null, -1, null, null, -1, -1, null, -1, null, null, null, null, false, null, null); } /** * Custom Mockito answer used to verify async {@link INetworkPolicyListener} calls. * Loading
telephony/java/android/telephony/TelephonyManager.java +13 −1 Original line number Diff line number Diff line Loading @@ -6425,7 +6425,19 @@ public class TelephonyManager { * Return an appropriate subscription ID for any situation. * * If this object has been created with {@link #createForSubscriptionId}, then the provided * subId is returned. Otherwise, the default subId will be returned. * subscription ID is returned. Otherwise, the default subscription ID will be returned. * */ public int getSubscriptionId() { return getSubId(); } /** * Return an appropriate subscription ID for any situation. * * If this object has been created with {@link #createForSubscriptionId}, then the provided * subscription ID is returned. Otherwise, the default subscription ID will be returned. * */ private int getSubId() { if (SubscriptionManager.isUsableSubIdValue(mSubId)) { Loading