Hide "Wipe eUICC" option when it isn't useful.
If a user never downloaded a profile onto their eUICC, there's no reason to offer the wipe option, and it would only cause confusion. But show the option nonetheless if developer options are enabled. Bug: 38460669 Test: TreeHugger / Unit test / Manual verification Change-Id: I51fb7b9e75c4f9a46ee0b24e64bddfafcbd48b14
This commit is contained in:
@@ -23,6 +23,7 @@ import android.accounts.AccountManager;
|
|||||||
import android.accounts.AuthenticatorDescription;
|
import android.accounts.AuthenticatorDescription;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.FragmentManager;
|
import android.app.FragmentManager;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
@@ -34,6 +35,7 @@ import android.os.Environment;
|
|||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.support.annotation.VisibleForTesting;
|
import android.support.annotation.VisibleForTesting;
|
||||||
import android.telephony.euicc.EuiccManager;
|
import android.telephony.euicc.EuiccManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -208,9 +210,7 @@ public class MasterClear extends OptionsMenuFragment
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
EuiccManager euiccManager =
|
if (showWipeEuicc()) {
|
||||||
(EuiccManager) getActivity().getSystemService(Context.EUICC_SERVICE);
|
|
||||||
if (euiccManager.isEnabled()) {
|
|
||||||
mEsimStorageContainer.setOnClickListener(new View.OnClickListener() {
|
mEsimStorageContainer.setOnClickListener(new View.OnClickListener() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -244,6 +244,30 @@ public class MasterClear extends OptionsMenuFragment
|
|||||||
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(mOnGlobalLayoutListener);
|
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
|
@VisibleForTesting
|
||||||
boolean hasReachedBottom(final ScrollView scrollView) {
|
boolean hasReachedBottom(final ScrollView scrollView) {
|
||||||
if (scrollView.getChildCount() < 1) {
|
if (scrollView.getChildCount() < 1) {
|
||||||
|
@@ -17,13 +17,18 @@
|
|||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
import static org.robolectric.Shadows.shadowOf;
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.content.ContentResolver;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.CheckBox;
|
import android.widget.CheckBox;
|
||||||
@@ -82,6 +87,60 @@ public class MasterClearTest {
|
|||||||
when(mScrollView.getChildCount()).thenReturn(1);
|
when(mScrollView.getChildCount()).thenReturn(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@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
|
@Test
|
||||||
public void testShowFinalConfirmation_EraseEsimChecked() {
|
public void testShowFinalConfirmation_EraseEsimChecked() {
|
||||||
ActivityForTest testActivity = new ActivityForTest();
|
ActivityForTest testActivity = new ActivityForTest();
|
||||||
|
Reference in New Issue
Block a user