150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/* 250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Copyright (C) 2011 The Android Open Source Project 350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * 450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * you may not use this file except in compliance with the License. 650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * You may obtain a copy of the License at 750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * 850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * 1050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Unless required by applicable law or agreed to in writing, software 1150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 1250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * See the License for the specific language governing permissions and 1450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * limitations under the License. 1550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */ 1650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 1750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypackage com.android.cellbroadcastreceiver; 1850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 1950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.app.IntentService; 2050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.Intent; 2150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.SharedPreferences; 2250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.content.res.Resources; 2350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.preference.PreferenceManager; 2450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.telephony.SmsCbConstants; 2550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.telephony.SmsManager; 2650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport android.util.Log; 2750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 2850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport com.android.internal.telephony.gsm.SmsCbHeader; 2950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 3050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambyimport static com.android.cellbroadcastreceiver.CellBroadcastReceiver.DBG; 3150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 3250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby/** 3350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * This service manages enabling and disabling ranges of message identifiers 3450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * that the radio should listen for. It operates independently of the other 3550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * services and runs at boot time and after exiting airplane mode. 3650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * 3750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * Note that the entire range of emergency channels is enabled. Test messages 3850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * and lower priority broadcasts are filtered out in CellBroadcastAlertService 3950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * if the user has not enabled them in settings. 4050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * 4150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby * TODO: add notification to re-enable channels after a radio reset. 4250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby */ 4350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hambypublic class CellBroadcastConfigService extends IntentService { 4450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby private static final String TAG = "CellBroadcastConfigService"; 4550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 4650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby static final String ACTION_ENABLE_CHANNELS = "ACTION_ENABLE_CHANNELS"; 4750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 4850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby public CellBroadcastConfigService() { 4950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby super(TAG); // use class name for worker thread name 5050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 5150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 5250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby @Override 5350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby protected void onHandleIntent(Intent intent) { 5450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (ACTION_ENABLE_CHANNELS.equals(intent.getAction())) { 5550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby try { 5650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 5750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby Resources res = getResources(); 5850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 5950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby boolean enableEmergencyAlerts = prefs.getBoolean( 6050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS, true); 6150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 6250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby boolean enableChannel50Alerts = res.getBoolean(R.bool.show_brazil_settings) && 6350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_50_ALERTS, true); 6450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 6550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SmsManager manager = SmsManager.getDefault(); 6650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (enableEmergencyAlerts) { 6750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "enabling emergency cell broadcast channels"); 6850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby manager.enableCellBroadcastRange( 6950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SmsCbConstants.MESSAGE_ID_PWS_FIRST_IDENTIFIER, 7050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SmsCbConstants.MESSAGE_ID_PWS_LAST_IDENTIFIER); 7150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "enabled emergency cell broadcast channels"); 7250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } else { 7350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby // we may have enabled these channels previously, so try to disable them 7450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "disabling emergency cell broadcast channels"); 7550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby manager.disableCellBroadcastRange( 7650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SmsCbConstants.MESSAGE_ID_PWS_FIRST_IDENTIFIER, 7750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby SmsCbConstants.MESSAGE_ID_PWS_LAST_IDENTIFIER); 7850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "disabled emergency cell broadcast channels"); 7950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 8050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby 8150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (enableChannel50Alerts) { 8250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "enabling cell broadcast channel 50"); 8350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby manager.enableCellBroadcast(50); 8450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "enabled cell broadcast channel 50"); 8550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } else { 8650a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "disabling cell broadcast channel 50"); 8750a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby manager.disableCellBroadcast(50); 8850a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby if (DBG) Log.d(TAG, "disabled cell broadcast channel 50"); 8950a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 9050a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } catch (Exception ex) { 9150a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby Log.e(TAG, "exception enabling cell broadcast channels", ex); 9250a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 9350a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 9450a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby } 9550a624a47ce645a7992e346e40a4e7ec5e0df9b7Jake Hamby} 96