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

Commit 0b5532f6 authored by Peter Wang's avatar Peter Wang Committed by Gerrit Code Review
Browse files

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

parents 7aa99fe9 66fd9dba
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -3689,10 +3689,13 @@
    <!-- 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>
    <!-- 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>
    <!-- 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>
    <!-- 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">This won’t 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 -->
    <string name="reset_network_button_text">Reset settings</string>
+6 −0
Original line number Diff line number Diff line
@@ -33,6 +33,12 @@
        android:key="reset_app_prefs"
        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 -->
    <com.android.settingslib.RestrictedPreference
        android:key="factory_reset"
+56 −0
Original line number Diff line number Diff line
/*
 * 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;
    }
}
+85 −0
Original line number Diff line number Diff line
/*
 * 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);
                }
            });
        }
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context;
import com.android.settings.R;
import com.android.settings.applications.manageapplications.ResetAppPrefPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.EraseEuiccDataController;
import com.android.settings.network.NetworkResetPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -57,6 +58,12 @@ public class ResetDashboardFragment extends DashboardFragment {
        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,
            Lifecycle lifecycle) {
        final List<AbstractPreferenceController> controllers = new ArrayList<>();
Loading