From 9c3ad34d6e507d98c38b36d1f9dcdc2b36f9344b Mon Sep 17 00:00:00 2001 From: Ling Ma Date: Fri, 19 Jan 2024 23:15:19 +0000 Subject: [PATCH] Wrap subManager creation with createForAllProfiles Since U, a sub can be associated with a particular profile, and thus in V we enforce filtering on the caller and only show the subs that are associated with the caller. However, in some cases the caller indeed needs to see all subs regardless of its association, e.g. sysUI. Therefore, a param isForAllProfile is added to indicate whether the caller intends to see all subs. Bug: 296076674 Test: voice call + data browsing Flag: ACONFIG com.android.internal.telephony.flags.enforce_subscription_user_filter DEVELOPMENT Change-Id: Ib5ccc841029a32ae9cf25d7a65b156e363d6b139 --- .../network/ActiveSubscriptionsListener.java | 3 +- .../SubscriptionsPreferenceController.java | 3 +- .../SwitchToEuiccSubscriptionSidecar.java | 2 +- .../network/SwitchToRemovableSlotSidecar.java | 2 +- .../settings/network/UiccSlotUtil.java | 6 +-- .../helper/SelectableSubscriptions.java | 2 +- .../network/telephony/MobileNetworkUtils.java | 39 +++++++------------ .../NetworkProviderWifiCallingGroup.java | 3 +- .../SubscriptionActionDialogActivity.java | 3 +- ...tworkSelectPagePreferenceControllerTest.kt | 3 +- .../ActiveSubscriptionsListenerTest.java | 1 + .../settings/network/UiccSlotUtilTest.java | 1 + .../telephony/MobileNetworkUtilsTest.java | 1 + .../NetworkProviderWifiCallingGroupTest.java | 2 +- ...TelephonyBasePreferenceControllerTest.java | 1 + 15 files changed, 34 insertions(+), 38 deletions(-) diff --git a/src/com/android/settings/network/ActiveSubscriptionsListener.java b/src/com/android/settings/network/ActiveSubscriptionsListener.java index 49675388b14..284cbb35b70 100644 --- a/src/com/android/settings/network/ActiveSubscriptionsListener.java +++ b/src/com/android/settings/network/ActiveSubscriptionsListener.java @@ -174,7 +174,8 @@ public abstract class ActiveSubscriptionsListener */ public SubscriptionManager getSubscriptionManager() { if (mSubscriptionManager == null) { - mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class); + mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class) + .createForAllUserProfiles(); } return mSubscriptionManager; } diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java index 6601828cd18..09ce02ee194 100644 --- a/src/com/android/settings/network/SubscriptionsPreferenceController.java +++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java @@ -153,7 +153,8 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl mPreferenceGroupKey = preferenceGroupKey; mStartOrder = startOrder; mTelephonyManager = context.getSystemService(TelephonyManager.class); - mSubscriptionManager = context.getSystemService(SubscriptionManager.class); + mSubscriptionManager = context.getSystemService(SubscriptionManager.class) + .createForAllUserProfiles(); mWifiManager = context.getSystemService(WifiManager.class); mSubscriptionPreferences = new ArrayMap<>(); mSubscriptionsListener = new SubscriptionsChangeListener(context, this); diff --git a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java index 0c3d61a2573..a26aa8a0ab1 100644 --- a/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java +++ b/src/com/android/settings/network/SwitchToEuiccSubscriptionSidecar.java @@ -101,7 +101,7 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar { } SubscriptionManager subscriptionManager = getContext().getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); mActiveSubInfos = SubscriptionUtil.getActiveSubscriptions(subscriptionManager); // To check whether the esim slot's port is active. If yes, skip setSlotMapping. If no, diff --git a/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java b/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java index a870f3bf9fc..4cf797f92b6 100644 --- a/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java +++ b/src/com/android/settings/network/SwitchToRemovableSlotSidecar.java @@ -92,7 +92,7 @@ public class SwitchToRemovableSlotSidecar extends EuiccOperationSidecar mPhysicalSlotId = physicalSlotId; mRemovedSubInfo = removedSubInfo; SubscriptionManager subscriptionManager = - getContext().getSystemService(SubscriptionManager.class); + getContext().getSystemService(SubscriptionManager.class).createForAllUserProfiles(); if (!mTelephonyManager.isMultiSimEnabled() && SubscriptionUtil.getActiveSubscriptions(subscriptionManager).stream().anyMatch( SubscriptionInfo::isEmbedded)) { diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java index f7737aa15f4..5175c233cb5 100644 --- a/src/com/android/settings/network/UiccSlotUtil.java +++ b/src/com/android/settings/network/UiccSlotUtil.java @@ -162,7 +162,7 @@ public class UiccSlotUtil { Log.d(TAG, "The SimSlotMapping: " + uiccSlotMappings); SubscriptionManager subscriptionManager = context.getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); int excludedLogicalSlotIndex = getExcludedLogicalSlotIndex(uiccSlotMappings, SubscriptionUtil.getActiveSubscriptions(subscriptionManager), removedSubInfo, telMgr.isMultiSimEnabled()); @@ -203,7 +203,7 @@ public class UiccSlotUtil { } SubscriptionManager subscriptionManager = context.getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); int excludedLogicalSlotIndex = getExcludedLogicalSlotIndex(uiccSlotMappings, SubscriptionUtil.getActiveSubscriptions(subscriptionManager), removedSubInfo, telMgr.isMultiSimEnabled()); @@ -222,7 +222,7 @@ public class UiccSlotUtil { List uiccCardInfos = telMgr.getUiccCardsInfo(); ImmutableList slotInfos = UiccSlotUtil.getSlotInfos(telMgr); SubscriptionManager subscriptionManager = context.getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); SubscriptionInfo subInfo = SubscriptionUtil.getSubById(subscriptionManager, subId); // checking whether this is the removable esim. If it is, then return the removable slot id. diff --git a/src/com/android/settings/network/helper/SelectableSubscriptions.java b/src/com/android/settings/network/helper/SelectableSubscriptions.java index 8e8f405e1fb..b4a3b577575 100644 --- a/src/com/android/settings/network/helper/SelectableSubscriptions.java +++ b/src/com/android/settings/network/helper/SelectableSubscriptions.java @@ -146,7 +146,7 @@ public class SelectableSubscriptions implements Callable getAvailableSubInfoList(Context context) { diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java index c1a05f1c062..cce12ec3cb0 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java +++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java @@ -357,7 +357,7 @@ public class MobileNetworkUtils { final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class) .createForSubscriptionId(subId); final SubscriptionManager subscriptionManager = context.getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); telephonyManager.setDataEnabled(enabled); if (disableOtherSubscriptions) { @@ -666,39 +666,26 @@ public class MobileNetworkUtils { * 2. Similar design which aligned with operator name displayed in status bar */ public static CharSequence getCurrentCarrierNameForDisplay(Context context, int subId) { - final SubscriptionManager sm = context.getSystemService(SubscriptionManager.class); - if (sm != null) { - final SubscriptionInfo subInfo = getSubscriptionInfo(sm, subId); - if (subInfo != null) { - return subInfo.getCarrierName(); - } + final SubscriptionInfo subInfo = getSubscriptionInfo(context, subId); + if (subInfo != null) { + return subInfo.getCarrierName(); } return getOperatorNameFromTelephonyManager(context); } public static CharSequence getCurrentCarrierNameForDisplay(Context context) { - final SubscriptionManager sm = context.getSystemService(SubscriptionManager.class); - if (sm != null) { - final int subId = sm.getDefaultSubscriptionId(); - final SubscriptionInfo subInfo = getSubscriptionInfo(sm, subId); - if (subInfo != null) { - return subInfo.getCarrierName(); - } + final SubscriptionInfo subInfo = getSubscriptionInfo(context, + SubscriptionManager.getDefaultSubscriptionId()); + if (subInfo != null) { + return subInfo.getCarrierName(); } return getOperatorNameFromTelephonyManager(context); } - private static SubscriptionInfo getSubscriptionInfo(SubscriptionManager subManager, int subId) { - List subInfos = subManager.getActiveSubscriptionInfoList(); - if (subInfos == null) { - return null; - } - for (SubscriptionInfo subInfo : subInfos) { - if (subInfo.getSubscriptionId() == subId) { - return subInfo; - } - } - return null; + private static @Nullable SubscriptionInfo getSubscriptionInfo(Context context, int subId) { + SubscriptionManager sm = context.getSystemService(SubscriptionManager.class); + if (sm == null) return null; + return sm.createForAllUserProfiles().getActiveSubscriptionInfo(subId); } private static String getOperatorNameFromTelephonyManager(Context context) { @@ -712,7 +699,7 @@ public class MobileNetworkUtils { private static int[] getActiveSubscriptionIdList(Context context) { final SubscriptionManager subscriptionManager = context.getSystemService( - SubscriptionManager.class); + SubscriptionManager.class).createForAllUserProfiles(); final List subInfoList = subscriptionManager.getActiveSubscriptionInfoList(); if (subInfoList == null) { diff --git a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java index cc0f22db495..c5879eef826 100644 --- a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java +++ b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java @@ -79,7 +79,8 @@ public class NetworkProviderWifiCallingGroup extends String preferenceGroupKey) { super(context); mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); - mSubscriptionManager = context.getSystemService(SubscriptionManager.class); + mSubscriptionManager = context.getSystemService(SubscriptionManager.class) + .createForAllUserProfiles(); mPreferenceGroupKey = preferenceGroupKey; mWifiCallingForSubPreferences = new ArrayMap<>(); setSubscriptionInfoList(context); diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java index 391158f065b..10f887529da 100644 --- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java +++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java @@ -43,7 +43,8 @@ public class SubscriptionActionDialogActivity extends FragmentActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mSubscriptionManager = getSystemService(SubscriptionManager.class); + mSubscriptionManager = getSystemService(SubscriptionManager.class) + .createForAllUserProfiles(); setProgressState(PROGRESS_IS_NOT_SHOWING); } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt index 0deeafbf9da..466a5d1476b 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceControllerTest.kt @@ -49,7 +49,8 @@ class OpenNetworkSelectPagePreferenceControllerTest { } private val mockSubscriptionManager = mock { - on { activeSubscriptionInfoList } doAnswer { listOf(subscriptionInfo) } + on { createForAllUserProfiles() } doReturn mock + on { getActiveSubscriptionInfo(SUB_ID) } doReturn subscriptionInfo } private val context: Context = spy(ApplicationProvider.getApplicationContext()) { diff --git a/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java b/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java index 27bc40c4847..40649a98ffd 100644 --- a/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java +++ b/tests/unit/src/com/android/settings/network/ActiveSubscriptionsListenerTest.java @@ -77,6 +77,7 @@ public class ActiveSubscriptionsListenerTest { mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + doReturn(mSubscriptionManager).when(mSubscriptionManager).createForAllUserProfiles(); mActiveSubscriptions = new ArrayList(); addMockSubscription(SUB_ID1); diff --git a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java index 5261b3ec445..75c49b35016 100644 --- a/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java +++ b/tests/unit/src/com/android/settings/network/UiccSlotUtilTest.java @@ -77,6 +77,7 @@ public class UiccSlotUtilTest { when(mTelephonyManager.getUiccCardsInfo()).thenReturn(mUiccCardInfo); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mSubscriptionManager.createForAllUserProfiles()).thenReturn(mSubscriptionManager); when(mSubscriptionManager.getAllSubscriptionInfoList()).thenReturn(mSubscriptionInfoList); } diff --git a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java index 1043fdfcd59..c23b53ed35a 100644 --- a/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/MobileNetworkUtilsTest.java @@ -113,6 +113,7 @@ public class MobileNetworkUtilsTest { mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mSubscriptionManager.createForAllUserProfiles()).thenReturn(mSubscriptionManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(SUB_ID_1)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(SUB_ID_2)).thenReturn(mTelephonyManager2); diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java index 9cd12fe09cf..95f83900574 100644 --- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java @@ -37,7 +37,6 @@ import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import android.util.FeatureFlagUtils; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceManager; @@ -100,6 +99,7 @@ public class NetworkProviderWifiCallingGroupTest { when(mContext.getSystemService(CarrierConfigManager.class)).thenReturn( mCarrierConfigManager); when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager); + when(mSubscriptionManager.createForAllUserProfiles()).thenReturn(mSubscriptionManager); when(mContext.getSystemService(TelecomManager.class)).thenReturn(mTelecomManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager); diff --git a/tests/unit/src/com/android/settings/network/telephony/TelephonyBasePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/TelephonyBasePreferenceControllerTest.java index 4fb31f20cf2..3588d38d2f4 100644 --- a/tests/unit/src/com/android/settings/network/telephony/TelephonyBasePreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/TelephonyBasePreferenceControllerTest.java @@ -55,6 +55,7 @@ public class TelephonyBasePreferenceControllerTest { mContext = spy(ApplicationProvider.getApplicationContext()); when(mContext.getSystemService(SubscriptionManager.class)) .thenReturn(mSubscriptionManager); + when(mSubscriptionManager.createForAllUserProfiles()).thenReturn(mSubscriptionManager); when(mSubscriptionInfo.getSubscriptionId()).thenReturn(VALID_SUB_ID); mPreferenceController = new TestPreferenceController(mContext, "prefKey"); }