import android.accounts.AuthenticatorDescription;
import android.app.Activity;
import android.app.FragmentManager;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
+import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.telephony.euicc.EuiccManager;
import android.util.Log;
});
}
- EuiccManager euiccManager =
- (EuiccManager) getActivity().getSystemService(Context.EUICC_SERVICE);
- if (euiccManager.isEnabled()) {
+ if (showWipeEuicc()) {
mEsimStorageContainer.setOnClickListener(new View.OnClickListener() {
@Override
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
}
+ /**
+ * Whether to show the checkbox to wipe the eUICC.
+ *
+ * <p>We show the checkbox on any device which supports eUICC as long as either the eUICC was
+ * ever provisioned (that is, at least one profile was ever downloaded onto it), or if the user
+ * has enabled development mode.
+ */
+ @VisibleForTesting
+ boolean showWipeEuicc() {
+ Context context = getContext();
+ if (!isEuiccEnabled(context)) {
+ return false;
+ }
+ ContentResolver cr = context.getContentResolver();
+ return Settings.Global.getInt(cr, Settings.Global.EUICC_PROVISIONED, 0) != 0
+ || Settings.Global.getInt(cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0;
+ }
+
+ @VisibleForTesting
+ protected boolean isEuiccEnabled(Context context) {
+ EuiccManager euiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
+ return euiccManager.isEnabled();
+ }
+
@VisibleForTesting
boolean hasReachedBottom(final ScrollView scrollView) {
if (scrollView.getChildCount() < 1) {
package com.android.settings;
import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import android.app.Activity;
import android.app.Fragment;
+import android.content.ContentResolver;
import android.os.Bundle;
+import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
}
@Test
+ public void testShowWipeEuicc_euiccDisabled() {
+ prepareEuiccState(
+ false /* isEuiccEnabled */, true /* isEuiccProvisioned */,
+ true /* isDevelopmentSettingsEnabled */);
+ assertThat(mMasterClear.showWipeEuicc()).isFalse();
+ }
+
+ @Test
+ public void testShowWipeEuicc_euiccEnabled_unprovisioned() {
+ prepareEuiccState(
+ true /* isEuiccEnabled */, false /* isEuiccProvisioned */,
+ false /* isDevelopmentSettingsEnabled */);
+ assertThat(mMasterClear.showWipeEuicc()).isFalse();
+ }
+
+ @Test
+ public void testShowWipeEuicc_euiccEnabled_provisioned() {
+ prepareEuiccState(
+ true /* isEuiccEnabled */, true /* isEuiccProvisioned */,
+ false /* isDevelopmentSettingsEnabled */);
+ assertThat(mMasterClear.showWipeEuicc()).isTrue();
+ }
+
+ @Test
+ public void testShowWipeEuicc_euiccEnabled_developmentSettingsEnabled() {
+ prepareEuiccState(
+ true /* isEuiccEnabled */, false /* isEuiccProvisioned */,
+ true /* isDevelopmentSettingsEnabled */);
+ assertThat(mMasterClear.showWipeEuicc()).isTrue();
+ }
+
+ @Test
+ public void testShowWipeEuicc_euiccEnabled_provisioned_developmentSettingsEnabled() {
+ prepareEuiccState(
+ true /* isEuiccEnabled */, true /* isEuiccProvisioned */,
+ true /* isDevelopmentSettingsEnabled */);
+ assertThat(mMasterClear.showWipeEuicc()).isTrue();
+ }
+
+ private void prepareEuiccState(
+ boolean isEuiccEnabled,
+ boolean isEuiccProvisioned,
+ boolean isDevelopmentSettingsEnabled) {
+ doReturn(mActivity).when(mMasterClear).getContext();
+ doReturn(isEuiccEnabled).when(mMasterClear).isEuiccEnabled(any());
+ ContentResolver cr = mActivity.getContentResolver();
+ Settings.Global.putInt(
+ cr, android.provider.Settings.Global.EUICC_PROVISIONED, isEuiccProvisioned ? 1 : 0);
+ Settings.Global.putInt(
+ cr, Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,
+ isDevelopmentSettingsEnabled ? 1 : 0);
+ }
+
+ @Test
public void testShowFinalConfirmation_EraseEsimChecked() {
ActivityForTest testActivity = new ActivityForTest();
when(mMasterClear.getActivity()).thenReturn(testActivity);