Loading src/com/android/settings/network/MobileNetworkListController.java +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im mPreferences = new ArrayMap<>(); final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); for (SubscriptionInfo info : subscriptions) { final int subId = info.getSubscriptionId(); Preference pref = existingPreferences.remove(subId); Loading src/com/android/settings/network/MobileNetworkSummaryController.java +4 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; import android.content.Context; import android.content.Intent; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.euicc.EuiccManager; Loading Loading @@ -99,7 +100,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController @Override public CharSequence getSummary() { final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { return mContext.getResources().getString( Loading Loading @@ -132,7 +133,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController mPreference.setEnabled(!mChangeListener.isAirplaneModeOn()); final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { Loading @@ -154,6 +155,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController if (subs.size() == 1) { mPreference.setOnPreferenceClickListener((Preference pref) -> { final Intent intent = new Intent(mContext, MobileNetworkActivity.class); intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId()); mContext.startActivity(intent); return true; }); Loading src/com/android/settings/network/SubscriptionUtil.java +48 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,15 @@ package com.android.settings.network; import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT; import static com.android.internal.util.CollectionUtils.emptyIfNull; import android.content.Context; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.UiccSlotInfo; import android.text.TextUtils; import androidx.annotation.VisibleForTesting; Loading @@ -27,6 +34,7 @@ import java.util.Iterator; import java.util.List; public class SubscriptionUtil { private static final String TAG = "SubscriptionUtil"; private static List<SubscriptionInfo> sAvailableResultsForTesting; private static List<SubscriptionInfo> sActiveResultsForTesting; Loading @@ -44,21 +52,56 @@ public class SubscriptionUtil { if (sActiveResultsForTesting != null) { return sActiveResultsForTesting; } List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true); final List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true); if (subscriptions == null) { return new ArrayList<>(); } return subscriptions; } public static List<SubscriptionInfo> getAvailableSubscriptions(SubscriptionManager manager) { private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) { return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() && slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT; } public static List<SubscriptionInfo> getAvailableSubscriptions(Context context) { if (sAvailableResultsForTesting != null) { return sAvailableResultsForTesting; } List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList(); if (subscriptions == null) { subscriptions = new ArrayList<>(); final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class); final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class); List<SubscriptionInfo> subscriptions = new ArrayList<>(emptyIfNull(subMgr.getSelectableSubscriptionInfoList())); // Look for inactive but present physical SIMs that are missing from the selectable list. final List<UiccSlotInfo> missing = new ArrayList<>(); UiccSlotInfo[] slotsInfo = telMgr.getUiccSlotsInfo(); for (int i = 0; slotsInfo != null && i < slotsInfo.length; i++) { final UiccSlotInfo slotInfo = slotsInfo[i]; if (isInactiveInsertedPSim(slotInfo)) { final int index = slotInfo.getLogicalSlotIdx(); final String cardId = slotInfo.getCardId(); final boolean found = subscriptions.stream().anyMatch(info -> index == info.getSimSlotIndex() && cardId.equals(info.getCardString())); if (!found) { missing.add(slotInfo); } } } if (!missing.isEmpty()) { for (SubscriptionInfo info : subMgr.getAllSubscriptionInfoList()) { for (UiccSlotInfo slotInfo : missing) { if (info.getSimSlotIndex() == slotInfo.getLogicalSlotIdx() && info.getCardString().equals(slotInfo.getCardId())) { subscriptions.add(info); break; } } } } // With some carriers such as Google Fi which provide a sort of virtual service that spans // across multiple underlying networks, we end up with subscription entries for the // underlying networks that need to be hidden from the user in the UI. Loading src/com/android/settings/network/telephony/MobileNetworkActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.settings.R; import com.android.settings.core.FeatureFlags; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.network.SubscriptionUtil; import com.google.android.material.bottomnavigation.BottomNavigationView; Loading Loading @@ -165,7 +166,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity { final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL); if (subId != SUB_ID_NULL) { for (SubscriptionInfo subscription : mSubscriptionManager.getSelectableSubscriptionInfoList()) { SubscriptionUtil.getAvailableSubscriptions(this)) { if (subscription.getSubscriptionId() == subId) { return subscription; } Loading src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +3 −2 Original line number Diff line number Diff line Loading @@ -94,8 +94,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl return; } final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || subs.size() < 2) { mContext); if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || mSubscriptionManager.isSubscriptionEnabled(mSubId) && subs.size() < 2) { mSwitchBar.hide(); return; } Loading Loading
src/com/android/settings/network/MobileNetworkListController.java +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ public class MobileNetworkListController extends AbstractPreferenceController im mPreferences = new ArrayMap<>(); final List<SubscriptionInfo> subscriptions = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); for (SubscriptionInfo info : subscriptions) { final int subId = info.getSubscriptionId(); Preference pref = existingPreferences.remove(subId); Loading
src/com/android/settings/network/MobileNetworkSummaryController.java +4 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static androidx.lifecycle.Lifecycle.Event.ON_RESUME; import android.content.Context; import android.content.Intent; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.euicc.EuiccManager; Loading Loading @@ -99,7 +100,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController @Override public CharSequence getSummary() { final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { return mContext.getResources().getString( Loading Loading @@ -132,7 +133,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController mPreference.setEnabled(!mChangeListener.isAirplaneModeOn()); final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); mContext); if (subs.isEmpty()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) { Loading @@ -154,6 +155,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController if (subs.size() == 1) { mPreference.setOnPreferenceClickListener((Preference pref) -> { final Intent intent = new Intent(mContext, MobileNetworkActivity.class); intent.putExtra(Settings.EXTRA_SUB_ID, subs.get(0).getSubscriptionId()); mContext.startActivity(intent); return true; }); Loading
src/com/android/settings/network/SubscriptionUtil.java +48 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,15 @@ package com.android.settings.network; import static android.telephony.UiccSlotInfo.CARD_STATE_INFO_PRESENT; import static com.android.internal.util.CollectionUtils.emptyIfNull; import android.content.Context; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.UiccSlotInfo; import android.text.TextUtils; import androidx.annotation.VisibleForTesting; Loading @@ -27,6 +34,7 @@ import java.util.Iterator; import java.util.List; public class SubscriptionUtil { private static final String TAG = "SubscriptionUtil"; private static List<SubscriptionInfo> sAvailableResultsForTesting; private static List<SubscriptionInfo> sActiveResultsForTesting; Loading @@ -44,21 +52,56 @@ public class SubscriptionUtil { if (sActiveResultsForTesting != null) { return sActiveResultsForTesting; } List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true); final List<SubscriptionInfo> subscriptions = manager.getActiveSubscriptionInfoList(true); if (subscriptions == null) { return new ArrayList<>(); } return subscriptions; } public static List<SubscriptionInfo> getAvailableSubscriptions(SubscriptionManager manager) { private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) { return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() && slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT; } public static List<SubscriptionInfo> getAvailableSubscriptions(Context context) { if (sAvailableResultsForTesting != null) { return sAvailableResultsForTesting; } List<SubscriptionInfo> subscriptions = manager.getSelectableSubscriptionInfoList(); if (subscriptions == null) { subscriptions = new ArrayList<>(); final SubscriptionManager subMgr = context.getSystemService(SubscriptionManager.class); final TelephonyManager telMgr = context.getSystemService(TelephonyManager.class); List<SubscriptionInfo> subscriptions = new ArrayList<>(emptyIfNull(subMgr.getSelectableSubscriptionInfoList())); // Look for inactive but present physical SIMs that are missing from the selectable list. final List<UiccSlotInfo> missing = new ArrayList<>(); UiccSlotInfo[] slotsInfo = telMgr.getUiccSlotsInfo(); for (int i = 0; slotsInfo != null && i < slotsInfo.length; i++) { final UiccSlotInfo slotInfo = slotsInfo[i]; if (isInactiveInsertedPSim(slotInfo)) { final int index = slotInfo.getLogicalSlotIdx(); final String cardId = slotInfo.getCardId(); final boolean found = subscriptions.stream().anyMatch(info -> index == info.getSimSlotIndex() && cardId.equals(info.getCardString())); if (!found) { missing.add(slotInfo); } } } if (!missing.isEmpty()) { for (SubscriptionInfo info : subMgr.getAllSubscriptionInfoList()) { for (UiccSlotInfo slotInfo : missing) { if (info.getSimSlotIndex() == slotInfo.getLogicalSlotIdx() && info.getCardString().equals(slotInfo.getCardId())) { subscriptions.add(info); break; } } } } // With some carriers such as Google Fi which provide a sort of virtual service that spans // across multiple underlying networks, we end up with subscription entries for the // underlying networks that need to be hidden from the user in the UI. Loading
src/com/android/settings/network/telephony/MobileNetworkActivity.java +2 −1 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import com.android.settings.R; import com.android.settings.core.FeatureFlags; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.development.featureflags.FeatureFlagPersistent; import com.android.settings.network.SubscriptionUtil; import com.google.android.material.bottomnavigation.BottomNavigationView; Loading Loading @@ -165,7 +166,7 @@ public class MobileNetworkActivity extends SettingsBaseActivity { final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL); if (subId != SUB_ID_NULL) { for (SubscriptionInfo subscription : mSubscriptionManager.getSelectableSubscriptionInfoList()) { SubscriptionUtil.getAvailableSubscriptions(this)) { if (subscription.getSubscriptionId() == subId) { return subscription; } Loading
src/com/android/settings/network/telephony/MobileNetworkSwitchController.java +3 −2 Original line number Diff line number Diff line Loading @@ -94,8 +94,9 @@ public class MobileNetworkSwitchController extends BasePreferenceController impl return; } final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( mSubscriptionManager); if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || subs.size() < 2) { mContext); if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID || mSubscriptionManager.isSubscriptionEnabled(mSubId) && subs.size() < 2) { mSwitchBar.hide(); return; } Loading