/* * 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(); } }