Add enable/disable DSDS setting switch
This add a switch settings in the Phone Information screen to allow the
user enable/disable the DSDS mode.
Bug: 123088078
Test: build & manual test
Change-Id: Ia3722fb26ce8825820ee96550a1d523da35c7a71
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index 251bfbc..db6bd9b 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -23,6 +23,7 @@
import android.app.QueuedWork;
import android.content.ComponentName;
import android.content.Context;
+import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
@@ -40,6 +41,7 @@
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
+import android.provider.Telephony;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentityCdma;
import android.telephony.CellIdentityGsm;
@@ -81,11 +83,13 @@
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog.Builder;
import com.android.ims.ImsConfig;
import com.android.ims.ImsException;
import com.android.ims.ImsManager;
import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.PhoneFactory;
import java.io.IOException;
@@ -93,6 +97,7 @@
import java.net.URL;
import java.util.List;
+// TODO(b/123598192) consider to move this activity to telephony package.
public class RadioInfo extends Activity {
private static final String TAG = "RadioInfo";
@@ -214,6 +219,7 @@
private Switch imsWfcProvisionedSwitch;
private Switch eabProvisionedSwitch;
private Switch cbrsDataSwitch;
+ private Switch dsdsSwitch;
private Spinner preferredNetworkType;
private Spinner cellInfoRefreshRateSpinner;
@@ -454,6 +460,23 @@
cbrsDataSwitch = (Switch) findViewById(R.id.cbrs_data_switch);
cbrsDataSwitch.setVisibility(isCbrsSupported() ? View.VISIBLE : View.GONE);
+ dsdsSwitch = findViewById(R.id.dsds_switch);
+ if (isDsdsSupported()) {
+ dsdsSwitch.setVisibility(View.VISIBLE);
+ dsdsSwitch.setOnClickListener(v -> {
+ if (mTelephonyManager.isRebootRequiredForModemConfigChange()) {
+ // Undo the click action until user clicks the confirm dialog.
+ dsdsSwitch.toggle();
+ showDsdsChangeDialog();
+ } else {
+ performDsdsSwitch();
+ }
+ });
+ dsdsSwitch.setChecked(isDsdsEnabled());
+ } else {
+ dsdsSwitch.setVisibility(View.GONE);
+ }
+
radioPowerOnSwitch = (Switch) findViewById(R.id.radio_power);
mDownlinkKbps = (TextView) findViewById(R.id.dl_kbps);
@@ -1525,5 +1548,38 @@
}
};
+ private void showDsdsChangeDialog() {
+ final AlertDialog confirmDialog = new Builder(RadioInfo.this)
+ .setTitle(R.string.dsds_dialog_title)
+ .setMessage(R.string.dsds_dialog_message)
+ .setPositiveButton(R.string.dsds_dialog_confirm, mOnDsdsDialogConfirmedListener)
+ .setNegativeButton(R.string.dsds_dialog_cancel, mOnDsdsDialogConfirmedListener)
+ .create();
+ confirmDialog.show();
+ }
+ private static boolean isDsdsSupported() {
+ return PhoneConfigurationManager.getInstance().getStaticPhoneCapability()
+ .logicalModemList.size() >= 2
+ && !TelephonyManager.getDefault().isMultisimCarrierRestricted();
+ }
+
+ private static boolean isDsdsEnabled() {
+ return TelephonyManager.getDefault().getPhoneCount() > 1;
+ }
+
+ private void performDsdsSwitch() {
+ mTelephonyManager.switchMultiSimConfig(dsdsSwitch.isChecked() ? 2 : 1);
+ }
+
+ DialogInterface.OnClickListener mOnDsdsDialogConfirmedListener =
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ dsdsSwitch.toggle();
+ performDsdsSwitch();
+ }
+ }
+ };
}