Added an option in reset menu in Settings to enable resetting Euicc data

only

Bug: 159650638
Fix: 159650638
Test: Local
Change-Id: Ia260b47a4dd0ddf0363740891b5e1d818c8631b7
This commit is contained in:
Peter Wang
2020-09-15 17:44:07 -07:00
parent d05ee585dc
commit ecd856eeeb
6 changed files with 212 additions and 3 deletions

View File

@@ -3718,10 +3718,13 @@
<!-- SD card & phone storage settings screen, message on screen after user selects Reset network settings [CHAR LIMIT=NONE] --> <!-- SD card & phone storage settings screen, message on screen after user selects Reset network settings [CHAR LIMIT=NONE] -->
<string name="reset_network_desc">This will reset all network settings, including:\n\n<li>Wi\u2011Fi</li>\n<li>Mobile data</li>\n<li>Bluetooth</li>"</string> <string name="reset_network_desc">This will reset all network settings, including:\n\n<li>Wi\u2011Fi</li>\n<li>Mobile data</li>\n<li>Bluetooth</li>"</string>
<!-- SD card & phone storage settings screen, title for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=50] --> <!-- Erase Euicc -->
<!-- Confirmation button of dialog to confirm resetting user's app preferences [CHAR LIMIT=NONE] -->
<string name="erase_euicc_data_button">Erase</string>
<!-- Erase Euicc dialog and SD card & phone storage settings screen, title for the menu option and checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=50] -->
<string name="reset_esim_title">Erase downloaded SIMs</string> <string name="reset_esim_title">Erase downloaded SIMs</string>
<!-- SD card & phone storage settings screen, message for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=NONE] --> <!-- Erase Euicc dialog and SD card & phone storage settings screen, message for the checkbox to let user decide whether erase eSIM data together [CHAR LIMIT=NONE] -->
<string name="reset_esim_desc">To download replacement SIMs, contact your carrier. This won\u2019t cancel any mobile service plans.</string> <string name="reset_esim_desc">This wont cancel any mobile service plans. To download replacement SIMs, contact your carrier.</string>
<!-- SD card & phone storage settings screen, button on screen after user selects Reset network settings --> <!-- SD card & phone storage settings screen, button on screen after user selects Reset network settings -->
<string name="reset_network_button_text">Reset settings</string> <string name="reset_network_button_text">Reset settings</string>

View File

@@ -33,6 +33,12 @@
android:key="reset_app_prefs" android:key="reset_app_prefs"
android:title="@string/reset_app_preferences" /> android:title="@string/reset_app_preferences" />
<!-- Erase Euicc data -->
<Preference
android:key="erase_euicc_data"
android:title="@string/reset_esim_title"
settings:controller="com.android.settings.network.EraseEuiccDataController" />
<!-- Factory reset --> <!-- Factory reset -->
<com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference
android:key="factory_reset" android:key="factory_reset"

View File

@@ -0,0 +1,56 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network;
import android.content.Context;
import android.text.TextUtils;
import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.system.ResetDashboardFragment;
/**
* Controller for erasing Euicc data
*/
public class EraseEuiccDataController extends BasePreferenceController implements
PreferenceControllerMixin {
private ResetDashboardFragment mHostFragment;
public EraseEuiccDataController(Context context, String preferenceKey) {
super(context, preferenceKey);
}
public void setFragment(ResetDashboardFragment hostFragment) {
mHostFragment = hostFragment;
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return false;
}
EraseEuiccDataDialogFragment.show(mHostFragment);
return true;
}
@Override
public int getAvailabilityStatus() {
return AVAILABLE_UNSEARCHABLE;
}
}

View File

@@ -0,0 +1,85 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.RecoverySystem;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.system.ResetDashboardFragment;
public class EraseEuiccDataDialogFragment extends InstrumentedDialogFragment implements
DialogInterface.OnClickListener {
public static final String TAG = "EraseEuiccDataDlg";
private static final String PACKAGE_NAME_EUICC_DATA_MANAGEMENT_CALLBACK =
"com.android.settings.network";
public static void show(ResetDashboardFragment host) {
final EraseEuiccDataDialogFragment dialog = new EraseEuiccDataDialogFragment();
dialog.setTargetFragment(host, 0 /* requestCode */);
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
dialog.show(manager, TAG);
}
@Override
public int getMetricsCategory() {
return SettingsEnums.RESET_EUICC;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle(R.string.reset_esim_title)
.setMessage(R.string.reset_esim_desc)
.setPositiveButton(R.string.erase_euicc_data_button, this)
.setNegativeButton(R.string.cancel, null)
.setOnDismissListener(this)
.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
Fragment fragment = getTargetFragment();
if (!(fragment instanceof ResetDashboardFragment)) {
Log.e(TAG, "getTargetFragment return unexpected type");
}
if (which == DialogInterface.BUTTON_POSITIVE) {
AsyncTask.execute(new Runnable() {
@Override
public void run() {
RecoverySystem.wipeEuiccData(
getContext(), PACKAGE_NAME_EUICC_DATA_MANAGEMENT_CALLBACK);
}
});
}
}
}

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.applications.manageapplications.ResetAppPrefPreferenceController; import com.android.settings.applications.manageapplications.ResetAppPrefPreferenceController;
import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.EraseEuiccDataController;
import com.android.settings.network.NetworkResetPreferenceController; import com.android.settings.network.NetworkResetPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -57,6 +58,12 @@ public class ResetDashboardFragment extends DashboardFragment {
return buildPreferenceControllers(context, getSettingsLifecycle()); return buildPreferenceControllers(context, getSettingsLifecycle());
} }
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(EraseEuiccDataController.class).setFragment(this);
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context, private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle) { Lifecycle lifecycle) {
final List<AbstractPreferenceController> controllers = new ArrayList<>(); final List<AbstractPreferenceController> controllers = new ArrayList<>();

View File

@@ -0,0 +1,52 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.network;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.core.BasePreferenceController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class EraseEuiccDataControllerTest {
private static final String ERASE_EUICC_DATA_PREFERENCE_KEY = "erase_euicc_data";
private EraseEuiccDataController mController;
@Before
public void setUp() {
Context context = ApplicationProvider.getApplicationContext();
mController = new EraseEuiccDataController(context, ERASE_EUICC_DATA_PREFERENCE_KEY);
}
@Test
public void getAvailabilityStatus_byDefault_true() {
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
}
}