Erase modem config on factoryReset
Add logic to erase modem config
when reset in called.
Bug: 140944289
Test: Tested on device
Change-Id: I749302c9b98f5a519f4d76a054a003a26ec61326
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 3e1b6a5..4bf232e 100755
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -56,6 +56,7 @@
import android.os.UserManager;
import android.os.WorkSource;
import android.preference.PreferenceManager;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.provider.Telephony;
import android.sysprop.TelephonyProperties;
@@ -262,6 +263,8 @@
private static final int EVENT_GET_MODEM_STATUS_DONE = 71;
private static final int CMD_SET_FORBIDDEN_PLMNS = 72;
private static final int EVENT_SET_FORBIDDEN_PLMNS_DONE = 73;
+ private static final int CMD_ERASE_MODEM_CONFIG = 74;
+ private static final int EVENT_ERASE_MODEM_CONFIG_DONE = 75;
// Parameters of select command.
private static final int SELECT_COMMAND = 0xA4;
@@ -298,6 +301,12 @@
private static final int MANUFACTURER_CODE_LENGTH = 8;
/**
+ * Experiment flag to enable erase modem config on reset network, default value is false
+ */
+ public static final String RESET_NETWORK_ERASE_MODEM_CONFIG_ENABLED =
+ "reset_network_erase_modem_config_enabled";
+
+ /**
* A request object to use for transmitting data to an ICC.
*/
private static final class IccAPDUArgument {
@@ -1210,6 +1219,13 @@
((SIMRecords) uiccApp.getIccRecords())
.setForbiddenPlmns(onCompleted, fplmns);
}
+ case CMD_ERASE_MODEM_CONFIG:
+ request = (MainThreadRequest) msg.obj;
+ onCompleted = obtainMessage(EVENT_ERASE_MODEM_CONFIG_DONE, request);
+ defaultPhone.eraseModemConfig(onCompleted);
+ break;
+ case EVENT_ERASE_MODEM_CONFIG_DONE:
+ handleNullReturnEvent(msg, "eraseModemConfig");
break;
default:
Log.w(LOG_TAG, "MainThreadHandler: unexpected message code: " + msg.what);
@@ -1419,6 +1435,20 @@
return PhoneFactory.getPhone(mSubscriptionController.getPhoneId(subId));
}
+ private void sendEraseModemConfig(Phone phone) {
+ if (phone != null) {
+ TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
+ mApp, phone.getSubId(), "eraseModemConfig");
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ Boolean success = (Boolean) sendRequest(CMD_ERASE_MODEM_CONFIG, null);
+ if (DBG) log("eraseModemConfig:" + ' ' + (success ? "ok" : "fail"));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
+
public void dial(String number) {
dialForSubscriber(getPreferredVoiceSubscription(), number);
}
@@ -5906,6 +5936,13 @@
if (slotId > SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
ImsManager.getInstance(mApp, slotId).factoryReset();
}
+
+ // Erase modem config if erase modem on network setting is enabled.
+ String configValue = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_TELEPHONY,
+ RESET_NETWORK_ERASE_MODEM_CONFIG_ENABLED);
+ if (configValue != null && Boolean.parseBoolean(configValue)) {
+ sendEraseModemConfig(getDefaultPhone());
+ }
} finally {
Binder.restoreCallingIdentity(identity);
}