Use helper method for determining whether eSIM is supported

It turns out to be more complicated than I had thought to determine if a
device should be considered to support eSIM. But the good news is that
we already had a helper method for this - this CL switches to using it
in some code for DSDS UI.

Fixes: 129061243
Test: make RunSettingsRoboTests
Change-Id: I41e500eb70b6c6b725c0ddf09fe1ca1a69df4563
This commit is contained in:
Antony Sargent
2019-04-09 09:49:57 -07:00
parent 81f31ef4d3
commit f5bc241627
5 changed files with 22 additions and 11 deletions

View File

@@ -24,12 +24,12 @@ import android.content.Intent;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.euicc.EuiccManager;
import android.util.ArrayMap; import android.util.ArrayMap;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.network.telephony.MobileNetworkActivity; import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
import java.util.List; import java.util.List;
@@ -81,8 +81,8 @@ public class MobileNetworkListController extends AbstractPreferenceController im
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreferenceScreen = screen; mPreferenceScreen = screen;
final EuiccManager euiccManager = mContext.getSystemService(EuiccManager.class); mPreferenceScreen.findPreference(KEY_ADD_MORE).setVisible(
mPreferenceScreen.findPreference(KEY_ADD_MORE).setVisible(euiccManager.isEnabled()); MobileNetworkUtils.showEuiccSettings(mContext));
update(); update();
} }

View File

