Merge "Reset telephony stack during Reset Mobile Network flow" into main

This commit is contained in:
Treehugger Robot
2024-01-05 04:49:29 +00:00
committed by Android (Google) Code Review
6 changed files with 126 additions and 1 deletions

View File

@@ -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) {

View File

@@ -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;
}
}

View File

@@ -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);
}
}