blob: 7428321207b3f27b31779337477b719726acc1bf [file] [log] [blame]
/*
* 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;
}
}
}
}