diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4a7abb90341..006d7c25d3b 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -690,12 +690,12 @@ + android:theme="@style/Theme.AlertDialog"/> + android:theme="@style/Theme.AlertDialog"/> + android:theme="@style/Theme.AlertDialog"/> + android:theme="@style/Theme.AlertDialog"/> diff --git a/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml new file mode 100644 index 00000000000..44044820653 --- /dev/null +++ b/res/layout/sim_confirm_dialog_multiple_enabled_profiles_supported.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/android/settings/network/telephony/AlertDialogFragment.java b/src/com/android/settings/network/telephony/AlertDialogFragment.java index 5940789673e..aaccc2db837 100644 --- a/src/com/android/settings/network/telephony/AlertDialogFragment.java +++ b/src/com/android/settings/network/telephony/AlertDialogFragment.java @@ -16,13 +16,14 @@ package com.android.settings.network.telephony; -import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.TextUtils; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; + /** Fragment to show an alert dialog which only has the positive button. */ public class AlertDialogFragment extends BaseDialogFragment implements DialogInterface.OnClickListener { @@ -37,13 +38,13 @@ public class AlertDialogFragment extends BaseDialogFragment * @param title * @param msg */ - public static void show(Activity activity, String title, String msg) { + public static void show(FragmentActivity activity, String title, String msg) { AlertDialogFragment fragment = new AlertDialogFragment(); Bundle arguments = new Bundle(); arguments.putString(ARG_TITLE, title); arguments.putString(ARG_MSG, msg); fragment.setArguments(arguments); - fragment.show(activity.getFragmentManager(), TAG); + fragment.show(activity.getSupportFragmentManager(), TAG); } @Override @@ -55,7 +56,7 @@ public class AlertDialogFragment extends BaseDialogFragment if (!TextUtils.isEmpty(getArguments().getString(ARG_MSG))) { builder.setMessage(getArguments().getString(ARG_MSG)); } - return builder.show(); + return builder.create(); } @Override diff --git a/src/com/android/settings/network/telephony/BaseDialogFragment.java b/src/com/android/settings/network/telephony/BaseDialogFragment.java index 7da325910e9..0465cef152b 100644 --- a/src/com/android/settings/network/telephony/BaseDialogFragment.java +++ b/src/com/android/settings/network/telephony/BaseDialogFragment.java @@ -17,11 +17,11 @@ package com.android.settings.network.telephony; import android.app.Activity; -import android.app.DialogFragment; -import android.app.Fragment; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; /** * Base dialog fragment class with the functionality to make a fragment or an activity as a listener diff --git a/src/com/android/settings/network/telephony/ConfirmDialogFragment.java b/src/com/android/settings/network/telephony/ConfirmDialogFragment.java index 04382dad6e6..bad981a5c4c 100644 --- a/src/com/android/settings/network/telephony/ConfirmDialogFragment.java +++ b/src/com/android/settings/network/telephony/ConfirmDialogFragment.java @@ -16,13 +16,24 @@ package com.android.settings.network.telephony; -import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.FragmentActivity; + +import com.android.settings.R; + +import java.util.ArrayList; /** Fragment to show a confirm dialog. The caller should implement onConfirmListener. */ public class ConfirmDialogFragment extends BaseDialogFragment @@ -32,6 +43,7 @@ public class ConfirmDialogFragment extends BaseDialogFragment private static final String ARG_MSG = "msg"; private static final String ARG_POS_BUTTON_STRING = "pos_button_string"; private static final String ARG_NEG_BUTTON_STRING = "neg_button_string"; + private static final String ARG_LIST = "list"; /** * Interface defining the method that will be invoked when the user has done with the dialog. @@ -51,7 +63,7 @@ public class ConfirmDialogFragment extends BaseDialogFragment /** Displays a confirmation dialog which has confirm and cancel buttons. */ public static void show( - Activity activity, + FragmentActivity activity, Class callbackInterfaceClass, int tagInCaller, String title, @@ -66,7 +78,29 @@ public class ConfirmDialogFragment extends BaseDialogFragment arguments.putString(ARG_NEG_BUTTON_STRING, negButtonString); setListener(activity, null, callbackInterfaceClass, tagInCaller, arguments); fragment.setArguments(arguments); - fragment.show(activity.getFragmentManager(), TAG); + fragment.show(activity.getSupportFragmentManager(), TAG); + } + + /** Displays a confirmation dialog which has confirm and cancel buttons and carrier list.*/ + public static void show( + FragmentActivity activity, + Class callbackInterfaceClass, + int tagInCaller, + String title, + String msg, + String posButtonString, + String negButtonString, + ArrayList list) { + ConfirmDialogFragment fragment = new ConfirmDialogFragment(); + Bundle arguments = new Bundle(); + arguments.putString(ARG_TITLE, title); + arguments.putCharSequence(ARG_MSG, msg); + arguments.putString(ARG_POS_BUTTON_STRING, posButtonString); + arguments.putString(ARG_NEG_BUTTON_STRING, negButtonString); + arguments.putStringArrayList(ARG_LIST, list); + setListener(activity, null, callbackInterfaceClass, tagInCaller, arguments); + fragment.setArguments(arguments); + fragment.show(activity.getSupportFragmentManager(), TAG); } @Override @@ -75,18 +109,56 @@ public class ConfirmDialogFragment extends BaseDialogFragment String message = getArguments().getString(ARG_MSG); String posBtnString = getArguments().getString(ARG_POS_BUTTON_STRING); String negBtnString = getArguments().getString(ARG_NEG_BUTTON_STRING); + ArrayList list = getArguments().getStringArrayList(ARG_LIST); - Log.i("Showing dialog with title = %s", title); + Log.i(TAG, "Showing dialog with title =" + title); AlertDialog.Builder builder = new AlertDialog.Builder(getContext()) .setTitle(title) .setPositiveButton(posBtnString, this) .setNegativeButton(negBtnString, this); - if (!TextUtils.isEmpty(message)) { - builder.setMessage(message); + if (list != null && !list.isEmpty()) { + Log.i(TAG, "list =" + list.toString()); + + View content = LayoutInflater.from(getContext()).inflate( + R.layout.sim_confirm_dialog_multiple_enabled_profiles_supported, null); + + TextView dialogMessage = content.findViewById(R.id.msg); + if (!TextUtils.isEmpty(message) && dialogMessage != null) { + dialogMessage.setText(message); + } + + final ArrayAdapter arrayAdapterItems = new ArrayAdapter( + getContext(), android.R.layout.select_dialog_item, list); + final ListView lvItems = content.findViewById(R.id.carrier_list); + if (lvItems != null) { + lvItems.setAdapter(arrayAdapterItems); + lvItems.setChoiceMode(ListView.CHOICE_MODE_NONE); + lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + Log.i(TAG, "list onClick =" + position); + Log.i(TAG, "list item =" + list.get(position)); + + if (position == list.size() - 1) { + // user select the "cancel" item; + informCaller(false, -1); + } else { + informCaller(true, position); + } + } + }); + } + builder.setView(content); + } else { + if (!TextUtils.isEmpty(message)) { + builder.setMessage(message); + } } - AlertDialog dialog = builder.show(); + + AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(false); return dialog; } diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java index 7ff0d9a874c..288f1ac1e53 100644 --- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java +++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java @@ -16,12 +16,13 @@ package com.android.settings.network.telephony; -import android.app.Activity; import android.os.Bundle; import android.telephony.SubscriptionManager; +import androidx.fragment.app.FragmentActivity; + /** The base class for subscription action dialogs */ -public class SubscriptionActionDialogActivity extends Activity { +public class SubscriptionActionDialogActivity extends FragmentActivity { private static final String TAG = "SubscriptionActionDialogActivity"; // Arguments diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java index 70f7a7933e3..ad2dc49e2bf 100644 --- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java +++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java @@ -455,6 +455,31 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc private void showMepSwitchSimConfirmDialog() { Log.i(TAG, "showMepSwitchSimConfirmDialog"); + final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName( + mSubInfo, this); + String title = getString(R.string.sim_action_switch_sub_dialog_mep_title, displayName); + final StringBuilder switchDialogMsg = new StringBuilder(); + switchDialogMsg.append( + getString(R.string.sim_action_switch_sub_dialog_mep_text, displayName)); + if (isRtlMode) { + /* There are two lines of message in the dialog, and the RTL symbols must be added + * before and after each sentence, so use the line break symbol to find the position. + * (Each message are all with two line break symbols) + */ + switchDialogMsg.insert(0, RTL_MARK) + .insert(switchDialogMsg.indexOf(LINE_BREAK) - LINE_BREAK_OFFSET_ONE, RTL_MARK) + .insert(switchDialogMsg.indexOf(LINE_BREAK) + LINE_BREAK_OFFSET_TWO, RTL_MARK) + .insert(switchDialogMsg.length(), RTL_MARK); + } + ConfirmDialogFragment.show( + this, + ConfirmDialogFragment.OnConfirmListener.class, + DIALOG_TAG_ENABLE_SIM_CONFIRMATION_MEP, + title, + switchDialogMsg.toString(), + null, + null, + getSwitchDialogBodyList()); } private String getSwitchDialogPosBtnText() { diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java index e5457ae3459..f9aca77d20b 100644 --- a/src/com/android/settings/sim/SimDialogActivity.java +++ b/src/com/android/settings/sim/SimDialogActivity.java @@ -160,8 +160,10 @@ public class SimDialogActivity extends FragmentActivity { final TelephonyManager telephonyManager = getSystemService( TelephonyManager.class).createForSubscriptionId(subId); subscriptionManager.setDefaultDataSubId(subId); - telephonyManager.setDataEnabled(true); - Toast.makeText(this, R.string.data_switch_started, Toast.LENGTH_LONG).show(); + if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + telephonyManager.setDataEnabled(true); + Toast.makeText(this, R.string.data_switch_started, Toast.LENGTH_LONG).show(); + } } private void setDefaultCallsSubId(final int subId) {