Merge "Reset telephony stack during Reset Mobile Network flow" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
e8d26737a6
@@ -21,7 +21,6 @@ import android.app.Activity;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
@@ -128,6 +127,8 @@ public class ResetNetwork extends InstrumentedFragment {
|
||||
| ResetNetworkRequest.RESET_VPN_MANAGER;
|
||||
if (Flags.resetMobileNetworkSettings()) {
|
||||
resetOptions |= ResetNetworkRequest.RESET_IMS_STACK;
|
||||
resetOptions |= ResetNetworkRequest.RESET_PHONE_PROCESS;
|
||||
resetOptions |= ResetNetworkRequest.RESET_RILD;
|
||||
}
|
||||
ResetNetworkRequest request = new ResetNetworkRequest(resetOptions);
|
||||
if (mSubscriptions != null && mSubscriptions.size() > 0) {
|
||||
|
||||
@@ -51,6 +51,12 @@ public class ResetNetworkRequest {
|
||||
/* Reset option - reset IMS stack */
|
||||
public static final int RESET_IMS_STACK = 0x20;
|
||||
|
||||
/* Reset option - reset phone process */
|
||||
public static final int RESET_PHONE_PROCESS = 0x40;
|
||||
|
||||
/* Reset option - reset RILD */
|
||||
public static final int RESET_RILD = 0x80;
|
||||
|
||||
/**
|
||||
* Subscription ID indicates NOT resetting any of the components below:
|
||||
* - TelephonyAndNetworkPolicy
|
||||
@@ -264,6 +270,12 @@ public class ResetNetworkRequest {
|
||||
if ((mResetOptions & RESET_IMS_STACK) != 0) {
|
||||
builder.resetIms(mSubscriptionIdToResetIms);
|
||||
}
|
||||
if ((mResetOptions & RESET_PHONE_PROCESS) != 0) {
|
||||
builder.restartPhoneProcess();
|
||||
}
|
||||
if ((mResetOptions & RESET_RILD) != 0) {
|
||||
builder.restartRild();
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,6 +33,8 @@ import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.ResetNetworkRequest;
|
||||
import com.android.settings.network.apn.ApnSettings;
|
||||
|
||||
@@ -50,6 +52,13 @@ public class ResetNetworkOperationBuilder {
|
||||
|
||||
private static final boolean DRY_RUN = false;
|
||||
|
||||
// TelephonyContentProvider method to restart phone process
|
||||
@VisibleForTesting
|
||||
static final String METHOD_RESTART_PHONE_PROCESS = "restartPhoneProcess";
|
||||
// TelephonyContentProvider method to restart RILD
|
||||
@VisibleForTesting
|
||||
static final String METHOD_RESTART_RILD = "restartRild";
|
||||
|
||||
private Context mContext;
|
||||
private List<Runnable> mResetSequence = new ArrayList<Runnable>();
|
||||
|
||||
@@ -229,16 +238,56 @@ public class ResetNetworkOperationBuilder {
|
||||
// Reset IMS for all slots
|
||||
for (int slotIndex = 0; slotIndex < tm.getActiveModemCount(); slotIndex++) {
|
||||
tm.resetIms(slotIndex);
|
||||
Log.i(TAG, "IMS was reset for slot " + slotIndex);
|
||||
}
|
||||
} else {
|
||||
// Reset IMS for the slot specified by the sucriptionId.
|
||||
final int slotIndex = SubscriptionManager.getSlotIndex(subId);
|
||||
tm.resetIms(slotIndex);
|
||||
Log.i(TAG, "IMS was reset for slot " + slotIndex);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append a step to restart phone process by the help of TelephonyContentProvider.
|
||||
* It's a no-op if TelephonyContentProvider doesn't exist.
|
||||
* @return this
|
||||
*/
|
||||
public ResetNetworkOperationBuilder restartPhoneProcess() {
|
||||
try {
|
||||
mContext.getContentResolver().call(
|
||||
getResetTelephonyContentProviderAuthority(),
|
||||
METHOD_RESTART_PHONE_PROCESS,
|
||||
/* arg= */ null,
|
||||
/* extras= */ null);
|
||||
Log.i(TAG, "Phone process was restarted.");
|
||||
} catch (IllegalArgumentException iae) {
|
||||
Log.w(TAG, "Fail to restart phone process: " + iae);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Append a step to restart RILD by the help of TelephonyContentProvider.
|
||||
* It's a no-op if TelephonyContentProvider doesn't exist.
|
||||
* @return this
|
||||
*/
|
||||
public ResetNetworkOperationBuilder restartRild() {
|
||||
try {
|
||||
mContext.getContentResolver().call(
|
||||
getResetTelephonyContentProviderAuthority(),
|
||||
METHOD_RESTART_RILD,
|
||||
/* arg= */ null,
|
||||
/* extras= */ null);
|
||||
Log.i(TAG, "RILD was restarted.");
|
||||
} catch (IllegalArgumentException iae) {
|
||||
Log.w(TAG, "Fail to restart RILD: " + iae);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a Runnable containing all operations appended.
|
||||
* @return Runnable
|
||||
@@ -262,4 +311,14 @@ public class ResetNetworkOperationBuilder {
|
||||
};
|
||||
mResetSequence.add(runnable);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the authority of the telephony content provider that support methods
|
||||
* resetPhoneProcess and resetRild.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
String getResetTelephonyContentProviderAuthority() {
|
||||
return mContext.getResources().getString(
|
||||
R.string.reset_telephony_stack_content_provider_authority);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user