| /* | |
| * Copyright (C) 2021 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.sim; | |
| import android.content.Intent; | |
| import android.os.Bundle; | |
| import android.telephony.TelephonyManager; | |
| import android.util.Log; | |
| import com.android.settings.R; | |
| import com.android.settings.SidecarFragment; | |
| import com.android.settings.network.EnableMultiSimSidecar; | |
| import com.android.settings.network.telephony.ConfirmDialogFragment; | |
| import com.android.settings.network.telephony.SubscriptionActionDialogActivity; | |
| /** Activity to show the enabling DSDS dialog. */ | |
| public class DsdsDialogActivity extends SubscriptionActionDialogActivity | |
| implements SidecarFragment.Listener, ConfirmDialogFragment.OnConfirmListener { | |
| private static final String TAG = "DsdsDialogActivity"; | |
| // Dialog tags | |
| private static final int DIALOG_TAG_ENABLE_DSDS_CONFIRMATION = 1; | |
| private static final int DIALOG_TAG_ENABLE_DSDS_REBOOT_CONFIRMATION = 2; | |
| // Number of SIMs for DSDS | |
| private static final int NUM_OF_SIMS_FOR_DSDS = 2; | |
| private EnableMultiSimSidecar mEnableMultiSimSidecar; | |
| @Override | |
| protected void onCreate(Bundle savedInstanceState) { | |
| super.onCreate(savedInstanceState); | |
| mEnableMultiSimSidecar = EnableMultiSimSidecar.get(getFragmentManager()); | |
| if (savedInstanceState == null) { | |
| showEnableDsdsConfirmDialog(); | |
| } | |
| } | |
| @Override | |
| protected void onResume() { | |
| super.onResume(); | |
| mEnableMultiSimSidecar.addListener(this); | |
| } | |
| @Override | |
| protected void onPause() { | |
| mEnableMultiSimSidecar.removeListener(this); | |
| super.onPause(); | |
| } | |
| @Override | |
| public void onStateChange(SidecarFragment fragment) { | |
| if (fragment == mEnableMultiSimSidecar) { | |
| switch (fragment.getState()) { | |
| case SidecarFragment.State.SUCCESS: | |
| mEnableMultiSimSidecar.reset(); | |
| Log.i(TAG, "Enabled DSDS successfully"); | |
| dismissProgressDialog(); | |
| finish(); | |
| break; | |
| case SidecarFragment.State.ERROR: | |
| mEnableMultiSimSidecar.reset(); | |
| Log.e(TAG, "Failed to enable DSDS"); | |
| dismissProgressDialog(); | |
| showErrorDialog( | |
| getString(R.string.dsds_activation_failure_title), | |
| getString(R.string.dsds_activation_failure_body_msg2)); | |
| break; | |
| } | |
| } | |
| } | |
| @Override | |
| public void onConfirm(int tag, boolean confirmed, int itemPosition) { | |
| if (!confirmed) { | |
| Log.i(TAG, "User cancel the dialog to enable DSDS."); | |
| startChooseSimActivity(); | |
| return; | |
| } | |
| TelephonyManager telephonyManager = getSystemService(TelephonyManager.class); | |
| switch (tag) { | |
| case DIALOG_TAG_ENABLE_DSDS_CONFIRMATION: | |
| if (telephonyManager.doesSwitchMultiSimConfigTriggerReboot()) { | |
| Log.i(TAG, "Device does not support reboot free DSDS."); | |
| showRebootConfirmDialog(); | |
| return; | |
| } | |
| Log.i(TAG, "Enabling DSDS without rebooting."); | |
| showProgressDialog( | |
| getString(R.string.sim_action_enabling_sim_without_carrier_name)); | |
| mEnableMultiSimSidecar.run(NUM_OF_SIMS_FOR_DSDS); | |
| break; | |
| case DIALOG_TAG_ENABLE_DSDS_REBOOT_CONFIRMATION: | |
| Log.i(TAG, "User confirmed reboot to enable DSDS."); | |
| SimActivationNotifier.setShowSimSettingsNotification(this, true); | |
| telephonyManager.switchMultiSimConfig(NUM_OF_SIMS_FOR_DSDS); | |
| break; | |
| default: | |
| Log.e(TAG, "Unrecognized confirmation dialog tag: " + tag); | |
| break; | |
| } | |
| } | |
| private void showEnableDsdsConfirmDialog() { | |
| ConfirmDialogFragment.show( | |
| this, | |
| ConfirmDialogFragment.OnConfirmListener.class, | |
| DIALOG_TAG_ENABLE_DSDS_CONFIRMATION, | |
| getString(R.string.sim_action_enable_dsds_title), | |
| getString(R.string.sim_action_enable_dsds_text), | |
| getString(R.string.sim_action_yes), | |
| getString(R.string.sim_action_no_thanks)); | |
| } | |
| private void showRebootConfirmDialog() { | |
| ConfirmDialogFragment.show( | |
| this, | |
| ConfirmDialogFragment.OnConfirmListener.class, | |
| DIALOG_TAG_ENABLE_DSDS_REBOOT_CONFIRMATION, | |
| getString(R.string.sim_action_restart_title), | |
| getString(R.string.sim_action_enable_dsds_text), | |
| getString(R.string.sim_action_reboot), | |
| getString(R.string.cancel)); | |
| } | |
| private void startChooseSimActivity() { | |
| Intent intent = ChooseSimActivity.getIntent(this); | |
| intent.putExtra(ChooseSimActivity.KEY_HAS_PSIM, true); | |
| startActivity(intent); | |
| finish(); | |
| } | |
| } |