• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.sim;
18 
19 import android.app.Dialog;
20 import android.app.settings.SettingsEnums;
21 import android.content.DialogInterface;
22 import android.os.Bundle;
23 import android.telephony.SubscriptionInfo;
24 import android.telephony.SubscriptionManager;
25 import android.text.TextUtils;
26 import android.util.Log;
27 import android.view.LayoutInflater;
28 import android.view.View;
29 import android.widget.TextView;
30 
31 import androidx.annotation.NonNull;
32 import androidx.annotation.Nullable;
33 import androidx.annotation.VisibleForTesting;
34 import androidx.appcompat.app.AlertDialog;
35 
36 import com.android.settings.R;
37 import com.android.settings.network.SubscriptionUtil;
38 
39 import java.util.List;
40 
41 /**
42  * Presents a dialog asking the user if they want to switch the data to another sim
43  */
44 public class SelectSpecificDataSimDialogFragment extends SimDialogFragment implements
45         DialogInterface.OnClickListener {
46     private static final String TAG = "PreferredSimDialogFrag";
47 
48     private SubscriptionInfo mSubscriptionInfo;
49 
50     /**
51      * @return the dialog fragment.
52      */
newInstance()53     public static SelectSpecificDataSimDialogFragment newInstance() {
54         final SelectSpecificDataSimDialogFragment
55                 fragment = new SelectSpecificDataSimDialogFragment();
56         final Bundle args = initArguments(SimDialogActivity.DATA_PICK,
57                 R.string.select_specific_sim_for_data_title);
58         fragment.setArguments(args);
59         return fragment;
60     }
61 
62     @NonNull
63     @Override
onCreateDialog(@ullable Bundle savedInstanceState)64     public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
65         final AlertDialog dialog = new AlertDialog.Builder(getContext())
66                 .setNegativeButton(R.string.sim_action_no_thanks, null)
67                 .create();
68         updateDialog(dialog);
69         return dialog;
70     }
71 
72     @Override
onClick(DialogInterface dialog, int buttonClicked)73     public void onClick(DialogInterface dialog, int buttonClicked) {
74         if (buttonClicked != DialogInterface.BUTTON_POSITIVE) {
75             return;
76         }
77         final SimDialogActivity activity = (SimDialogActivity) getActivity();
78         final SubscriptionInfo info = getTargetSubscriptionInfo();
79         if (info != null) {
80             activity.onSubscriptionSelected(getDialogType(), info.getSubscriptionId());
81         }
82     }
83 
getNonDefaultDataSubscriptionInfo(SubscriptionInfo dds)84     private SubscriptionInfo getNonDefaultDataSubscriptionInfo(SubscriptionInfo dds) {
85         List<SubscriptionInfo> subInfos = getSubscriptionManager().getActiveSubscriptionInfoList();
86         if (subInfos == null || dds == null) {
87             return null;
88         }
89         return subInfos.stream().filter(subinfo -> subinfo.getSubscriptionId()
90                 != dds.getSubscriptionId()).findFirst().orElse(null);
91     }
92 
getDefaultDataSubInfo()93     private SubscriptionInfo getDefaultDataSubInfo() {
94         return getSubscriptionManager().getDefaultDataSubscriptionInfo();
95     }
96 
updateDialog(AlertDialog dialog)97     private void updateDialog(AlertDialog dialog) {
98         Log.d(TAG, "Dialog updated, dismiss status: " + mWasDismissed);
99         if (mWasDismissed) {
100             return;
101         }
102 
103         if (dialog == null) {
104             Log.d(TAG, "Dialog is null.");
105             dismiss();
106         }
107 
108         SubscriptionInfo currentDataSubInfo = getDefaultDataSubInfo();
109         SubscriptionInfo newSubInfo = getNonDefaultDataSubscriptionInfo(currentDataSubInfo);
110 
111         if (newSubInfo == null || currentDataSubInfo == null) {
112             Log.d(TAG, "one of target SubscriptionInfos is null");
113             dismiss();
114             return;
115         }
116         Log.d(TAG, "newSubId: " + newSubInfo.getSubscriptionId()
117                 + "currentDataSubID: " + currentDataSubInfo.getSubscriptionId());
118         setTargetSubscriptionInfo(newSubInfo);
119 
120         CharSequence newDataCarrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
121                 newSubInfo, getContext());
122         CharSequence currentDataCarrierName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
123                 currentDataSubInfo, getContext());
124 
125         String positive = getContext().getString(
126                 R.string.select_specific_sim_for_data_button, newDataCarrierName);
127         String message = getContext().getString(R.string.select_specific_sim_for_data_msg,
128                 newDataCarrierName, currentDataCarrierName);
129 
130         View content = LayoutInflater.from(getContext()).inflate(
131                 R.layout.sim_confirm_dialog_multiple_enabled_profiles_supported, null);
132         TextView dialogMessage = content != null ? content.findViewById(R.id.msg) : null;
133         if (!TextUtils.isEmpty(message) && dialogMessage != null) {
134             dialogMessage.setText(message);
135             dialogMessage.setVisibility(View.VISIBLE);
136         }
137         dialog.setView(content);
138 
139         View titleView = LayoutInflater.from(getContext()).inflate(
140                 R.layout.sim_confirm_dialog_title_multiple_enabled_profiles_supported, null);
141         TextView titleTextView = titleView.findViewById(R.id.title);
142         titleTextView.setText(getContext().getString(getTitleResId(), newDataCarrierName));
143 
144         dialog.setCustomTitle(titleTextView);
145         dialog.setButton(AlertDialog.BUTTON_POSITIVE, positive, this);
146     }
147 
setTargetSubscriptionInfo(SubscriptionInfo subInfo)148     private void setTargetSubscriptionInfo(SubscriptionInfo subInfo) {
149         mSubscriptionInfo = subInfo;
150     }
151 
getTargetSubscriptionInfo()152     private SubscriptionInfo getTargetSubscriptionInfo() {
153         return mSubscriptionInfo;
154     }
155 
156     @Override
updateDialog()157     public void updateDialog() {
158         updateDialog((AlertDialog) getDialog());
159     }
160 
161     @VisibleForTesting
getSubscriptionManager()162     protected SubscriptionManager getSubscriptionManager() {
163         return getContext().getSystemService(SubscriptionManager.class);
164     }
165 
166     @Override
getMetricsCategory()167     public int getMetricsCategory() {
168         return SettingsEnums.DIALOG_PREFERRED_SIM_PICKER;
169     }
170 }
171