blob: 6e289221c29f9a7cf096e1fb37505810018ed054 [file] [log] [blame]
Santos Cordon7d4ddf62013-07-10 11:58:08 -07001package com.android.phone;
2
3import android.app.ActionBar;
SongFerngWangbed485e2018-07-09 21:15:29 +08004import android.app.Dialog;
Santos Cordon7d4ddf62013-07-10 11:58:08 -07005import android.os.Bundle;
SongFerngWangf6fd9922018-06-28 17:21:43 +08006import android.os.PersistableBundle;
Santos Cordon7d4ddf62013-07-10 11:58:08 -07007import android.preference.Preference;
8import android.preference.PreferenceScreen;
SongFerngWangf6fd9922018-06-28 17:21:43 +08009import android.telephony.CarrierConfigManager;
Santos Cordon7d4ddf62013-07-10 11:58:08 -070010import android.util.Log;
11import android.view.MenuItem;
12
Andrew Lee2b36ba22014-11-05 17:08:49 -080013import com.android.internal.telephony.Phone;
SongFerngWangbed485e2018-07-09 21:15:29 +080014import com.android.phone.settings.SuppServicesUiUtil;
Andrew Lee2b36ba22014-11-05 17:08:49 -080015
Santos Cordon7d4ddf62013-07-10 11:58:08 -070016import java.util.ArrayList;
17
Andrew Lee2b36ba22014-11-05 17:08:49 -080018public class GsmUmtsAdditionalCallOptions extends TimeConsumingPreferenceActivity {
Santos Cordon7d4ddf62013-07-10 11:58:08 -070019 private static final String LOG_TAG = "GsmUmtsAdditionalCallOptions";
20 private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
21
SongFerngWangbed485e2018-07-09 21:15:29 +080022 public static final String BUTTON_CLIR_KEY = "button_clir_key";
23 public static final String BUTTON_CW_KEY = "button_cw_key";
24
25 private static final int CW_WARNING_DIALOG = 201;
26 private static final int CALLER_ID_WARNING_DIALOG = 202;
Santos Cordon7d4ddf62013-07-10 11:58:08 -070027
28 private CLIRListPreference mCLIRButton;
fionaxue46e69f2017-04-27 14:32:46 -070029 private CallWaitingSwitchPreference mCWButton;
Santos Cordon7d4ddf62013-07-10 11:58:08 -070030
31 private final ArrayList<Preference> mPreferences = new ArrayList<Preference>();
Andrew Lee2b36ba22014-11-05 17:08:49 -080032 private int mInitIndex = 0;
33 private Phone mPhone;
Andrew Lee5efb1122014-12-05 04:20:42 -080034 private SubscriptionInfoHelper mSubscriptionInfoHelper;
Santos Cordon7d4ddf62013-07-10 11:58:08 -070035
SongFerngWangbed485e2018-07-09 21:15:29 +080036 private boolean mShowCLIRButton = true;
37 private boolean mShowCWButton = true;
38 private boolean mCLIROverUtPrecautions = false;
39 private boolean mCWOverUtPrecautions = false;
SongFerngWangf6fd9922018-06-28 17:21:43 +080040
Santos Cordon7d4ddf62013-07-10 11:58:08 -070041 @Override
42 protected void onCreate(Bundle icicle) {
43 super.onCreate(icicle);
44
45 addPreferencesFromResource(R.xml.gsm_umts_additional_options);
46
Andrew Leedd4f6df2014-12-09 19:13:51 -080047 mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent());
Andrew Lee5efb1122014-12-05 04:20:42 -080048 mSubscriptionInfoHelper.setActionBarTitle(
Andrew Lee2b36ba22014-11-05 17:08:49 -080049 getActionBar(), getResources(), R.string.additional_gsm_call_settings_with_label);
Andrew Lee5efb1122014-12-05 04:20:42 -080050 mPhone = mSubscriptionInfoHelper.getPhone();
Andrew Lee2b36ba22014-11-05 17:08:49 -080051
Santos Cordon7d4ddf62013-07-10 11:58:08 -070052 PreferenceScreen prefSet = getPreferenceScreen();
53 mCLIRButton = (CLIRListPreference) prefSet.findPreference(BUTTON_CLIR_KEY);
fionaxue46e69f2017-04-27 14:32:46 -070054 mCWButton = (CallWaitingSwitchPreference) prefSet.findPreference(BUTTON_CW_KEY);
Santos Cordon7d4ddf62013-07-10 11:58:08 -070055
SongFerngWangf6fd9922018-06-28 17:21:43 +080056 PersistableBundle b = null;
57 if (mSubscriptionInfoHelper.hasSubId()) {
58 b = PhoneGlobals.getInstance().getCarrierConfigForSubId(
59 mSubscriptionInfoHelper.getSubId());
Santos Cordon7d4ddf62013-07-10 11:58:08 -070060 } else {
SongFerngWangf6fd9922018-06-28 17:21:43 +080061 b = PhoneGlobals.getInstance().getCarrierConfig();
62 }
63
64 if (b != null) {
65 mShowCLIRButton = b.getBoolean(
66 CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALLER_ID_VISIBILITY_BOOL);
67 mShowCWButton = b.getBoolean(
68 CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL);
SongFerngWangbed485e2018-07-09 21:15:29 +080069 mCLIROverUtPrecautions = mShowCLIRButton && b.getBoolean(
70 CarrierConfigManager.KEY_CALLER_ID_OVER_UT_WARNING_BOOL);
71 mCWOverUtPrecautions = mShowCWButton && b.getBoolean(
72 CarrierConfigManager.KEY_CALL_WAITING_OVER_UT_WARNING_BOOL);
73 if (DBG) {
74 Log.d(LOG_TAG, "mCLIROverUtPrecautions:" + mCLIROverUtPrecautions
75 + ",mCWOverUtPrecautions:" + mCWOverUtPrecautions);
76 }
SongFerngWangf6fd9922018-06-28 17:21:43 +080077 }
78
SongFerngWangbed485e2018-07-09 21:15:29 +080079 boolean isSsOverUtPrecautions = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone);
80
SongFerngWangf6fd9922018-06-28 17:21:43 +080081 if (mCLIRButton != null) {
82 if (mShowCLIRButton) {
SongFerngWangbed485e2018-07-09 21:15:29 +080083 if (mCLIROverUtPrecautions && isSsOverUtPrecautions) {
84 mCLIRButton.setEnabled(false);
85 } else {
86 mPreferences.add(mCLIRButton);
87 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -070088 } else {
SongFerngWangf6fd9922018-06-28 17:21:43 +080089 prefSet.removePreference(mCLIRButton);
90 }
91 }
92
93 if (mCWButton != null) {
94 if (mShowCWButton) {
SongFerngWangbed485e2018-07-09 21:15:29 +080095 if (mCWOverUtPrecautions && isSsOverUtPrecautions) {
96 mCWButton.setEnabled(false);
97 } else {
98 mPreferences.add(mCWButton);
99 }
SongFerngWangf6fd9922018-06-28 17:21:43 +0800100 } else {
101 prefSet.removePreference(mCWButton);
102 }
103 }
104
105 if (mPreferences.size() != 0) {
106 if (icicle == null) {
107 if (DBG) Log.d(LOG_TAG, "start to init ");
108 doPreferenceInit(mInitIndex);
109 } else {
110 if (DBG) Log.d(LOG_TAG, "restore stored states");
111 mInitIndex = mPreferences.size();
SongFerngWangbed485e2018-07-09 21:15:29 +0800112 if (mShowCWButton && mCWButton != null && mCWButton.isEnabled()) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800113 mCWButton.init(this, true, mPhone);
114 }
SongFerngWangbed485e2018-07-09 21:15:29 +0800115 if (mShowCLIRButton && mCLIRButton != null && mCLIRButton.isEnabled()) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800116 mCLIRButton.init(this, true, mPhone);
117 int[] clirArray = icicle.getIntArray(mCLIRButton.getKey());
118 if (clirArray != null) {
119 if (DBG) {
120 Log.d(LOG_TAG, "onCreate: clirArray[0]="
121 + clirArray[0] + ", clirArray[1]=" + clirArray[1]);
122 }
123 mCLIRButton.handleGetCLIRResult(clirArray);
124 } else {
125 mCLIRButton.init(this, false, mPhone);
126 }
127 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700128 }
129 }
130
131 ActionBar actionBar = getActionBar();
132 if (actionBar != null) {
133 // android.R.id.home will be triggered in onOptionsItemSelected()
134 actionBar.setDisplayHomeAsUpEnabled(true);
135 }
136 }
137
138 @Override
SongFerngWangbed485e2018-07-09 21:15:29 +0800139 public void onResume() {
140 super.onResume();
141 int indexOfStartInit = mPreferences.size();
142 boolean isPrecaution = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone);
143 dismissWarningDialog();
144
145 if (mShowCLIRButton && mCLIROverUtPrecautions && mCLIRButton != null) {
146 if (isPrecaution) {
147 showWarningDialog(CW_WARNING_DIALOG);
148 if (mCLIRButton.isEnabled()) {
149 if (mPreferences.contains(mCLIRButton)) {
150 mPreferences.remove(mCLIRButton);
151 }
152 mCLIRButton.setEnabled(false);
153 }
154 } else {
155 if (!mPreferences.contains(mCLIRButton)) {
156 mCLIRButton.setEnabled(true);
157 mPreferences.add(mCLIRButton);
158 }
159 }
160 }
161 if (mShowCWButton && mCWOverUtPrecautions && mCWButton != null) {
162 if (isPrecaution) {
163 showWarningDialog(CALLER_ID_WARNING_DIALOG);
164 if (mCWButton.isEnabled()) {
165 if (mPreferences.contains(mCWButton)) {
166 mPreferences.remove(mCWButton);
167 }
168 mCWButton.setEnabled(false);
169 }
170 } else {
171 if (!mPreferences.contains(mCWButton)) {
172 mCWButton.setEnabled(true);
173 mPreferences.add(mCWButton);
174 }
175 }
176 }
177
178 if (indexOfStartInit < mPreferences.size()) {
179 mInitIndex = indexOfStartInit;
180 doPreferenceInit(indexOfStartInit);
181 }
182 }
183
184 @Override
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700185 protected void onSaveInstanceState(Bundle outState) {
186 super.onSaveInstanceState(outState);
187
SongFerngWangf6fd9922018-06-28 17:21:43 +0800188 if (mShowCLIRButton && mCLIRButton.clirArray != null) {
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700189 outState.putIntArray(mCLIRButton.getKey(), mCLIRButton.clirArray);
190 }
191 }
192
193 @Override
194 public void onFinished(Preference preference, boolean reading) {
195 if (mInitIndex < mPreferences.size()-1 && !isFinishing()) {
196 mInitIndex++;
SongFerngWangf6fd9922018-06-28 17:21:43 +0800197 doPreferenceInit(mInitIndex);
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700198 }
199 super.onFinished(preference, reading);
200 }
201
202 @Override
203 public boolean onOptionsItemSelected(MenuItem item) {
204 final int itemId = item.getItemId();
205 if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled()
Andrew Lee5efb1122014-12-05 04:20:42 -0800206 CallFeaturesSetting.goUpToTopLevelSetting(this, mSubscriptionInfoHelper);
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700207 return true;
208 }
209 return super.onOptionsItemSelected(item);
210 }
SongFerngWangf6fd9922018-06-28 17:21:43 +0800211
212 private void doPreferenceInit(int index) {
SongFerngWangbed485e2018-07-09 21:15:29 +0800213 if (mPreferences.size() > index) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800214 Preference pref = mPreferences.get(index);
215 if (pref instanceof CallWaitingSwitchPreference) {
216 ((CallWaitingSwitchPreference) pref).init(this, false, mPhone);
217 } else if (pref instanceof CLIRListPreference) {
218 ((CLIRListPreference) pref).init(this, false, mPhone);
219 }
220 }
221 }
SongFerngWangbed485e2018-07-09 21:15:29 +0800222
223 @Override
224 protected Dialog onCreateDialog(int id) {
225 if (id == CW_WARNING_DIALOG) {
226 return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CW_KEY);
227 } else if (id == CALLER_ID_WARNING_DIALOG) {
228 return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CLIR_KEY);
229 }
230 return super.onCreateDialog(id);
231 }
232
233 private void showWarningDialog(int id) {
234 showDialog(id);
235 }
236
237 private void dismissWarningDialog() {
238 dismissDialogSafely(CW_WARNING_DIALOG);
239 dismissDialogSafely(CALLER_ID_WARNING_DIALOG);
240 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700241}