blob: 7428321207b3f27b31779337477b719726acc1bf [file] [log] [blame]
Santos Cordon7d4ddf62013-07-10 11:58:08 -07001/*
2 * Copyright (C) 2009 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
18package com.android.phone;
19
20import android.os.Bundle;
21import android.preference.CheckBoxPreference;
22import android.preference.ListPreference;
23import android.preference.Preference;
24import android.preference.PreferenceScreen;
25import android.preference.PreferenceActivity;
26import com.android.internal.telephony.Phone;
27import com.android.internal.telephony.RILConstants;
28
29import android.os.AsyncResult;
30import android.os.Handler;
31import android.os.Message;
32import android.util.Log;
33
34
35/**
36 * List of Phone-specific settings screens.
37 */
38public class CellBroadcastSms extends PreferenceActivity
39 implements Preference.OnPreferenceChangeListener{
40 // debug data
41 private static final String LOG_TAG = "CellBroadcastSms";
42 private static final boolean DBG = false;
43
44 //String keys for preference lookup
45 private static final String BUTTON_ENABLE_DISABLE_BC_SMS_KEY =
46 "button_enable_disable_cell_bc_sms";
47 private static final String LIST_LANGUAGE_KEY =
48 "list_language";
49 private static final String BUTTON_EMERGENCY_BROADCAST_KEY =
50 "button_emergency_broadcast";
51 private static final String BUTTON_ADMINISTRATIVE_KEY =
52 "button_administrative";
53 private static final String BUTTON_MAINTENANCE_KEY =
54 "button_maintenance";
55 private static final String BUTTON_LOCAL_WEATHER_KEY =
56 "button_local_weather";
57 private static final String BUTTON_ATR_KEY =
58 "button_atr";
59 private static final String BUTTON_LAFS_KEY =
60 "button_lafs";
61 private static final String BUTTON_RESTAURANTS_KEY =
62 "button_restaurants";
63 private static final String BUTTON_LODGINGS_KEY =
64 "button_lodgings";
65 private static final String BUTTON_RETAIL_DIRECTORY_KEY =
66 "button_retail_directory";
67 private static final String BUTTON_ADVERTISEMENTS_KEY =
68 "button_advertisements";
69 private static final String BUTTON_STOCK_QUOTES_KEY =
70 "button_stock_quotes";
71 private static final String BUTTON_EO_KEY =
72 "button_eo";
73 private static final String BUTTON_MHH_KEY =
74 "button_mhh";
75 private static final String BUTTON_TECHNOLOGY_NEWS_KEY =
76 "button_technology_news";
77 private static final String BUTTON_MULTI_CATEGORY_KEY =
78 "button_multi_category";
79
80 private static final String BUTTON_LOCAL_GENERAL_NEWS_KEY =
81 "button_local_general_news";
82 private static final String BUTTON_REGIONAL_GENERAL_NEWS_KEY =
83 "button_regional_general_news";
84 private static final String BUTTON_NATIONAL_GENERAL_NEWS_KEY =
85 "button_national_general_news";
86 private static final String BUTTON_INTERNATIONAL_GENERAL_NEWS_KEY =
87 "button_international_general_news";
88
89 private static final String BUTTON_LOCAL_BF_NEWS_KEY =
90 "button_local_bf_news";
91 private static final String BUTTON_REGIONAL_BF_NEWS_KEY =
92 "button_regional_bf_news";
93 private static final String BUTTON_NATIONAL_BF_NEWS_KEY =
94 "button_national_bf_news";
95 private static final String BUTTON_INTERNATIONAL_BF_NEWS_KEY =
96 "button_international_bf_news";
97
98 private static final String BUTTON_LOCAL_SPORTS_NEWS_KEY =
99 "button_local_sports_news";
100 private static final String BUTTON_REGIONAL_SPORTS_NEWS_KEY =
101 "button_regional_sports_news";
102 private static final String BUTTON_NATIONAL_SPORTS_NEWS_KEY =
103 "button_national_sports_news";
104 private static final String BUTTON_INTERNATIONAL_SPORTS_NEWS_KEY =
105 "button_international_sports_news";
106
107 private static final String BUTTON_LOCAL_ENTERTAINMENT_NEWS_KEY =
108 "button_local_entertainment_news";
109 private static final String BUTTON_REGIONAL_ENTERTAINMENT_NEWS_KEY =
110 "button_regional_entertainment_news";
111 private static final String BUTTON_NATIONAL_ENTERTAINMENT_NEWS_KEY =
112 "button_national_entertainment_news";
113 private static final String BUTTON_INTERNATIONAL_ENTERTAINMENT_NEWS_KEY =
114 "button_international_entertainment_news";
115
116 //Class constants
117 //These values are related to the C structs. See the comments in method
118 //setCbSmsConfig for more information.
119 private static final int NO_OF_SERVICE_CATEGORIES = 31;
120 private static final int NO_OF_INTS_STRUCT_1 = 3;
121 private static final int MAX_LENGTH_RESULT = NO_OF_SERVICE_CATEGORIES * NO_OF_INTS_STRUCT_1 + 1;
122 //Handler keys
123 private static final int MESSAGE_ACTIVATE_CB_SMS = 1;
124 private static final int MESSAGE_GET_CB_SMS_CONFIG = 2;
125 private static final int MESSAGE_SET_CB_SMS_CONFIG = 3;
126
127 //UI objects
128 private CheckBoxPreference mButtonBcSms;
129
130 private ListPreference mListLanguage;
131
132 private CheckBoxPreference mButtonEmergencyBroadcast;
133 private CheckBoxPreference mButtonAdministrative;
134 private CheckBoxPreference mButtonMaintenance;
135 private CheckBoxPreference mButtonLocalWeather;
136 private CheckBoxPreference mButtonAtr;
137 private CheckBoxPreference mButtonLafs;
138 private CheckBoxPreference mButtonRestaurants;
139 private CheckBoxPreference mButtonLodgings;
140 private CheckBoxPreference mButtonRetailDirectory;
141 private CheckBoxPreference mButtonAdvertisements;
142 private CheckBoxPreference mButtonStockQuotes;
143 private CheckBoxPreference mButtonEo;
144 private CheckBoxPreference mButtonMhh;
145 private CheckBoxPreference mButtonTechnologyNews;
146 private CheckBoxPreference mButtonMultiCategory;
147
148 private CheckBoxPreference mButtonLocal1;
149 private CheckBoxPreference mButtonRegional1;
150 private CheckBoxPreference mButtonNational1;
151 private CheckBoxPreference mButtonInternational1;
152
153 private CheckBoxPreference mButtonLocal2;
154 private CheckBoxPreference mButtonRegional2;
155 private CheckBoxPreference mButtonNational2;
156 private CheckBoxPreference mButtonInternational2;
157
158 private CheckBoxPreference mButtonLocal3;
159 private CheckBoxPreference mButtonRegional3;
160 private CheckBoxPreference mButtonNational3;
161 private CheckBoxPreference mButtonInternational3;
162
163 private CheckBoxPreference mButtonLocal4;
164 private CheckBoxPreference mButtonRegional4;
165 private CheckBoxPreference mButtonNational4;
166 private CheckBoxPreference mButtonInternational4;
167
168
169 //Member variables
170 private Phone mPhone;
171 private MyHandler mHandler;
172
173 /**
174 * Invoked on each preference click in this hierarchy, overrides
175 * PreferenceActivity's implementation. Used to make sure we track the
176 * preference click events.
177 */
178 @Override
179 public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
180 Preference preference) {
181 if (preference == mButtonBcSms) {
182 if (DBG) Log.d(LOG_TAG, "onPreferenceTreeClick: preference == mButtonBcSms.");
183 if(mButtonBcSms.isChecked()) {
184 mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED,
185 Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
186 android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
187 android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
188 RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED);
189 enableDisableAllCbConfigButtons(true);
190 } else {
191 mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED,
192 Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
193 android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
194 android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
195 RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
196 enableDisableAllCbConfigButtons(false);
197 }
198 } else if (preference == mListLanguage) {
199 //Do nothing here, because this click will be handled in onPreferenceChange
200 } else if (preference == mButtonEmergencyBroadcast) {
201 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
202 mButtonEmergencyBroadcast.isChecked(), 1);
203 CellBroadcastSmsConfig.setCbSmsBSelectedValue(
204 mButtonEmergencyBroadcast.isChecked(), 1);
205 } else if (preference == mButtonAdministrative) {
206 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
207 mButtonAdministrative.isChecked(), 2);
208 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAdministrative.isChecked(), 2);
209 } else if (preference == mButtonMaintenance) {
210 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
211 mButtonMaintenance.isChecked(), 3);
212 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMaintenance.isChecked(), 3);
213 } else if (preference == mButtonLocalWeather) {
214 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
215 mButtonLocalWeather.isChecked(), 20);
216 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocalWeather.isChecked(), 20);
217 } else if (preference == mButtonAtr) {
218 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonAtr.isChecked(), 21);
219 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAtr.isChecked(), 21);
220 } else if (preference == mButtonLafs) {
221 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLafs.isChecked(), 22);
222 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLafs.isChecked(), 22);
223 } else if (preference == mButtonRestaurants) {
224 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
225 mButtonRestaurants.isChecked(), 23);
226 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRestaurants.isChecked(), 23);
227 } else if (preference == mButtonLodgings) {
228 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLodgings.isChecked(), 24);
229 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLodgings.isChecked(), 24);
230 } else if (preference == mButtonRetailDirectory) {
231 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
232 mButtonRetailDirectory.isChecked(), 25);
233 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRetailDirectory.isChecked(), 25);
234 } else if (preference == mButtonAdvertisements) {
235 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
236 mButtonAdvertisements.isChecked(), 26);
237 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAdvertisements.isChecked(), 26);
238 } else if (preference == mButtonStockQuotes) {
239 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
240 mButtonStockQuotes.isChecked(), 27);
241 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonStockQuotes.isChecked(), 27);
242 } else if (preference == mButtonEo) {
243 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonEo.isChecked(), 28);
244 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonEo.isChecked(), 28);
245 } else if (preference == mButtonMhh) {
246 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonMhh.isChecked(), 29);
247 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMhh.isChecked(), 29);
248 } else if (preference == mButtonTechnologyNews) {
249 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
250 mButtonTechnologyNews.isChecked(), 30);
251 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonTechnologyNews.isChecked(), 30);
252 } else if (preference == mButtonMultiCategory) {
253 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
254 mButtonMultiCategory.isChecked(), 31);
255 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMultiCategory.isChecked(), 31);
256 } else if (preference == mButtonLocal1) {
257 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal1.isChecked(), 4);
258 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal1.isChecked(), 4);
259 } else if (preference == mButtonRegional1) {
260 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
261 mButtonRegional1.isChecked(), 5);
262 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional1.isChecked(), 5);
263 } else if (preference == mButtonNational1) {
264 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
265 mButtonNational1.isChecked(), 6);
266 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational1.isChecked(), 6);
267 } else if (preference == mButtonInternational1) {
268 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
269 mButtonInternational1.isChecked(), 7);
270 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational1.isChecked(), 7);
271 } else if (preference == mButtonLocal2) {
272 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal2.isChecked(), 8);
273 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal2.isChecked(), 8);
274 } else if (preference == mButtonRegional2) {
275 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
276 mButtonRegional2.isChecked(), 9);
277 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional2.isChecked(), 9);
278 } else if (preference == mButtonNational2) {
279 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
280 mButtonNational2.isChecked(), 10);
281 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational2.isChecked(), 10);
282 } else if (preference == mButtonInternational2) {
283 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
284 mButtonInternational2.isChecked(), 11);
285 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational2.isChecked(), 11);
286 } else if (preference == mButtonLocal3) {
287 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal3.isChecked(), 12);
288 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal3.isChecked(), 12);
289 } else if (preference == mButtonRegional3) {
290 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
291 mButtonRegional3.isChecked(), 13);
292 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional3.isChecked(), 13);
293 } else if (preference == mButtonNational3) {
294 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
295 mButtonNational3.isChecked(), 14);
296 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational3.isChecked(), 14);
297 } else if (preference == mButtonInternational3) {
298 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
299 mButtonInternational3.isChecked(), 15);
300 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational3.isChecked(), 15);
301 } else if (preference == mButtonLocal4) {
302 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal4.isChecked(), 16);
303 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal4.isChecked(), 16);
304 } else if (preference == mButtonRegional4) {
305 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
306 mButtonRegional4.isChecked(), 17);
307 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional4.isChecked(), 17);
308 } else if (preference == mButtonNational4) {
309 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
310 mButtonNational4.isChecked(), 18);
311 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational4.isChecked(), 18);
312 } else if (preference == mButtonInternational4) {
313 CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
314 mButtonInternational4.isChecked(), 19);
315 CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational4.isChecked(), 19);
316 } else {
317 preferenceScreen.setEnabled(false);
318 return false;
319 }
320
321 return true;
322 }
323
324 public boolean onPreferenceChange(Preference preference, Object objValue) {
325 if (preference == mListLanguage) {
326 // set the new language to the array which will be transmitted later
327 CellBroadcastSmsConfig.setConfigDataCompleteLanguage(
328 mListLanguage.findIndexOfValue((String) objValue) + 1);
329 }
330
331 // always let the preference setting proceed.
332 return true;
333 }
334
335 public void onCreate(Bundle icicle) {
336 super.onCreate(icicle);
337
338 addPreferencesFromResource(R.xml.cell_broadcast_sms);
339
340 mPhone = PhoneGlobals.getPhone();
341 mHandler = new MyHandler();
342
343 PreferenceScreen prefSet = getPreferenceScreen();
344
345 mButtonBcSms = (CheckBoxPreference) prefSet.findPreference(
346 BUTTON_ENABLE_DISABLE_BC_SMS_KEY);
347 mListLanguage = (ListPreference) prefSet.findPreference(
348 LIST_LANGUAGE_KEY);
349 // set the listener for the language list preference
350 mListLanguage.setOnPreferenceChangeListener(this);
351 mButtonEmergencyBroadcast = (CheckBoxPreference) prefSet.findPreference(
352 BUTTON_EMERGENCY_BROADCAST_KEY);
353 mButtonAdministrative = (CheckBoxPreference) prefSet.findPreference(
354 BUTTON_ADMINISTRATIVE_KEY);
355 mButtonMaintenance = (CheckBoxPreference) prefSet.findPreference(
356 BUTTON_MAINTENANCE_KEY);
357 mButtonLocalWeather = (CheckBoxPreference) prefSet.findPreference(
358 BUTTON_LOCAL_WEATHER_KEY);
359 mButtonAtr = (CheckBoxPreference) prefSet.findPreference(
360 BUTTON_ATR_KEY);
361 mButtonLafs = (CheckBoxPreference) prefSet.findPreference(
362 BUTTON_LAFS_KEY);
363 mButtonRestaurants = (CheckBoxPreference) prefSet.findPreference(
364 BUTTON_RESTAURANTS_KEY);
365 mButtonLodgings = (CheckBoxPreference) prefSet.findPreference(
366 BUTTON_LODGINGS_KEY);
367 mButtonRetailDirectory = (CheckBoxPreference) prefSet.findPreference(
368 BUTTON_RETAIL_DIRECTORY_KEY);
369 mButtonAdvertisements = (CheckBoxPreference) prefSet.findPreference(
370 BUTTON_ADVERTISEMENTS_KEY);
371 mButtonStockQuotes = (CheckBoxPreference) prefSet.findPreference(
372 BUTTON_STOCK_QUOTES_KEY);
373 mButtonEo = (CheckBoxPreference) prefSet.findPreference(
374 BUTTON_EO_KEY);
375 mButtonMhh = (CheckBoxPreference) prefSet.findPreference(
376 BUTTON_MHH_KEY);
377 mButtonTechnologyNews = (CheckBoxPreference) prefSet.findPreference(
378 BUTTON_TECHNOLOGY_NEWS_KEY);
379 mButtonMultiCategory = (CheckBoxPreference) prefSet.findPreference(
380 BUTTON_MULTI_CATEGORY_KEY);
381
382 mButtonLocal1 = (CheckBoxPreference) prefSet.findPreference(
383 BUTTON_LOCAL_GENERAL_NEWS_KEY);
384 mButtonRegional1 = (CheckBoxPreference) prefSet.findPreference(
385 BUTTON_REGIONAL_GENERAL_NEWS_KEY);
386 mButtonNational1 = (CheckBoxPreference) prefSet.findPreference(
387 BUTTON_NATIONAL_GENERAL_NEWS_KEY);
388 mButtonInternational1 = (CheckBoxPreference) prefSet.findPreference(
389 BUTTON_INTERNATIONAL_GENERAL_NEWS_KEY);
390
391 mButtonLocal2 = (CheckBoxPreference) prefSet.findPreference(
392 BUTTON_LOCAL_BF_NEWS_KEY);
393 mButtonRegional2 = (CheckBoxPreference) prefSet.findPreference(
394 BUTTON_REGIONAL_BF_NEWS_KEY);
395 mButtonNational2 = (CheckBoxPreference) prefSet.findPreference(
396 BUTTON_NATIONAL_BF_NEWS_KEY);
397 mButtonInternational2 = (CheckBoxPreference) prefSet.findPreference(
398 BUTTON_INTERNATIONAL_BF_NEWS_KEY);
399
400 mButtonLocal3 = (CheckBoxPreference) prefSet.findPreference(
401 BUTTON_LOCAL_SPORTS_NEWS_KEY);
402 mButtonRegional3 = (CheckBoxPreference) prefSet.findPreference(
403 BUTTON_REGIONAL_SPORTS_NEWS_KEY);
404 mButtonNational3 = (CheckBoxPreference) prefSet.findPreference(
405 BUTTON_NATIONAL_SPORTS_NEWS_KEY);
406 mButtonInternational3 = (CheckBoxPreference) prefSet.findPreference(
407 BUTTON_INTERNATIONAL_SPORTS_NEWS_KEY);
408
409 mButtonLocal4 = (CheckBoxPreference) prefSet.findPreference(
410 BUTTON_LOCAL_ENTERTAINMENT_NEWS_KEY);
411 mButtonRegional4 = (CheckBoxPreference) prefSet.findPreference(
412 BUTTON_REGIONAL_ENTERTAINMENT_NEWS_KEY);
413 mButtonNational4 = (CheckBoxPreference) prefSet.findPreference(
414 BUTTON_NATIONAL_ENTERTAINMENT_NEWS_KEY);
415 mButtonInternational4 = (CheckBoxPreference) prefSet.findPreference(
416 BUTTON_INTERNATIONAL_ENTERTAINMENT_NEWS_KEY);
417 }
418
419 @Override
420 protected void onResume() {
421 super.onResume();
422
423 getPreferenceScreen().setEnabled(true);
424
425 int settingCbSms = android.provider.Settings.Global.getInt(
426 mPhone.getContext().getContentResolver(),
427 android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
428 RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
429 mButtonBcSms.setChecked(settingCbSms == RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED);
430
431 if(mButtonBcSms.isChecked()) {
432 enableDisableAllCbConfigButtons(true);
433 } else {
434 enableDisableAllCbConfigButtons(false);
435 }
436
437 mPhone.getCellBroadcastSmsConfig(Message.obtain(mHandler, MESSAGE_GET_CB_SMS_CONFIG));
438 }
439
440 @Override
441 protected void onPause() {
442 super.onPause();
443
444 CellBroadcastSmsConfig.setCbSmsNoOfStructs(NO_OF_SERVICE_CATEGORIES);
445
446 mPhone.setCellBroadcastSmsConfig(CellBroadcastSmsConfig.getCbSmsAllValues(),
447 Message.obtain(mHandler, MESSAGE_SET_CB_SMS_CONFIG));
448 }
449
450 private void enableDisableAllCbConfigButtons(boolean enable) {
451 mButtonEmergencyBroadcast.setEnabled(enable);
452 mListLanguage.setEnabled(enable);
453 mButtonAdministrative.setEnabled(enable);
454 mButtonMaintenance.setEnabled(enable);
455 mButtonLocalWeather.setEnabled(enable);
456 mButtonAtr.setEnabled(enable);
457 mButtonLafs.setEnabled(enable);
458 mButtonRestaurants.setEnabled(enable);
459 mButtonLodgings.setEnabled(enable);
460 mButtonRetailDirectory.setEnabled(enable);
461 mButtonAdvertisements.setEnabled(enable);
462 mButtonStockQuotes.setEnabled(enable);
463 mButtonEo.setEnabled(enable);
464 mButtonMhh.setEnabled(enable);
465 mButtonTechnologyNews.setEnabled(enable);
466 mButtonMultiCategory.setEnabled(enable);
467
468 mButtonLocal1.setEnabled(enable);
469 mButtonRegional1.setEnabled(enable);
470 mButtonNational1.setEnabled(enable);
471 mButtonInternational1.setEnabled(enable);
472
473 mButtonLocal2.setEnabled(enable);
474 mButtonRegional2.setEnabled(enable);
475 mButtonNational2.setEnabled(enable);
476 mButtonInternational2.setEnabled(enable);
477
478 mButtonLocal3.setEnabled(enable);
479 mButtonRegional3.setEnabled(enable);
480 mButtonNational3.setEnabled(enable);
481 mButtonInternational3.setEnabled(enable);
482
483 mButtonLocal4.setEnabled(enable);
484 mButtonRegional4.setEnabled(enable);
485 mButtonNational4.setEnabled(enable);
486 mButtonInternational4.setEnabled(enable);
487 }
488
489 private void setAllCbConfigButtons(int[] configArray) {
490 //These buttons are in a well defined sequence. If you want to change it,
491 //be sure to map the buttons to their corresponding slot in the configArray !
492 mButtonEmergencyBroadcast.setChecked(configArray[1] != 0);
493 //subtract 1, because the values are handled in an array which starts with 0 and not with 1
494 mListLanguage.setValueIndex(CellBroadcastSmsConfig.getConfigDataLanguage() - 1);
495 mButtonAdministrative.setChecked(configArray[2] != 0);
496 mButtonMaintenance.setChecked(configArray[3] != 0);
497 mButtonLocalWeather.setChecked(configArray[20] != 0);
498 mButtonAtr.setChecked(configArray[21] != 0);
499 mButtonLafs.setChecked(configArray[22] != 0);
500 mButtonRestaurants.setChecked(configArray[23] != 0);
501 mButtonLodgings.setChecked(configArray[24] != 0);
502 mButtonRetailDirectory.setChecked(configArray[25] != 0);
503 mButtonAdvertisements.setChecked(configArray[26] != 0);
504 mButtonStockQuotes.setChecked(configArray[27] != 0);
505 mButtonEo.setChecked(configArray[28] != 0);
506 mButtonMhh.setChecked(configArray[29] != 0);
507 mButtonTechnologyNews.setChecked(configArray[30] != 0);
508 mButtonMultiCategory.setChecked(configArray[31] != 0);
509
510 mButtonLocal1.setChecked(configArray[4] != 0);
511 mButtonRegional1.setChecked(configArray[5] != 0);
512 mButtonNational1.setChecked(configArray[6] != 0);
513 mButtonInternational1.setChecked(configArray[7] != 0);
514
515 mButtonLocal2.setChecked(configArray[8] != 0);
516 mButtonRegional2.setChecked(configArray[9] != 0);
517 mButtonNational2.setChecked(configArray[10] != 0);
518 mButtonInternational2.setChecked(configArray[11] != 0);
519
520 mButtonLocal3.setChecked(configArray[12] != 0);
521 mButtonRegional3.setChecked(configArray[13] != 0);
522 mButtonNational3.setChecked(configArray[14] != 0);
523 mButtonInternational3.setChecked(configArray[15] != 0);
524
525 mButtonLocal4.setChecked(configArray[16] != 0);
526 mButtonRegional4.setChecked(configArray[17] != 0);
527 mButtonNational4.setChecked(configArray[18] != 0);
528 mButtonInternational4.setChecked(configArray[19] != 0);
529 }
530
531 private class MyHandler extends Handler {
532
533 @Override
534 public void handleMessage(Message msg) {
535 switch (msg.what) {
536 case MESSAGE_ACTIVATE_CB_SMS:
537 //Only a log message here, because the received response is always null
538 if (DBG) Log.d(LOG_TAG, "Cell Broadcast SMS enabled/disabled.");
539 break;
540 case MESSAGE_GET_CB_SMS_CONFIG:
541 int result[] = (int[])((AsyncResult)msg.obj).result;
542
543 // check if the actual service categoties table size on the NV is '0'
544 if (result[0] == 0) {
545 result[0] = NO_OF_SERVICE_CATEGORIES;
546
547 mButtonBcSms.setChecked(false);
548 mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED,
549 Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
550 android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
551 android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
552 RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
553 enableDisableAllCbConfigButtons(false);
554 }
555
556 CellBroadcastSmsConfig.setCbSmsConfig(result);
557 setAllCbConfigButtons(CellBroadcastSmsConfig.getCbSmsBselectedValues());
558
559 break;
560 case MESSAGE_SET_CB_SMS_CONFIG:
561 //Only a log message here, because the received response is always null
562 if (DBG) Log.d(LOG_TAG, "Set Cell Broadcast SMS values.");
563 break;
564 default:
565 Log.e(LOG_TAG, "Error! Unhandled message in CellBroadcastSms.java. Message: "
566 + msg.what);
567 break;
568 }
569 }
570 }
571
572 private static final class CellBroadcastSmsConfig {
573
574 //The values in this array are stored in a particular order. This order
575 //is calculated in the setCbSmsConfig method of this class.
576 //For more information see comments below...
577 //NO_OF_SERVICE_CATEGORIES +1 is used, because we will leave the first array entry 0
578 private static int mBSelected[] = new int[NO_OF_SERVICE_CATEGORIES + 1];
579 private static int mConfigDataComplete[] = new int[MAX_LENGTH_RESULT];
580
581 private static void setCbSmsConfig(int[] configData) {
582 if(configData == null) {
583 Log.e(LOG_TAG, "Error! No cell broadcast service categories returned.");
584 return;
585 }
586
587 if(configData[0] > MAX_LENGTH_RESULT) {
588 Log.e(LOG_TAG, "Error! Wrong number of service categories returned from RIL");
589 return;
590 }
591
592 //The required config values for broadcast SMS are stored in a C struct:
593 //
594 // typedef struct {
595 // int size;
596 // RIL_CDMA_BcServiceInfo *entries;
597 // } RIL_CDMA_BcSMSConfig;
598 //
599 // typedef struct {
600 // int uServiceCategory;
601 // int uLanguage;
602 // unsigned char bSelected;
603 // } RIL_CDMA_BcServiceInfo;
604 //
605 // This means, that we have to ignore the first value and check every
606 // 3rd value starting with the 2nd of all. This value indicates, where we
607 // will store the appropriate bSelected value, which is 2 values behind it.
608 for(int i = 1; i < configData.length; i += NO_OF_INTS_STRUCT_1) {
609 mBSelected[configData[i]] = configData[i +2];
610 }
611
612 //Store all values in an extra array
613 mConfigDataComplete = configData;
614 }
615
616 private static void setCbSmsBSelectedValue(boolean value, int pos) {
617 if(pos < mBSelected.length) {
618 mBSelected[pos] = (value == true ? 1 : 0);
619 } else {
620 Log.e(LOG_TAG,"Error! Invalid value position.");
621 }
622 }
623
624 private static int[] getCbSmsBselectedValues() {
625 return(mBSelected);
626 }
627
628 // TODO: Change the return value to a RIL_BroadcastSMSConfig
629 private static int[] getCbSmsAllValues() {
630 return(mConfigDataComplete);
631 }
632
633 private static void setCbSmsNoOfStructs(int value) {
634 //Sets the size parameter, which contains the number of structs
635 //that will be transmitted
636 mConfigDataComplete[0] = value;
637 }
638
639 private static void setConfigDataCompleteBSelected(boolean value, int serviceCategory) {
640 //Sets the bSelected value for a specific serviceCategory
641 for(int i = 1; i < mConfigDataComplete.length; i += NO_OF_INTS_STRUCT_1) {
642 if(mConfigDataComplete[i] == serviceCategory) {
643 mConfigDataComplete[i + 2] = value == true ? 1 : 0;
644 break;
645 }
646 }
647 }
648
649 private static void setConfigDataCompleteLanguage(int language) {
650 //It is only possible to set the same language for all entries
651 for(int i = 2; i < mConfigDataComplete.length; i += NO_OF_INTS_STRUCT_1) {
652 mConfigDataComplete[i] = language;
653 }
654 }
655
656 private static int getConfigDataLanguage() {
657 int language = mConfigDataComplete[2];
658 //2 is the language value of the first entry
659 //It is only possible to set the same language for all entries
660 if (language < 1 || language > 7) {
661 Log.e(LOG_TAG, "Error! Wrong language returned from RIL...defaulting to 1, english");
662 return 1;
663 }
664 else {
665 return language;
666 }
667 }
668 }
669}