Show default data SIM in Wi-Fi details when dual SIMs have the same carrier ID

- Because the wifiConfiguration is only save the carrier ID for EAP-SIM authentication

- If multiple SIMs have the same carrier ID, the Wi-Fi framework will use the default data SIM for EAP-SIM authentication

- Show default data SIM in Wi-Fi details settings, when dual SIMs have the same carrier ID

Bug: 233765468
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=WifiDetailPreferenceController2Test

Change-Id: I350fe637f506134770ccf316e47c0e225661bb6a
Merged-In: I350fe637f506134770ccf316e47c0e225661bb6a
This commit is contained in:
Weng Su
2022-08-09 00:59:52 +08:00
parent ec740c30d5
commit dc4ad09291
2 changed files with 99 additions and 18 deletions

View File

@@ -19,6 +19,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL;
import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
import android.app.Activity;
import android.app.AlertDialog;
@@ -49,7 +50,6 @@ import android.os.Handler;
import android.provider.Telephony.CarrierId;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -711,27 +711,17 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
// Checks if the SIM subscription is active.
final List<SubscriptionInfo> activeSubscriptionInfos = mContext
.getSystemService(SubscriptionManager.class).getActiveSubscriptionInfoList();
final int defaultDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
if (activeSubscriptionInfos != null) {
for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfos) {
final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
subscriptionInfo, mContext);
if (config.carrierId == subscriptionInfo.getCarrierId()) {
mEapSimSubscriptionPref.setSummary(displayName);
return;
}
// When it's UNKNOWN_CARRIER_ID, devices connects it with the SIM subscription of
// defaultDataSubscriptionId.
if (config.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID
&& defaultDataSubscriptionId == subscriptionInfo.getSubscriptionId()) {
mEapSimSubscriptionPref.setSummary(displayName);
return;
}
SubscriptionInfo info = fineSubscriptionInfo(config.carrierId, activeSubscriptionInfos,
SubscriptionManager.getDefaultDataSubscriptionId());
if (info != null) {
mEapSimSubscriptionPref.setSummary(
SubscriptionUtil.getUniqueSubscriptionDisplayName(info, mContext));
return;
}
}
if (config.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID) {
if (config.carrierId == UNKNOWN_CARRIER_ID) {
mEapSimSubscriptionPref.setSummary(R.string.wifi_no_related_sim_card);
return;
}
@@ -750,6 +740,25 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
null /* orderBy */);
}
@VisibleForTesting
SubscriptionInfo fineSubscriptionInfo(int carrierId,
List<SubscriptionInfo> activeSubscriptionInfos, int defaultDataSubscriptionId) {
SubscriptionInfo firstMatchedInfo = null;
for (SubscriptionInfo info : activeSubscriptionInfos) {
// When it's UNKNOWN_CARRIER_ID or matched with configured CarrierId,
// devices connects it with the SIM subscription of defaultDataSubscriptionId.
if (defaultDataSubscriptionId == info.getSubscriptionId()
&& (carrierId == info.getCarrierId() || carrierId == UNKNOWN_CARRIER_ID)) {
return info;
}
if (firstMatchedInfo == null && carrierId == info.getCarrierId()) {
firstMatchedInfo = info;
}
}
return firstMatchedInfo;
}
private void refreshMacAddress() {
final String macAddress = mWifiEntry.getMacAddress();
if (TextUtils.isEmpty(macAddress)) {