Loading core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -10098,6 +10098,15 @@ public final class Settings { public static final String BACKUP_REFACTORED_SERVICE_DISABLED = "backup_refactored_service_disabled"; /** * Flag to set the waiting time for euicc factory reset inside System > Settings * Type: long * * @hide */ public static final String EUICC_WIPING_TIMEOUT_MILLIS = "euicc_wiping_timeout_millis"; /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. Loading services/core/java/com/android/server/MasterClearReceiver.java +43 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server; import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; Loading @@ -23,6 +24,7 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.RecoverySystem; import android.os.storage.StorageManager; import android.provider.Settings; import android.telephony.euicc.EuiccManager; import android.util.Log; import android.util.Slog; Loading @@ -31,14 +33,29 @@ import android.view.WindowManager; import com.android.internal.R; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class MasterClearReceiver extends BroadcastReceiver { private static final String TAG = "MasterClear"; private static final String ACTION_WIPE_EUICC_DATA = "com.android.internal.action.wipe_euicc_data"; private static final long DEFAULT_EUICC_WIPING_TIMEOUT_MILLIS = 30000L; // 30 s private boolean mWipeExternalStorage; private boolean mWipeEims; private boolean mWipeEsims; private static CountDownLatch mEuiccFactoryResetLatch; @Override public void onReceive(final Context context, final Intent intent) { if (ACTION_WIPE_EUICC_DATA.equals(intent.getAction())) { if (getResultCode() != EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK) { int detailedCode = intent.getIntExtra( EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE, 0); Slog.e(TAG, "Error wiping euicc data, Detailed code = " + detailedCode); } mEuiccFactoryResetLatch.countDown(); return; } if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) { if (!"google.com".equals(intent.getStringExtra("from"))) { Slog.w(TAG, "Ignoring master clear request -- not from trusted server."); Loading @@ -57,7 +74,7 @@ public class MasterClearReceiver extends BroadcastReceiver { final boolean shutdown = intent.getBooleanExtra("shutdown", false); final String reason = intent.getStringExtra(Intent.EXTRA_REASON); mWipeExternalStorage = intent.getBooleanExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, false); mWipeEims = intent.getBooleanExtra(Intent.EXTRA_WIPE_ESIMS, false); mWipeEsims = intent.getBooleanExtra(Intent.EXTRA_WIPE_ESIMS, false); final boolean forceWipe = intent.getBooleanExtra(Intent.EXTRA_FORCE_MASTER_CLEAR, false) || intent.getBooleanExtra(Intent.EXTRA_FORCE_FACTORY_RESET, false); Loading @@ -77,7 +94,7 @@ public class MasterClearReceiver extends BroadcastReceiver { } }; if (mWipeExternalStorage || mWipeEims) { if (mWipeExternalStorage || mWipeEsims) { // thr will be started at the end of this task. new WipeDataTask(context, thr).execute(); } else { Loading Loading @@ -112,10 +129,31 @@ public class MasterClearReceiver extends BroadcastReceiver { Context.STORAGE_SERVICE); sm.wipeAdoptableDisks(); } if (mWipeEims) { if (mWipeEsims) { EuiccManager euiccManager = (EuiccManager) mContext.getSystemService( Context.EUICC_SERVICE); // STOPSHIP: add EuiccManager API to factory reset eUICC Intent intent = new Intent(mContext, MasterClearReceiver.class); intent.setAction(ACTION_WIPE_EUICC_DATA); PendingIntent callbackIntent = PendingIntent.getBroadcast( mContext, 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT); mEuiccFactoryResetLatch = new CountDownLatch(1); euiccManager.eraseSubscriptions(callbackIntent); try { long waitingTime = Settings.Global.getLong( mContext.getContentResolver(), Settings.Global.EUICC_WIPING_TIMEOUT_MILLIS, DEFAULT_EUICC_WIPING_TIMEOUT_MILLIS); if (!mEuiccFactoryResetLatch.await(waitingTime, TimeUnit.MILLISECONDS)) { Slog.e(TAG, "Timeout wiping eUICC data."); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); Slog.e(TAG, "Wiping eUICC data interrupted", e); } } return null; } Loading Loading
core/java/android/provider/Settings.java +9 −0 Original line number Diff line number Diff line Loading @@ -10098,6 +10098,15 @@ public final class Settings { public static final String BACKUP_REFACTORED_SERVICE_DISABLED = "backup_refactored_service_disabled"; /** * Flag to set the waiting time for euicc factory reset inside System > Settings * Type: long * * @hide */ public static final String EUICC_WIPING_TIMEOUT_MILLIS = "euicc_wiping_timeout_millis"; /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. Loading
services/core/java/com/android/server/MasterClearReceiver.java +43 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server; import android.app.PendingIntent; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; Loading @@ -23,6 +24,7 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.RecoverySystem; import android.os.storage.StorageManager; import android.provider.Settings; import android.telephony.euicc.EuiccManager; import android.util.Log; import android.util.Slog; Loading @@ -31,14 +33,29 @@ import android.view.WindowManager; import com.android.internal.R; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class MasterClearReceiver extends BroadcastReceiver { private static final String TAG = "MasterClear"; private static final String ACTION_WIPE_EUICC_DATA = "com.android.internal.action.wipe_euicc_data"; private static final long DEFAULT_EUICC_WIPING_TIMEOUT_MILLIS = 30000L; // 30 s private boolean mWipeExternalStorage; private boolean mWipeEims; private boolean mWipeEsims; private static CountDownLatch mEuiccFactoryResetLatch; @Override public void onReceive(final Context context, final Intent intent) { if (ACTION_WIPE_EUICC_DATA.equals(intent.getAction())) { if (getResultCode() != EuiccManager.EMBEDDED_SUBSCRIPTION_RESULT_OK) { int detailedCode = intent.getIntExtra( EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_DETAILED_CODE, 0); Slog.e(TAG, "Error wiping euicc data, Detailed code = " + detailedCode); } mEuiccFactoryResetLatch.countDown(); return; } if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) { if (!"google.com".equals(intent.getStringExtra("from"))) { Slog.w(TAG, "Ignoring master clear request -- not from trusted server."); Loading @@ -57,7 +74,7 @@ public class MasterClearReceiver extends BroadcastReceiver { final boolean shutdown = intent.getBooleanExtra("shutdown", false); final String reason = intent.getStringExtra(Intent.EXTRA_REASON); mWipeExternalStorage = intent.getBooleanExtra(Intent.EXTRA_WIPE_EXTERNAL_STORAGE, false); mWipeEims = intent.getBooleanExtra(Intent.EXTRA_WIPE_ESIMS, false); mWipeEsims = intent.getBooleanExtra(Intent.EXTRA_WIPE_ESIMS, false); final boolean forceWipe = intent.getBooleanExtra(Intent.EXTRA_FORCE_MASTER_CLEAR, false) || intent.getBooleanExtra(Intent.EXTRA_FORCE_FACTORY_RESET, false); Loading @@ -77,7 +94,7 @@ public class MasterClearReceiver extends BroadcastReceiver { } }; if (mWipeExternalStorage || mWipeEims) { if (mWipeExternalStorage || mWipeEsims) { // thr will be started at the end of this task. new WipeDataTask(context, thr).execute(); } else { Loading Loading @@ -112,10 +129,31 @@ public class MasterClearReceiver extends BroadcastReceiver { Context.STORAGE_SERVICE); sm.wipeAdoptableDisks(); } if (mWipeEims) { if (mWipeEsims) { EuiccManager euiccManager = (EuiccManager) mContext.getSystemService( Context.EUICC_SERVICE); // STOPSHIP: add EuiccManager API to factory reset eUICC Intent intent = new Intent(mContext, MasterClearReceiver.class); intent.setAction(ACTION_WIPE_EUICC_DATA); PendingIntent callbackIntent = PendingIntent.getBroadcast( mContext, 0 /* requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT); mEuiccFactoryResetLatch = new CountDownLatch(1); euiccManager.eraseSubscriptions(callbackIntent); try { long waitingTime = Settings.Global.getLong( mContext.getContentResolver(), Settings.Global.EUICC_WIPING_TIMEOUT_MILLIS, DEFAULT_EUICC_WIPING_TIMEOUT_MILLIS); if (!mEuiccFactoryResetLatch.await(waitingTime, TimeUnit.MILLISECONDS)) { Slog.e(TAG, "Timeout wiping eUICC data."); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); Slog.e(TAG, "Wiping eUICC data interrupted", e); } } return null; } Loading