blob: 4be8b3206a6b997ec743201311314f5e2aabd4e5 [file] [log] [blame]
/*
* Copyright (C) 2022 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;
import android.content.Context;
import android.os.Bundle;
import android.os.Looper;
import android.telephony.SubscriptionManager;
import androidx.annotation.VisibleForTesting;
import com.android.settings.network.ResetNetworkOperationBuilder;
/**
* A request which contains options required for resetting network.
*/
public class ResetNetworkRequest {
/* Reset option - nothing get reset */
public static final int RESET_NONE = 0x00;
/* Reset option - reset ConnectivityManager */
public static final int RESET_CONNECTIVITY_MANAGER = 0x01;
/* Reset option - reset VpnManager */
public static final int RESET_VPN_MANAGER = 0x02;
/* Reset option - reset WiFiManager */
public static final int RESET_WIFI_MANAGER = 0x04;
/* Reset option - reset WifiP2pManager */
public static final int RESET_WIFI_P2P_MANAGER = 0x08;
/* Reset option - reset BluetoothManager */
public static final int RESET_BLUETOOTH_MANAGER = 0x10;
/* 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
* - APN
* - IMS
*/
public static final int INVALID_SUBSCRIPTION_ID = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
/**
* Subscription ID indicates resetting components below for ALL subscriptions:
* - TelephonyAndNetworkPolicy
* - APN
* - IMS
*/
public static final int ALL_SUBSCRIPTION_ID = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
/* Key within Bundle. To store some connectivity options for reset */
@VisibleForTesting
protected static final String KEY_RESET_OPTIONS = "resetNetworkOptions";
/* Key within Bundle. To store package name for resetting eSIM */
@VisibleForTesting
protected static final String KEY_ESIM_PACKAGE = "resetEsimPackage";
/**
* Key within Bundle. To store subscription ID for resetting
* telephony manager and network and network policy manager.
*/
@VisibleForTesting
protected static final String KEY_TELEPHONY_NET_POLICY_MANAGER_SUBID =
"resetTelephonyNetPolicySubId";
/* Key within Bundle. To store subscription ID for resetting APN. */
@VisibleForTesting
protected static final String KEY_APN_SUBID = "resetApnSubId";
/** Key within Bundle. To store subscription ID for resetting IMS. */
protected static final String KEY_RESET_IMS_SUBID = "resetImsSubId";
private int mResetOptions = RESET_NONE;
private String mResetEsimPackageName;
private int mResetTelephonyManager = INVALID_SUBSCRIPTION_ID;
private int mResetApn = INVALID_SUBSCRIPTION_ID;
private int mSubscriptionIdToResetIms = INVALID_SUBSCRIPTION_ID;
/**
* Reconstruct based on keys stored within Bundle.
* @param optionsFromBundle is a Bundle which previously stored through #writeIntoBundle()
*/
public ResetNetworkRequest(Bundle optionsFromBundle) {
if (optionsFromBundle == null) {
return;
}
mResetOptions = optionsFromBundle.getInt(KEY_RESET_OPTIONS, RESET_NONE);
mResetEsimPackageName = optionsFromBundle.getString(KEY_ESIM_PACKAGE);
mResetTelephonyManager = optionsFromBundle.getInt(
KEY_TELEPHONY_NET_POLICY_MANAGER_SUBID, INVALID_SUBSCRIPTION_ID);
mResetApn = optionsFromBundle.getInt(KEY_APN_SUBID, INVALID_SUBSCRIPTION_ID);
mSubscriptionIdToResetIms = optionsFromBundle.getInt(KEY_RESET_IMS_SUBID,
INVALID_SUBSCRIPTION_ID);
}
/**
* Construct of class
* @param resetOptions is a binary combination(OR logic operation) of constants
* comes with RESET_ prefix. Which are the reset options comes within.
*/
public ResetNetworkRequest(int resetOptions) {
mResetOptions = resetOptions;
}
/**
* Get the package name applied for resetting eSIM.
* @return package name. {@code null} means resetting eSIM is not part of the
* option within this request.
*/
public String getResetEsimPackageName() {
return mResetEsimPackageName;
}
/**
* Set the package name for resetting eSIM.
* @param packageName is the package name for resetting eSIM.
* {@code null} will remove the resetting eSIM option out of this request.
* @return this request
*/
public ResetNetworkRequest setResetEsim(String packageName) {
mResetEsimPackageName = packageName;
return this;
}
/**
* Get the subscription ID applied for resetting Telephony and NetworkPolicy.
* @return subscription ID.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means
* resetting Telephony and NetworkPolicy is not part of the option
* within this request.
*/
public int getResetTelephonyAndNetworkPolicyManager() {
return mResetTelephonyManager;
}
/**
* Set the subscription ID applied for resetting Telephony and NetworkPolicy.
* @param subscriptionId is the subscription ID referenced fron SubscriptionManager.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means resetting Telephony and NetworkPolicy
* will not take place.
* @return this request
*/
public ResetNetworkRequest setResetTelephonyAndNetworkPolicyManager(int subscriptionId) {
mResetTelephonyManager = subscriptionId;
return this;
}
/**
* Get the subscription ID applied for resetting APN.
* @return subscription ID.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means resetting APN
* is not part of the option within this request.
*/
public int getResetApnSubId() {
return mResetApn;
}
/**
* Set the subscription ID applied for resetting APN.
* @param subscriptionId is the subscription ID referenced fron SubscriptionManager.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means resetting APN will not take place.
* @return this request
*/
public ResetNetworkRequest setResetApn(int subscriptionId) {
mResetApn = subscriptionId;
return this;
}
/**
* Get the subscription ID applied for resetting IMS.
* @return subscription ID.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means resetting IMS
* is not part of the option within this request.
*/
public int getResetImsSubId() {
return mSubscriptionIdToResetIms;
}
/**
* Set the subscription ID applied for resetting APN.
* @param subId is the subscription ID referenced from SubscriptionManager.
* {@code ALL_SUBSCRIPTION_ID} for applying to all subscriptions.
* {@code INVALID_SUBSCRIPTION_ID} means resetting IMS will not take place.
* @return this
*/
public ResetNetworkRequest setResetImsSubId(int subId) {
mSubscriptionIdToResetIms = subId;
return this;
}
/**
* Store a copy of this request into Bundle given.
* @param writeToBundle is a Bundle for storing configurations of this request.
* @return this request
*/
public ResetNetworkRequest writeIntoBundle(Bundle writeToBundle) {
writeToBundle.putInt(KEY_RESET_OPTIONS, mResetOptions);
writeToBundle.putString(KEY_ESIM_PACKAGE, mResetEsimPackageName);
writeToBundle.putInt(KEY_TELEPHONY_NET_POLICY_MANAGER_SUBID, mResetTelephonyManager);
writeToBundle.putInt(KEY_APN_SUBID, mResetApn);
writeToBundle.putInt(KEY_RESET_IMS_SUBID, mSubscriptionIdToResetIms);
return this;
}
/**
* Build a ResetNetworkOperationBuilder based on configurations within this request.
* @param context required by ResetNetworkOperationBuilder
* @param looper required by ResetNetworkOperationBuilder for callback support
* @return a ResetNetworkOperationBuilder
*/
public ResetNetworkOperationBuilder toResetNetworkOperationBuilder(Context context,
Looper looper) {
// Follow specific order based on previous design within file ResetNetworkConfirm.java
ResetNetworkOperationBuilder builder = new ResetNetworkOperationBuilder(context);
if ((mResetOptions & RESET_CONNECTIVITY_MANAGER) != 0) {
builder.resetConnectivityManager();
}
if ((mResetOptions & RESET_VPN_MANAGER) != 0) {
builder.resetVpnManager();
}
if ((mResetOptions & RESET_WIFI_MANAGER) != 0) {
builder.resetWifiManager();
}
if ((mResetOptions & RESET_WIFI_P2P_MANAGER) != 0) {
builder.resetWifiP2pManager(looper);
}
if (mResetEsimPackageName != null) {
builder.resetEsim(mResetEsimPackageName);
}
if (mResetTelephonyManager != INVALID_SUBSCRIPTION_ID) {
builder.resetTelephonyAndNetworkPolicyManager(mResetTelephonyManager);
}
if ((mResetOptions & RESET_BLUETOOTH_MANAGER) != 0) {
builder.resetBluetoothManager();
}
if (mResetApn != INVALID_SUBSCRIPTION_ID) {
builder.resetApn(mResetApn);
}
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;
}
}