@@ -28,6 +28,7 @@ import android.telephony.euicc.EuiccManager;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.network.telephony.MobileNetworkActivity; import com.android.settings.network.telephony.MobileNetworkActivity;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.widget.AddPreference; import com.android.settings.widget.AddPreference;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -49,7 +50,6 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
private SubscriptionsChangeListener mChangeListener; private SubscriptionsChangeListener mChangeListener;
private EuiccManager mEuiccManager;
private AddPreference mPreference; private AddPreference mPreference;
/** /**
@@ -70,7 +70,6 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
public MobileNetworkSummaryController(Context context, Lifecycle lifecycle) { public MobileNetworkSummaryController(Context context, Lifecycle lifecycle) {
super(context); super(context);
mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
mEuiccManager = mContext.getSystemService(EuiccManager.class);
if (lifecycle != null) { if (lifecycle != null) {
mChangeListener = new SubscriptionsChangeListener(context, this); mChangeListener = new SubscriptionsChangeListener(context, this);
lifecycle.addObserver(this); lifecycle.addObserver(this);
@@ -99,7 +98,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions( final List<SubscriptionInfo> subs = SubscriptionUtil.getAvailableSubscriptions(
mSubscriptionManager); mSubscriptionManager);
if (subs.isEmpty()) { if (subs.isEmpty()) {
if (mEuiccManager.isEnabled()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) {
return mContext.getResources().getString( return mContext.getResources().getString(
R.string.mobile_network_summary_add_a_network); R.string.mobile_network_summary_add_a_network);
} }
@@ -133,7 +132,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
mSubscriptionManager); mSubscriptionManager);
if (subs.isEmpty()) { if (subs.isEmpty()) {
if (mEuiccManager.isEnabled()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) {
mPreference.setOnPreferenceClickListener((Preference pref) -> { mPreference.setOnPreferenceClickListener((Preference pref) -> {
startAddSimFlow(); startAddSimFlow();
return true; return true;
@@ -142,7 +141,7 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController
} else { } else {
// We have one or more existing subscriptions, so we want the plus button if eSIM is // We have one or more existing subscriptions, so we want the plus button if eSIM is
// supported. // supported.
if (mEuiccManager.isEnabled()) { if (MobileNetworkUtils.showEuiccSettings(mContext)) {
mPreference.setAddWidgetEnabled(!mChangeListener.isAirplaneModeOn()); mPreference.setAddWidgetEnabled(!mChangeListener.isAirplaneModeOn());
mPreference.setOnAddClickListener(p -> startAddSimFlow()); mPreference.setOnAddClickListener(p -> startAddSimFlow());
} }

View File

@@ -177,7 +177,7 @@ public class MobileNetworkUtils {
*/ */
public static boolean showEuiccSettings(Context context) { public static boolean showEuiccSettings(Context context) {
EuiccManager euiccManager = EuiccManager euiccManager =
(EuiccManager) context.getSystemService(Context.EUICC_SERVICE); (EuiccManager) context.getSystemService(EuiccManager.class);
if (!euiccManager.isEnabled()) { if (!euiccManager.isEnabled()) {
return false; return false;
} }
@@ -185,7 +185,7 @@ public class MobileNetworkUtils {
final ContentResolver cr = context.getContentResolver(); final ContentResolver cr = context.getContentResolver();
TelephonyManager tm = TelephonyManager tm =
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); (TelephonyManager) context.getSystemService(TelephonyManager.class);
String currentCountry = tm.getNetworkCountryIso().toLowerCase(); String currentCountry = tm.getNetworkCountryIso().toLowerCase();
String supportedCountries = String supportedCountries =
Settings.Global.getString(cr, Settings.Global.EUICC_SUPPORTED_COUNTRIES); Settings.Global.getString(cr, Settings.Global.EUICC_SUPPORTED_COUNTRIES);

View File

@@ -21,7 +21,6 @@ import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@@ -31,7 +30,9 @@ import static org.mockito.Mockito.when;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.provider.Settings;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager; import android.telephony.euicc.EuiccManager;
import org.junit.After; import org.junit.After;
@@ -52,6 +53,8 @@ import androidx.preference.PreferenceScreen;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class MobileNetworkListControllerTest { public class MobileNetworkListControllerTest {
@Mock
TelephonyManager mTelephonyManager;
@Mock @Mock
EuiccManager mEuiccManager; EuiccManager mEuiccManager;
@@ -69,7 +72,9 @@ public class MobileNetworkListControllerTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(Robolectric.setupActivity(Activity.class)); mContext = spy(Robolectric.setupActivity(Activity.class));
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager); when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.EUICC_PROVISIONED, 1);
when(mPreferenceScreen.getContext()).thenReturn(mContext); when(mPreferenceScreen.getContext()).thenReturn(mContext);
mAddMorePreference = new Preference(mContext); mAddMorePreference = new Preference(mContext);
when(mPreferenceScreen.findPreference(MobileNetworkListController.KEY_ADD_MORE)).thenReturn( when(mPreferenceScreen.findPreference(MobileNetworkListController.KEY_ADD_MORE)).thenReturn(
@@ -99,6 +104,7 @@ public class MobileNetworkListControllerTest {
@Test @Test
public void displayPreference_eSimSupported_addMoreLinkIsVisible() { public void displayPreference_eSimSupported_addMoreLinkIsVisible() {
when(mEuiccManager.isEnabled()).thenReturn(true); when(mEuiccManager.isEnabled()).thenReturn(true);
when(mTelephonyManager.getNetworkCountryIso()).thenReturn("");
mController.displayPreference(mPreferenceScreen); mController.displayPreference(mPreferenceScreen);
mController.onResume(); mController.onResume();
assertThat(mAddMorePreference.isVisible()).isTrue(); assertThat(mAddMorePreference.isVisible()).isTrue();

View File

@@ -33,6 +33,7 @@ import android.content.Intent;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccManager; import android.telephony.euicc.EuiccManager;
import android.text.TextUtils; import android.text.TextUtils;
@@ -59,6 +60,8 @@ public class MobileNetworkSummaryControllerTest {
@Mock @Mock
private Lifecycle mLifecycle; private Lifecycle mLifecycle;
@Mock @Mock
private TelephonyManager mTelephonyManager;
@Mock
private EuiccManager mEuiccManager; private EuiccManager mEuiccManager;
@Mock @Mock
private PreferenceScreen mPreferenceScreen; private PreferenceScreen mPreferenceScreen;
@@ -71,8 +74,11 @@ public class MobileNetworkSummaryControllerTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(Robolectric.setupActivity(Activity.class)); mContext = spy(Robolectric.setupActivity(Activity.class));
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager); when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
when(mTelephonyManager.getNetworkCountryIso()).thenReturn("");
when(mEuiccManager.isEnabled()).thenReturn(true); when(mEuiccManager.isEnabled()).thenReturn(true);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.EUICC_PROVISIONED, 1);
mController = new MobileNetworkSummaryController(mContext, mLifecycle); mController = new MobileNetworkSummaryController(mContext, mLifecycle);
mPreference = spy(new AddPreference(mContext, null)); mPreference = spy(new AddPreference(mContext, null));