Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0b8472c authored by Jeff Davidson's avatar Jeff Davidson
Browse files

Remove eSIM reset checkbox and always perform the reset.

Due to substantial risk in landing the "retain profiles" flow that
would otherwise occur if the user elected not to wipe eSIM profiles
during a factory reset, we no longer expose this option to users
through the UI. Instead, we show affected users messaging indicating
that their eSIM will be wiped unconditionally.

The underlying plumbing is retained to keep the change small and to
make it easier to revert back to a checkbox when the rest of the
platform supports it.

Change-Id: Ida7df14d81ffc4cb6b4b414928d3ce7e5c78594b
Fixes: 64081853
Test: TreeHugger
parent 7b445d59
Loading
Loading
Loading
Loading
+13 −32
Original line number Diff line number Diff line
@@ -45,6 +45,13 @@
                android:visibility="gone"
                android:textSize="18sp"
                android:text="@string/master_clear_desc_also_erases_external" />
            <TextView android:id="@+id/also_erases_esim"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:includeFontPadding="false"
                android:visibility="gone"
                android:textSize="18sp"
                android:text="@string/master_clear_desc_also_erases_esim" />
            <TextView android:id="@+id/accounts_label"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
@@ -65,6 +72,12 @@
                android:visibility="gone"
                android:textSize="18sp"
                android:text="@string/master_clear_other_users_present" />
            <TextView android:id="@+id/no_cancel_mobile_plan"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"
                android:textSize="18sp"
                android:text="@string/master_clear_desc_no_cancel_mobile_plan" />
            <TextView android:id="@+id/erase_external_option_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
@@ -102,38 +115,6 @@
                        android:text="@string/erase_external_storage_description" />
                </LinearLayout>
            </LinearLayout>
            <LinearLayout android:id="@+id/erase_esim_container"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:focusable="true"
                    android:clickable="true">
                <CheckBox android:id="@+id/erase_esim"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:paddingEnd="8dp"
                        android:focusable="false"
                        android:clickable="false"
                        android:duplicateParentState="true" />
                <LinearLayout android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        android:orientation="vertical">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingTop="12dp"
                        android:textSize="18sp"
                        android:text="@string/erase_esim_storage" />
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingTop="4sp"
                        android:textSize="14sp"
                        android:text="@string/erase_esim_storage_description" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
    <Button
