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:
@@ -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_PARTIAL_CONNECTIVITY;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
|
||||||
|
import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
@@ -49,7 +50,6 @@ import android.os.Handler;
|
|||||||
import android.provider.Telephony.CarrierId;
|
import android.provider.Telephony.CarrierId;
|
||||||
import android.telephony.SubscriptionInfo;
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.FeatureFlagUtils;
|
import android.util.FeatureFlagUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -711,27 +711,17 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
|
|||||||
// Checks if the SIM subscription is active.
|
// Checks if the SIM subscription is active.
|
||||||
final List<SubscriptionInfo> activeSubscriptionInfos = mContext
|
final List<SubscriptionInfo> activeSubscriptionInfos = mContext
|
||||||
.getSystemService(SubscriptionManager.class).getActiveSubscriptionInfoList();
|
.getSystemService(SubscriptionManager.class).getActiveSubscriptionInfoList();
|
||||||
final int defaultDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
|
|
||||||
if (activeSubscriptionInfos != null) {
|
if (activeSubscriptionInfos != null) {
|
||||||
for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfos) {
|
SubscriptionInfo info = fineSubscriptionInfo(config.carrierId, activeSubscriptionInfos,
|
||||||
final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
|
SubscriptionManager.getDefaultDataSubscriptionId());
|
||||||
subscriptionInfo, mContext);
|
if (info != null) {
|
||||||
if (config.carrierId == subscriptionInfo.getCarrierId()) {
|
mEapSimSubscriptionPref.setSummary(
|
||||||
mEapSimSubscriptionPref.setSummary(displayName);
|
SubscriptionUtil.getUniqueSubscriptionDisplayName(info, mContext));
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (config.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID) {
|
if (config.carrierId == UNKNOWN_CARRIER_ID) {
|
||||||
mEapSimSubscriptionPref.setSummary(R.string.wifi_no_related_sim_card);
|
mEapSimSubscriptionPref.setSummary(R.string.wifi_no_related_sim_card);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -750,6 +740,25 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
|
|||||||
null /* orderBy */);
|
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() {
|
private void refreshMacAddress() {
|
||||||
final String macAddress = mWifiEntry.getMacAddress();
|
final String macAddress = mWifiEntry.getMacAddress();
|
||||||
if (TextUtils.isEmpty(macAddress)) {
|
if (TextUtils.isEmpty(macAddress)) {
|
||||||
|
@@ -58,6 +58,7 @@ import android.net.wifi.WifiInfo;
|
|||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
import android.telephony.SubscriptionInfo;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
@@ -108,6 +109,7 @@ import java.time.ZonedDateTime;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.FormatStyle;
|
import java.time.format.FormatStyle;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
// TODO(b/143326832): Should add test cases for connect button.
|
// TODO(b/143326832): Should add test cases for connect button.
|
||||||
@@ -1791,4 +1793,74 @@ public class WifiDetailPreferenceController2Test {
|
|||||||
|
|
||||||
return pref;
|
return pref;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fineSubscriptionInfo_noMatchedCarrierId_returnNull() {
|
||||||
|
setUpSpyController();
|
||||||
|
SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
|
||||||
|
SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 2222);
|
||||||
|
List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
|
||||||
|
|
||||||
|
SubscriptionInfo info = mController.fineSubscriptionInfo(3333, activeSubInfos, 1);
|
||||||
|
|
||||||
|
assertThat(info).isNull();
|
||||||
|
|
||||||
|
info = mController.fineSubscriptionInfo(3333, activeSubInfos, 2);
|
||||||
|
|
||||||
|
assertThat(info).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fineSubscriptionInfo_diffCarrierId_returnMatchedOne() {
|
||||||
|
setUpSpyController();
|
||||||
|
SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
|
||||||
|
SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 2222);
|
||||||
|
List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
|
||||||
|
|
||||||
|
SubscriptionInfo info = mController.fineSubscriptionInfo(1111, activeSubInfos, 1);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
|
||||||
|
|
||||||
|
info = mController.fineSubscriptionInfo(1111, activeSubInfos, 2);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
|
||||||
|
|
||||||
|
info = mController.fineSubscriptionInfo(2222, activeSubInfos, 1);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
|
||||||
|
|
||||||
|
info = mController.fineSubscriptionInfo(2222, activeSubInfos, 2);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void fineSubscriptionInfo_sameCarrierId_returnDefaultDataOne() {
|
||||||
|
setUpSpyController();
|
||||||
|
SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
|
||||||
|
SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 1111);
|
||||||
|
List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
|
||||||
|
|
||||||
|
SubscriptionInfo info = mController.fineSubscriptionInfo(1111, activeSubInfos, 1);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
|
||||||
|
|
||||||
|
info = mController.fineSubscriptionInfo(1111, activeSubInfos, 2);
|
||||||
|
|
||||||
|
assertThat(info).isNotNull();
|
||||||
|
assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
|
||||||
|
}
|
||||||
|
|
||||||
|
private SubscriptionInfo mockSubscriptionInfo(int subId, String displayName, int carrierId) {
|
||||||
|
SubscriptionInfo info = mock(SubscriptionInfo.class);
|
||||||
|
when(info.getSubscriptionId()).thenReturn(subId);
|
||||||
|
when(info.getDisplayName()).thenReturn(displayName);
|
||||||
|
when(info.getCarrierId()).thenReturn(carrierId);
|
||||||
|
return info;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user