blob: 6048c927afdb843704294ddb44793f787fbcf5fa [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
Tyler Gunn662cb392025-01-17 23:34:46 +000045 getWindow().addSystemFlags(
46 android.view.WindowManager.LayoutParams
47 .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
48
Santos Cordon7d4ddf62013-07-10 11:58:08 -070049 addPreferencesFromResource(R.xml.gsm_umts_additional_options);
50
Andrew Leedd4f6df2014-12-09 19:13:51 -080051 mSubscriptionInfoHelper = new SubscriptionInfoHelper(this, getIntent());
Andrew Lee5efb1122014-12-05 04:20:42 -080052 mSubscriptionInfoHelper.setActionBarTitle(
Andrew Lee2b36ba22014-11-05 17:08:49 -080053 getActionBar(), getResources(), R.string.additional_gsm_call_settings_with_label);
Andrew Lee5efb1122014-12-05 04:20:42 -080054 mPhone = mSubscriptionInfoHelper.getPhone();
Andrew Lee2b36ba22014-11-05 17:08:49 -080055
Santos Cordon7d4ddf62013-07-10 11:58:08 -070056 PreferenceScreen prefSet = getPreferenceScreen();
57 mCLIRButton = (CLIRListPreference) prefSet.findPreference(BUTTON_CLIR_KEY);
fionaxue46e69f2017-04-27 14:32:46 -070058 mCWButton = (CallWaitingSwitchPreference) prefSet.findPreference(BUTTON_CW_KEY);
Santos Cordon7d4ddf62013-07-10 11:58:08 -070059
SongFerngWangf6fd9922018-06-28 17:21:43 +080060 PersistableBundle b = null;
61 if (mSubscriptionInfoHelper.hasSubId()) {
62 b = PhoneGlobals.getInstance().getCarrierConfigForSubId(
63 mSubscriptionInfoHelper.getSubId());
Santos Cordon7d4ddf62013-07-10 11:58:08 -070064 } else {
SongFerngWangf6fd9922018-06-28 17:21:43 +080065 b = PhoneGlobals.getInstance().getCarrierConfig();
66 }
67
68 if (b != null) {
69 mShowCLIRButton = b.getBoolean(
70 CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALLER_ID_VISIBILITY_BOOL);
71 mShowCWButton = b.getBoolean(
72 CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL);
SongFerngWangbed485e2018-07-09 21:15:29 +080073 mCLIROverUtPrecautions = mShowCLIRButton && b.getBoolean(
74 CarrierConfigManager.KEY_CALLER_ID_OVER_UT_WARNING_BOOL);
75 mCWOverUtPrecautions = mShowCWButton && b.getBoolean(
76 CarrierConfigManager.KEY_CALL_WAITING_OVER_UT_WARNING_BOOL);
77 if (DBG) {
78 Log.d(LOG_TAG, "mCLIROverUtPrecautions:" + mCLIROverUtPrecautions
79 + ",mCWOverUtPrecautions:" + mCWOverUtPrecautions);
80 }
SongFerngWangf6fd9922018-06-28 17:21:43 +080081 }
82
SongFerngWangbed485e2018-07-09 21:15:29 +080083 boolean isSsOverUtPrecautions = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone);
84
SongFerngWangf6fd9922018-06-28 17:21:43 +080085 if (mCLIRButton != null) {
86 if (mShowCLIRButton) {
SongFerngWangbed485e2018-07-09 21:15:29 +080087 if (mCLIROverUtPrecautions && isSsOverUtPrecautions) {
88 mCLIRButton.setEnabled(false);
89 } else {
90 mPreferences.add(mCLIRButton);
91 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -070092 } else {
SongFerngWangf6fd9922018-06-28 17:21:43 +080093 prefSet.removePreference(mCLIRButton);
94 }
95 }
96
97 if (mCWButton != null) {
98 if (mShowCWButton) {
SongFerngWangbed485e2018-07-09 21:15:29 +080099 if (mCWOverUtPrecautions && isSsOverUtPrecautions) {
100 mCWButton.setEnabled(false);
101 } else {
102 mPreferences.add(mCWButton);
103 }
SongFerngWangf6fd9922018-06-28 17:21:43 +0800104 } else {
105 prefSet.removePreference(mCWButton);
106 }
107 }
108
109 if (mPreferences.size() != 0) {
110 if (icicle == null) {
111 if (DBG) Log.d(LOG_TAG, "start to init ");
112 doPreferenceInit(mInitIndex);
113 } else {
114 if (DBG) Log.d(LOG_TAG, "restore stored states");
115 mInitIndex = mPreferences.size();
SongFerngWangbed485e2018-07-09 21:15:29 +0800116 if (mShowCWButton && mCWButton != null && mCWButton.isEnabled()) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800117 mCWButton.init(this, true, mPhone);
118 }
SongFerngWangbed485e2018-07-09 21:15:29 +0800119 if (mShowCLIRButton && mCLIRButton != null && mCLIRButton.isEnabled()) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800120 mCLIRButton.init(this, true, mPhone);
121 int[] clirArray = icicle.getIntArray(mCLIRButton.getKey());
122 if (clirArray != null) {
123 if (DBG) {
124 Log.d(LOG_TAG, "onCreate: clirArray[0]="
125 + clirArray[0] + ", clirArray[1]=" + clirArray[1]);
126 }
127 mCLIRButton.handleGetCLIRResult(clirArray);
128 } else {
129 mCLIRButton.init(this, false, mPhone);
130 }
131 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700132 }
133 }
134
135 ActionBar actionBar = getActionBar();
136 if (actionBar != null) {
137 // android.R.id.home will be triggered in onOptionsItemSelected()
138 actionBar.setDisplayHomeAsUpEnabled(true);
139 }
140 }
141
142 @Override
SongFerngWangbed485e2018-07-09 21:15:29 +0800143 public void onResume() {
144 super.onResume();
145 int indexOfStartInit = mPreferences.size();
146 boolean isPrecaution = SuppServicesUiUtil.isSsOverUtPrecautions(this, mPhone);
147 dismissWarningDialog();
148
149 if (mShowCLIRButton && mCLIROverUtPrecautions && mCLIRButton != null) {
150 if (isPrecaution) {
151 showWarningDialog(CW_WARNING_DIALOG);
152 if (mCLIRButton.isEnabled()) {
153 if (mPreferences.contains(mCLIRButton)) {
154 mPreferences.remove(mCLIRButton);
155 }
156 mCLIRButton.setEnabled(false);
157 }
158 } else {
159 if (!mPreferences.contains(mCLIRButton)) {
160 mCLIRButton.setEnabled(true);
161 mPreferences.add(mCLIRButton);
162 }
163 }
164 }
165 if (mShowCWButton && mCWOverUtPrecautions && mCWButton != null) {
166 if (isPrecaution) {
167 showWarningDialog(CALLER_ID_WARNING_DIALOG);
168 if (mCWButton.isEnabled()) {
169 if (mPreferences.contains(mCWButton)) {
170 mPreferences.remove(mCWButton);
171 }
172 mCWButton.setEnabled(false);
173 }
174 } else {
175 if (!mPreferences.contains(mCWButton)) {
176 mCWButton.setEnabled(true);
177 mPreferences.add(mCWButton);
178 }
179 }
180 }
181
182 if (indexOfStartInit < mPreferences.size()) {
183 mInitIndex = indexOfStartInit;
184 doPreferenceInit(indexOfStartInit);
185 }
186 }
187
188 @Override
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700189 protected void onSaveInstanceState(Bundle outState) {
190 super.onSaveInstanceState(outState);
191
SongFerngWangf6fd9922018-06-28 17:21:43 +0800192 if (mShowCLIRButton && mCLIRButton.clirArray != null) {
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700193 outState.putIntArray(mCLIRButton.getKey(), mCLIRButton.clirArray);
194 }
195 }
196
197 @Override
198 public void onFinished(Preference preference, boolean reading) {
199 if (mInitIndex < mPreferences.size()-1 && !isFinishing()) {
200 mInitIndex++;
SongFerngWangf6fd9922018-06-28 17:21:43 +0800201 doPreferenceInit(mInitIndex);
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700202 }
203 super.onFinished(preference, reading);
204 }
205
206 @Override
207 public boolean onOptionsItemSelected(MenuItem item) {
208 final int itemId = item.getItemId();
209 if (itemId == android.R.id.home) { // See ActionBar#setDisplayHomeAsUpEnabled()
Andrew Lee5efb1122014-12-05 04:20:42 -0800210 CallFeaturesSetting.goUpToTopLevelSetting(this, mSubscriptionInfoHelper);
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700211 return true;
212 }
213 return super.onOptionsItemSelected(item);
214 }
SongFerngWangf6fd9922018-06-28 17:21:43 +0800215
216 private void doPreferenceInit(int index) {
SongFerngWangbed485e2018-07-09 21:15:29 +0800217 if (mPreferences.size() > index) {
SongFerngWangf6fd9922018-06-28 17:21:43 +0800218 Preference pref = mPreferences.get(index);
219 if (pref instanceof CallWaitingSwitchPreference) {
220 ((CallWaitingSwitchPreference) pref).init(this, false, mPhone);
221 } else if (pref instanceof CLIRListPreference) {
222 ((CLIRListPreference) pref).init(this, false, mPhone);
223 }
224 }
225 }
SongFerngWangbed485e2018-07-09 21:15:29 +0800226
227 @Override
228 protected Dialog onCreateDialog(int id) {
229 if (id == CW_WARNING_DIALOG) {
230 return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CW_KEY);
231 } else if (id == CALLER_ID_WARNING_DIALOG) {
232 return SuppServicesUiUtil.showBlockingSuppServicesDialog(this, mPhone, BUTTON_CLIR_KEY);
233 }
234 return super.onCreateDialog(id);
235 }
236
237 private void showWarningDialog(int id) {
238 showDialog(id);
239 }
240
241 private void dismissWarningDialog() {
242 dismissDialogSafely(CW_WARNING_DIALOG);
243 dismissDialogSafely(CALLER_ID_WARNING_DIALOG);
244 }
Santos Cordon7d4ddf62013-07-10 11:58:08 -0700245}