Blanket copy of PhoneApp to services/Telephony.
First phase of splitting out InCallUI from PhoneApp.
Change-Id: I237341c4ff00e96c677caa4580b251ef3432931b
diff --git a/src/com/android/phone/CellBroadcastSms.java b/src/com/android/phone/CellBroadcastSms.java
new file mode 100644
index 0000000..7428321
--- /dev/null
+++ b/src/com/android/phone/CellBroadcastSms.java
@@ -0,0 +1,669 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package com.android.phone;
+
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.preference.PreferenceActivity;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.RILConstants;
+
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.Message;
+import android.util.Log;
+
+
+/**
+ * List of Phone-specific settings screens.
+ */
+public class CellBroadcastSms extends PreferenceActivity
+ implements Preference.OnPreferenceChangeListener{
+ // debug data
+ private static final String LOG_TAG = "CellBroadcastSms";
+ private static final boolean DBG = false;
+
+ //String keys for preference lookup
+ private static final String BUTTON_ENABLE_DISABLE_BC_SMS_KEY =
+ "button_enable_disable_cell_bc_sms";
+ private static final String LIST_LANGUAGE_KEY =
+ "list_language";
+ private static final String BUTTON_EMERGENCY_BROADCAST_KEY =
+ "button_emergency_broadcast";
+ private static final String BUTTON_ADMINISTRATIVE_KEY =
+ "button_administrative";
+ private static final String BUTTON_MAINTENANCE_KEY =
+ "button_maintenance";
+ private static final String BUTTON_LOCAL_WEATHER_KEY =
+ "button_local_weather";
+ private static final String BUTTON_ATR_KEY =
+ "button_atr";
+ private static final String BUTTON_LAFS_KEY =
+ "button_lafs";
+ private static final String BUTTON_RESTAURANTS_KEY =
+ "button_restaurants";
+ private static final String BUTTON_LODGINGS_KEY =
+ "button_lodgings";
+ private static final String BUTTON_RETAIL_DIRECTORY_KEY =
+ "button_retail_directory";
+ private static final String BUTTON_ADVERTISEMENTS_KEY =
+ "button_advertisements";
+ private static final String BUTTON_STOCK_QUOTES_KEY =
+ "button_stock_quotes";
+ private static final String BUTTON_EO_KEY =
+ "button_eo";
+ private static final String BUTTON_MHH_KEY =
+ "button_mhh";
+ private static final String BUTTON_TECHNOLOGY_NEWS_KEY =
+ "button_technology_news";
+ private static final String BUTTON_MULTI_CATEGORY_KEY =
+ "button_multi_category";
+
+ private static final String BUTTON_LOCAL_GENERAL_NEWS_KEY =
+ "button_local_general_news";
+ private static final String BUTTON_REGIONAL_GENERAL_NEWS_KEY =
+ "button_regional_general_news";
+ private static final String BUTTON_NATIONAL_GENERAL_NEWS_KEY =
+ "button_national_general_news";
+ private static final String BUTTON_INTERNATIONAL_GENERAL_NEWS_KEY =
+ "button_international_general_news";
+
+ private static final String BUTTON_LOCAL_BF_NEWS_KEY =
+ "button_local_bf_news";
+ private static final String BUTTON_REGIONAL_BF_NEWS_KEY =
+ "button_regional_bf_news";
+ private static final String BUTTON_NATIONAL_BF_NEWS_KEY =
+ "button_national_bf_news";
+ private static final String BUTTON_INTERNATIONAL_BF_NEWS_KEY =
+ "button_international_bf_news";
+
+ private static final String BUTTON_LOCAL_SPORTS_NEWS_KEY =
+ "button_local_sports_news";
+ private static final String BUTTON_REGIONAL_SPORTS_NEWS_KEY =
+ "button_regional_sports_news";
+ private static final String BUTTON_NATIONAL_SPORTS_NEWS_KEY =
+ "button_national_sports_news";
+ private static final String BUTTON_INTERNATIONAL_SPORTS_NEWS_KEY =
+ "button_international_sports_news";
+
+ private static final String BUTTON_LOCAL_ENTERTAINMENT_NEWS_KEY =
+ "button_local_entertainment_news";
+ private static final String BUTTON_REGIONAL_ENTERTAINMENT_NEWS_KEY =
+ "button_regional_entertainment_news";
+ private static final String BUTTON_NATIONAL_ENTERTAINMENT_NEWS_KEY =
+ "button_national_entertainment_news";
+ private static final String BUTTON_INTERNATIONAL_ENTERTAINMENT_NEWS_KEY =
+ "button_international_entertainment_news";
+
+ //Class constants
+ //These values are related to the C structs. See the comments in method
+ //setCbSmsConfig for more information.
+ private static final int NO_OF_SERVICE_CATEGORIES = 31;
+ private static final int NO_OF_INTS_STRUCT_1 = 3;
+ private static final int MAX_LENGTH_RESULT = NO_OF_SERVICE_CATEGORIES * NO_OF_INTS_STRUCT_1 + 1;
+ //Handler keys
+ private static final int MESSAGE_ACTIVATE_CB_SMS = 1;
+ private static final int MESSAGE_GET_CB_SMS_CONFIG = 2;
+ private static final int MESSAGE_SET_CB_SMS_CONFIG = 3;
+
+ //UI objects
+ private CheckBoxPreference mButtonBcSms;
+
+ private ListPreference mListLanguage;
+
+ private CheckBoxPreference mButtonEmergencyBroadcast;
+ private CheckBoxPreference mButtonAdministrative;
+ private CheckBoxPreference mButtonMaintenance;
+ private CheckBoxPreference mButtonLocalWeather;
+ private CheckBoxPreference mButtonAtr;
+ private CheckBoxPreference mButtonLafs;
+ private CheckBoxPreference mButtonRestaurants;
+ private CheckBoxPreference mButtonLodgings;
+ private CheckBoxPreference mButtonRetailDirectory;
+ private CheckBoxPreference mButtonAdvertisements;
+ private CheckBoxPreference mButtonStockQuotes;
+ private CheckBoxPreference mButtonEo;
+ private CheckBoxPreference mButtonMhh;
+ private CheckBoxPreference mButtonTechnologyNews;
+ private CheckBoxPreference mButtonMultiCategory;
+
+ private CheckBoxPreference mButtonLocal1;
+ private CheckBoxPreference mButtonRegional1;
+ private CheckBoxPreference mButtonNational1;
+ private CheckBoxPreference mButtonInternational1;
+
+ private CheckBoxPreference mButtonLocal2;
+ private CheckBoxPreference mButtonRegional2;
+ private CheckBoxPreference mButtonNational2;
+ private CheckBoxPreference mButtonInternational2;
+
+ private CheckBoxPreference mButtonLocal3;
+ private CheckBoxPreference mButtonRegional3;
+ private CheckBoxPreference mButtonNational3;
+ private CheckBoxPreference mButtonInternational3;
+
+ private CheckBoxPreference mButtonLocal4;
+ private CheckBoxPreference mButtonRegional4;
+ private CheckBoxPreference mButtonNational4;
+ private CheckBoxPreference mButtonInternational4;
+
+
+ //Member variables
+ private Phone mPhone;
+ private MyHandler mHandler;
+
+ /**
+ * Invoked on each preference click in this hierarchy, overrides
+ * PreferenceActivity's implementation. Used to make sure we track the
+ * preference click events.
+ */
+ @Override
+ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+ Preference preference) {
+ if (preference == mButtonBcSms) {
+ if (DBG) Log.d(LOG_TAG, "onPreferenceTreeClick: preference == mButtonBcSms.");
+ if(mButtonBcSms.isChecked()) {
+ mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED,
+ Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
+ RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED);
+ enableDisableAllCbConfigButtons(true);
+ } else {
+ mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED,
+ Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
+ RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
+ enableDisableAllCbConfigButtons(false);
+ }
+ } else if (preference == mListLanguage) {
+ //Do nothing here, because this click will be handled in onPreferenceChange
+ } else if (preference == mButtonEmergencyBroadcast) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonEmergencyBroadcast.isChecked(), 1);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(
+ mButtonEmergencyBroadcast.isChecked(), 1);
+ } else if (preference == mButtonAdministrative) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonAdministrative.isChecked(), 2);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAdministrative.isChecked(), 2);
+ } else if (preference == mButtonMaintenance) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonMaintenance.isChecked(), 3);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMaintenance.isChecked(), 3);
+ } else if (preference == mButtonLocalWeather) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonLocalWeather.isChecked(), 20);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocalWeather.isChecked(), 20);
+ } else if (preference == mButtonAtr) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonAtr.isChecked(), 21);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAtr.isChecked(), 21);
+ } else if (preference == mButtonLafs) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLafs.isChecked(), 22);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLafs.isChecked(), 22);
+ } else if (preference == mButtonRestaurants) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRestaurants.isChecked(), 23);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRestaurants.isChecked(), 23);
+ } else if (preference == mButtonLodgings) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLodgings.isChecked(), 24);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLodgings.isChecked(), 24);
+ } else if (preference == mButtonRetailDirectory) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRetailDirectory.isChecked(), 25);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRetailDirectory.isChecked(), 25);
+ } else if (preference == mButtonAdvertisements) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonAdvertisements.isChecked(), 26);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonAdvertisements.isChecked(), 26);
+ } else if (preference == mButtonStockQuotes) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonStockQuotes.isChecked(), 27);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonStockQuotes.isChecked(), 27);
+ } else if (preference == mButtonEo) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonEo.isChecked(), 28);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonEo.isChecked(), 28);
+ } else if (preference == mButtonMhh) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonMhh.isChecked(), 29);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMhh.isChecked(), 29);
+ } else if (preference == mButtonTechnologyNews) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonTechnologyNews.isChecked(), 30);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonTechnologyNews.isChecked(), 30);
+ } else if (preference == mButtonMultiCategory) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonMultiCategory.isChecked(), 31);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonMultiCategory.isChecked(), 31);
+ } else if (preference == mButtonLocal1) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal1.isChecked(), 4);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal1.isChecked(), 4);
+ } else if (preference == mButtonRegional1) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRegional1.isChecked(), 5);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional1.isChecked(), 5);
+ } else if (preference == mButtonNational1) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonNational1.isChecked(), 6);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational1.isChecked(), 6);
+ } else if (preference == mButtonInternational1) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonInternational1.isChecked(), 7);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational1.isChecked(), 7);
+ } else if (preference == mButtonLocal2) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal2.isChecked(), 8);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal2.isChecked(), 8);
+ } else if (preference == mButtonRegional2) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRegional2.isChecked(), 9);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional2.isChecked(), 9);
+ } else if (preference == mButtonNational2) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonNational2.isChecked(), 10);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational2.isChecked(), 10);
+ } else if (preference == mButtonInternational2) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonInternational2.isChecked(), 11);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational2.isChecked(), 11);
+ } else if (preference == mButtonLocal3) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal3.isChecked(), 12);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal3.isChecked(), 12);
+ } else if (preference == mButtonRegional3) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRegional3.isChecked(), 13);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional3.isChecked(), 13);
+ } else if (preference == mButtonNational3) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonNational3.isChecked(), 14);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational3.isChecked(), 14);
+ } else if (preference == mButtonInternational3) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonInternational3.isChecked(), 15);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational3.isChecked(), 15);
+ } else if (preference == mButtonLocal4) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(mButtonLocal4.isChecked(), 16);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonLocal4.isChecked(), 16);
+ } else if (preference == mButtonRegional4) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonRegional4.isChecked(), 17);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonRegional4.isChecked(), 17);
+ } else if (preference == mButtonNational4) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonNational4.isChecked(), 18);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonNational4.isChecked(), 18);
+ } else if (preference == mButtonInternational4) {
+ CellBroadcastSmsConfig.setConfigDataCompleteBSelected(
+ mButtonInternational4.isChecked(), 19);
+ CellBroadcastSmsConfig.setCbSmsBSelectedValue(mButtonInternational4.isChecked(), 19);
+ } else {
+ preferenceScreen.setEnabled(false);
+ return false;
+ }
+
+ return true;
+ }
+
+ public boolean onPreferenceChange(Preference preference, Object objValue) {
+ if (preference == mListLanguage) {
+ // set the new language to the array which will be transmitted later
+ CellBroadcastSmsConfig.setConfigDataCompleteLanguage(
+ mListLanguage.findIndexOfValue((String) objValue) + 1);
+ }
+
+ // always let the preference setting proceed.
+ return true;
+ }
+
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ addPreferencesFromResource(R.xml.cell_broadcast_sms);
+
+ mPhone = PhoneGlobals.getPhone();
+ mHandler = new MyHandler();
+
+ PreferenceScreen prefSet = getPreferenceScreen();
+
+ mButtonBcSms = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_ENABLE_DISABLE_BC_SMS_KEY);
+ mListLanguage = (ListPreference) prefSet.findPreference(
+ LIST_LANGUAGE_KEY);
+ // set the listener for the language list preference
+ mListLanguage.setOnPreferenceChangeListener(this);
+ mButtonEmergencyBroadcast = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_EMERGENCY_BROADCAST_KEY);
+ mButtonAdministrative = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_ADMINISTRATIVE_KEY);
+ mButtonMaintenance = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_MAINTENANCE_KEY);
+ mButtonLocalWeather = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LOCAL_WEATHER_KEY);
+ mButtonAtr = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_ATR_KEY);
+ mButtonLafs = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LAFS_KEY);
+ mButtonRestaurants = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_RESTAURANTS_KEY);
+ mButtonLodgings = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LODGINGS_KEY);
+ mButtonRetailDirectory = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_RETAIL_DIRECTORY_KEY);
+ mButtonAdvertisements = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_ADVERTISEMENTS_KEY);
+ mButtonStockQuotes = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_STOCK_QUOTES_KEY);
+ mButtonEo = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_EO_KEY);
+ mButtonMhh = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_MHH_KEY);
+ mButtonTechnologyNews = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_TECHNOLOGY_NEWS_KEY);
+ mButtonMultiCategory = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_MULTI_CATEGORY_KEY);
+
+ mButtonLocal1 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LOCAL_GENERAL_NEWS_KEY);
+ mButtonRegional1 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_REGIONAL_GENERAL_NEWS_KEY);
+ mButtonNational1 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_NATIONAL_GENERAL_NEWS_KEY);
+ mButtonInternational1 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_INTERNATIONAL_GENERAL_NEWS_KEY);
+
+ mButtonLocal2 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LOCAL_BF_NEWS_KEY);
+ mButtonRegional2 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_REGIONAL_BF_NEWS_KEY);
+ mButtonNational2 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_NATIONAL_BF_NEWS_KEY);
+ mButtonInternational2 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_INTERNATIONAL_BF_NEWS_KEY);
+
+ mButtonLocal3 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LOCAL_SPORTS_NEWS_KEY);
+ mButtonRegional3 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_REGIONAL_SPORTS_NEWS_KEY);
+ mButtonNational3 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_NATIONAL_SPORTS_NEWS_KEY);
+ mButtonInternational3 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_INTERNATIONAL_SPORTS_NEWS_KEY);
+
+ mButtonLocal4 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_LOCAL_ENTERTAINMENT_NEWS_KEY);
+ mButtonRegional4 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_REGIONAL_ENTERTAINMENT_NEWS_KEY);
+ mButtonNational4 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_NATIONAL_ENTERTAINMENT_NEWS_KEY);
+ mButtonInternational4 = (CheckBoxPreference) prefSet.findPreference(
+ BUTTON_INTERNATIONAL_ENTERTAINMENT_NEWS_KEY);
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ getPreferenceScreen().setEnabled(true);
+
+ int settingCbSms = android.provider.Settings.Global.getInt(
+ mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
+ RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
+ mButtonBcSms.setChecked(settingCbSms == RILConstants.CDMA_CELL_BROADCAST_SMS_ENABLED);
+
+ if(mButtonBcSms.isChecked()) {
+ enableDisableAllCbConfigButtons(true);
+ } else {
+ enableDisableAllCbConfigButtons(false);
+ }
+
+ mPhone.getCellBroadcastSmsConfig(Message.obtain(mHandler, MESSAGE_GET_CB_SMS_CONFIG));
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ CellBroadcastSmsConfig.setCbSmsNoOfStructs(NO_OF_SERVICE_CATEGORIES);
+
+ mPhone.setCellBroadcastSmsConfig(CellBroadcastSmsConfig.getCbSmsAllValues(),
+ Message.obtain(mHandler, MESSAGE_SET_CB_SMS_CONFIG));
+ }
+
+ private void enableDisableAllCbConfigButtons(boolean enable) {
+ mButtonEmergencyBroadcast.setEnabled(enable);
+ mListLanguage.setEnabled(enable);
+ mButtonAdministrative.setEnabled(enable);
+ mButtonMaintenance.setEnabled(enable);
+ mButtonLocalWeather.setEnabled(enable);
+ mButtonAtr.setEnabled(enable);
+ mButtonLafs.setEnabled(enable);
+ mButtonRestaurants.setEnabled(enable);
+ mButtonLodgings.setEnabled(enable);
+ mButtonRetailDirectory.setEnabled(enable);
+ mButtonAdvertisements.setEnabled(enable);
+ mButtonStockQuotes.setEnabled(enable);
+ mButtonEo.setEnabled(enable);
+ mButtonMhh.setEnabled(enable);
+ mButtonTechnologyNews.setEnabled(enable);
+ mButtonMultiCategory.setEnabled(enable);
+
+ mButtonLocal1.setEnabled(enable);
+ mButtonRegional1.setEnabled(enable);
+ mButtonNational1.setEnabled(enable);
+ mButtonInternational1.setEnabled(enable);
+
+ mButtonLocal2.setEnabled(enable);
+ mButtonRegional2.setEnabled(enable);
+ mButtonNational2.setEnabled(enable);
+ mButtonInternational2.setEnabled(enable);
+
+ mButtonLocal3.setEnabled(enable);
+ mButtonRegional3.setEnabled(enable);
+ mButtonNational3.setEnabled(enable);
+ mButtonInternational3.setEnabled(enable);
+
+ mButtonLocal4.setEnabled(enable);
+ mButtonRegional4.setEnabled(enable);
+ mButtonNational4.setEnabled(enable);
+ mButtonInternational4.setEnabled(enable);
+ }
+
+ private void setAllCbConfigButtons(int[] configArray) {
+ //These buttons are in a well defined sequence. If you want to change it,
+ //be sure to map the buttons to their corresponding slot in the configArray !
+ mButtonEmergencyBroadcast.setChecked(configArray[1] != 0);
+ //subtract 1, because the values are handled in an array which starts with 0 and not with 1
+ mListLanguage.setValueIndex(CellBroadcastSmsConfig.getConfigDataLanguage() - 1);
+ mButtonAdministrative.setChecked(configArray[2] != 0);
+ mButtonMaintenance.setChecked(configArray[3] != 0);
+ mButtonLocalWeather.setChecked(configArray[20] != 0);
+ mButtonAtr.setChecked(configArray[21] != 0);
+ mButtonLafs.setChecked(configArray[22] != 0);
+ mButtonRestaurants.setChecked(configArray[23] != 0);
+ mButtonLodgings.setChecked(configArray[24] != 0);
+ mButtonRetailDirectory.setChecked(configArray[25] != 0);
+ mButtonAdvertisements.setChecked(configArray[26] != 0);
+ mButtonStockQuotes.setChecked(configArray[27] != 0);
+ mButtonEo.setChecked(configArray[28] != 0);
+ mButtonMhh.setChecked(configArray[29] != 0);
+ mButtonTechnologyNews.setChecked(configArray[30] != 0);
+ mButtonMultiCategory.setChecked(configArray[31] != 0);
+
+ mButtonLocal1.setChecked(configArray[4] != 0);
+ mButtonRegional1.setChecked(configArray[5] != 0);
+ mButtonNational1.setChecked(configArray[6] != 0);
+ mButtonInternational1.setChecked(configArray[7] != 0);
+
+ mButtonLocal2.setChecked(configArray[8] != 0);
+ mButtonRegional2.setChecked(configArray[9] != 0);
+ mButtonNational2.setChecked(configArray[10] != 0);
+ mButtonInternational2.setChecked(configArray[11] != 0);
+
+ mButtonLocal3.setChecked(configArray[12] != 0);
+ mButtonRegional3.setChecked(configArray[13] != 0);
+ mButtonNational3.setChecked(configArray[14] != 0);
+ mButtonInternational3.setChecked(configArray[15] != 0);
+
+ mButtonLocal4.setChecked(configArray[16] != 0);
+ mButtonRegional4.setChecked(configArray[17] != 0);
+ mButtonNational4.setChecked(configArray[18] != 0);
+ mButtonInternational4.setChecked(configArray[19] != 0);
+ }
+
+ private class MyHandler extends Handler {
+
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_ACTIVATE_CB_SMS:
+ //Only a log message here, because the received response is always null
+ if (DBG) Log.d(LOG_TAG, "Cell Broadcast SMS enabled/disabled.");
+ break;
+ case MESSAGE_GET_CB_SMS_CONFIG:
+ int result[] = (int[])((AsyncResult)msg.obj).result;
+
+ // check if the actual service categoties table size on the NV is '0'
+ if (result[0] == 0) {
+ result[0] = NO_OF_SERVICE_CATEGORIES;
+
+ mButtonBcSms.setChecked(false);
+ mPhone.activateCellBroadcastSms(RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED,
+ Message.obtain(mHandler, MESSAGE_ACTIVATE_CB_SMS));
+ android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
+ android.provider.Settings.Global.CDMA_CELL_BROADCAST_SMS,
+ RILConstants.CDMA_CELL_BROADCAST_SMS_DISABLED);
+ enableDisableAllCbConfigButtons(false);
+ }
+
+ CellBroadcastSmsConfig.setCbSmsConfig(result);
+ setAllCbConfigButtons(CellBroadcastSmsConfig.getCbSmsBselectedValues());
+
+ break;
+ case MESSAGE_SET_CB_SMS_CONFIG:
+ //Only a log message here, because the received response is always null
+ if (DBG) Log.d(LOG_TAG, "Set Cell Broadcast SMS values.");
+ break;
+ default:
+ Log.e(LOG_TAG, "Error! Unhandled message in CellBroadcastSms.java. Message: "
+ + msg.what);
+ break;
+ }
+ }
+ }
+
+ private static final class CellBroadcastSmsConfig {
+
+ //The values in this array are stored in a particular order. This order
+ //is calculated in the setCbSmsConfig method of this class.
+ //For more information see comments below...
+ //NO_OF_SERVICE_CATEGORIES +1 is used, because we will leave the first array entry 0
+ private static int mBSelected[] = new int[NO_OF_SERVICE_CATEGORIES + 1];
+ private static int mConfigDataComplete[] = new int[MAX_LENGTH_RESULT];
+
+ private static void setCbSmsConfig(int[] configData) {
+ if(configData == null) {
+ Log.e(LOG_TAG, "Error! No cell broadcast service categories returned.");
+ return;
+ }
+
+ if(configData[0] > MAX_LENGTH_RESULT) {
+ Log.e(LOG_TAG, "Error! Wrong number of service categories returned from RIL");
+ return;
+ }
+
+ //The required config values for broadcast SMS are stored in a C struct:
+ //
+ // typedef struct {
+ // int size;
+ // RIL_CDMA_BcServiceInfo *entries;
+ // } RIL_CDMA_BcSMSConfig;
+ //
+ // typedef struct {
+ // int uServiceCategory;
+ // int uLanguage;
+ // unsigned char bSelected;
+ // } RIL_CDMA_BcServiceInfo;
+ //
+ // This means, that we have to ignore the first value and check every
+ // 3rd value starting with the 2nd of all. This value indicates, where we
+ // will store the appropriate bSelected value, which is 2 values behind it.
+ for(int i = 1; i < configData.length; i += NO_OF_INTS_STRUCT_1) {
+ mBSelected[configData[i]] = configData[i +2];
+ }
+
+ //Store all values in an extra array
+ mConfigDataComplete = configData;
+ }
+
+ private static void setCbSmsBSelectedValue(boolean value, int pos) {
+ if(pos < mBSelected.length) {
+ mBSelected[pos] = (value == true ? 1 : 0);
+ } else {
+ Log.e(LOG_TAG,"Error! Invalid value position.");
+ }
+ }
+
+ private static int[] getCbSmsBselectedValues() {
+ return(mBSelected);
+ }
+
+ // TODO: Change the return value to a RIL_BroadcastSMSConfig
+ private static int[] getCbSmsAllValues() {
+ return(mConfigDataComplete);
+ }
+
+ private static void setCbSmsNoOfStructs(int value) {
+ //Sets the size parameter, which contains the number of structs
+ //that will be transmitted
+ mConfigDataComplete[0] = value;
+ }
+
+ private static void setConfigDataCompleteBSelected(boolean value, int serviceCategory) {
+ //Sets the bSelected value for a specific serviceCategory
+ for(int i = 1; i < mConfigDataComplete.length; i += NO_OF_INTS_STRUCT_1) {
+ if(mConfigDataComplete[i] == serviceCategory) {
+ mConfigDataComplete[i + 2] = value == true ? 1 : 0;
+ break;
+ }
+ }
+ }
+
+ private static void setConfigDataCompleteLanguage(int language) {
+ //It is only possible to set the same language for all entries
+ for(int i = 2; i < mConfigDataComplete.length; i += NO_OF_INTS_STRUCT_1) {
+ mConfigDataComplete[i] = language;
+ }
+ }
+
+ private static int getConfigDataLanguage() {
+ int language = mConfigDataComplete[2];
+ //2 is the language value of the first entry
+ //It is only possible to set the same language for all entries
+ if (language < 1 || language > 7) {
+ Log.e(LOG_TAG, "Error! Wrong language returned from RIL...defaulting to 1, english");
+ return 1;
+ }
+ else {
+ return language;
+ }
+ }
+ }
+}