+5 −1
Original line number Diff line number Diff line
@@ -3131,13 +3131,17 @@
    <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc" product="tablet">"This will erase all data from your tablet\u2019s <b>internal storage</b>, including:\n\n<li>Your Google account</li>\n<li>System and app data and settings</li>\n<li>Downloaded apps</li>"</string>
    <!-- SD card & phone storage settings screen, message on screen after user selects Factory data reset [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc" product="default">"This will erase all data from your phone\u2019s <b>internal storage</b>, including:\n\n<li>Your Google account</li>\n<li>System and app data and settings</li>\n<li>Downloaded apps"</li></string>
    <string name="master_clear_desc" product="default">"This will erase all data from your phone\u2019s <b>internal storage</b>, including:\n\n<li>Your Google account</li>\n<li>System and app data and settings</li>\n<li>Downloaded apps</li>"</string>
    <!-- SD card & phone storage settings screen, instructions and list of current accounts.  The list of accounts follows this text[CHAR LIMIT=NONE] -->
    <string name="master_clear_accounts" product="default">"\n\nYou are currently signed into the following accounts:\n"</string>
    <!-- SD card & phone storage settings screen, notification if other users are present on the device [CHAR LIMIT=NONE] -->
    <string name="master_clear_other_users_present" product="default">"\n\nThere are other users present on this device.\n"</string>
    <!-- SD card & phone storage settings screen, list of items in user data storage (USB storage or SD card) that will be erased during this operation [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc_also_erases_external">"<li>Music</li>\n<li>Photos</li>\n<li>Other user data</li>"</string>
    <!-- SD card & phone storage settings screen, list of items on an eSIM (embedded SIM) that will be erased during this operation [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc_also_erases_esim">"<li>Carriers on eSIM</li>"</string>
    <!-- SD card & phone storage settings screen, notification if there are eSIM (embedded SIM) profiles present that the user's mobile service plan will not be canceled [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc_no_cancel_mobile_plan">"\n\nThis will not cancel your mobile service plan.</string>
    <!-- SD card & phone storage settings screen, instructions about whether to also erase the external storage (SD card) when erasing the internal storage [CHAR LIMIT=NONE] -->
    <string name="master_clear_desc_erase_external_storage" product="nosdcard">"\n\nTo clear music, pictures, and other user data, the <b>USB storage</b> needs to be erased."</string>
    <!-- SD card & phone storage settings screen, instructions about whether to also erase the external storage (SD card) when erasing the internal storage [CHAR LIMIT=NONE] -->
+8 −15
Original line number Diff line number Diff line
@@ -81,8 +81,6 @@ public class MasterClear extends OptionsMenuFragment {
    private Button mInitiateButton;
    private View mExternalStorageContainer;
    @VisibleForTesting CheckBox mExternalStorage;
    private View mEsimStorageContainer;
    @VisibleForTesting CheckBox mEsimStorage;
    private ScrollView mScrollView;

    private final OnGlobalLayoutListener mOnGlobalLayoutListener = new OnGlobalLayoutListener() {
@@ -126,7 +124,8 @@ public class MasterClear extends OptionsMenuFragment {
    void showFinalConfirmation() {
        Bundle args = new Bundle();
        args.putBoolean(ERASE_EXTERNAL_EXTRA, mExternalStorage.isChecked());
        args.putBoolean(ERASE_ESIMS_EXTRA, mEsimStorage.isChecked());
        // TODO: Offer the user a choice to wipe eSIMs when it is technically feasible to do so.
        args.putBoolean(ERASE_ESIMS_EXTRA, true);
        ((SettingsActivity) getActivity()).startPreferencePanel(
                this, MasterClearConfirm.class.getName(),
                args, R.string.master_clear_confirm_title, null, null, 0);
@@ -175,8 +174,6 @@ public class MasterClear extends OptionsMenuFragment {
        mInitiateButton.setOnClickListener(mInitiateListener);
        mExternalStorageContainer = mContentView.findViewById(R.id.erase_external_container);
        mExternalStorage = (CheckBox) mContentView.findViewById(R.id.erase_external);
        mEsimStorageContainer = mContentView.findViewById(R.id.erase_esim_container);
        mEsimStorage = (CheckBox) mContentView.findViewById(R.id.erase_esim);
        mScrollView = (ScrollView) mContentView.findViewById(R.id.master_clear_scrollview);

        /*
@@ -211,15 +208,11 @@ public class MasterClear extends OptionsMenuFragment {
        }

        if (showWipeEuicc()) {
            mEsimStorageContainer.setOnClickListener(new View.OnClickListener() {
            final View esimAlsoErased = mContentView.findViewById(R.id.also_erases_esim);
            esimAlsoErased.setVisibility(View.VISIBLE);

                @Override
                public void onClick(View v) {
                    mEsimStorage.toggle();
                }
            });
        } else {
            mEsimStorageContainer.setVisibility(View.GONE);
            final View noCancelMobilePlan = mContentView.findViewById(R.id.no_cancel_mobile_plan);
            noCancelMobilePlan.setVisibility(View.VISIBLE);
        }

        final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
@@ -245,9 +238,9 @@ public class MasterClear extends OptionsMenuFragment {
    }

    /**
     * Whether to show the checkbox to wipe the eUICC.
     * Whether to show strings indicating that the eUICC will be wiped.
     *
     * <p>We show the checkbox on any device which supports eUICC as long as the eUICC was ever
     * <p>We show the strings on any device which supports eUICC as long as the eUICC was ever
     * provisioned (that is, at least one profile was ever downloaded onto it).
     */
    @VisibleForTesting
+0 −26
Original line number Diff line number Diff line
@@ -122,32 +122,6 @@ public class MasterClearTest {
                cr, android.provider.Settings.Global.EUICC_PROVISIONED, isEuiccProvisioned ? 1 : 0);
    }

    @Test
    public void testShowFinalConfirmation_EraseEsimChecked() {
        ActivityForTest testActivity = new ActivityForTest();
        when(mMasterClear.getActivity()).thenReturn(testActivity);

        mMasterClear.mEsimStorage = (CheckBox) mContentView.findViewById(R.id.erase_esim);
        mMasterClear.mExternalStorage = (CheckBox) mContentView.findViewById(R.id.erase_external);
        mMasterClear.mEsimStorage.setChecked(true);
        mMasterClear.showFinalConfirmation();
        assertThat(testActivity.getArgs().getBoolean(MasterClear.ERASE_ESIMS_EXTRA, false))
                .isTrue();
    }

    @Test
    public void testShowFinalConfirmation_EraseEsimUnchecked() {
        ActivityForTest testActivity = new ActivityForTest();
        when(mMasterClear.getActivity()).thenReturn(testActivity);

        mMasterClear.mEsimStorage = (CheckBox) mContentView.findViewById(R.id.erase_esim);
        mMasterClear.mExternalStorage = (CheckBox) mContentView.findViewById(R.id.erase_external);
        mMasterClear.mEsimStorage.setChecked(false);
        mMasterClear.showFinalConfirmation();
        assertThat(testActivity.getArgs().getBoolean(MasterClear.ERASE_ESIMS_EXTRA, true))
                .isFalse();
    }

    @Test
    public void testHasReachedBottom_NotScrollDown_returnFalse() {
        initScrollView(100, 0, 200);