diff options
author | Jake Hamby <jhamby@google.com> | 2011-05-17 18:49:03 -0700 |
---|---|---|
committer | Jake Hamby <jhamby@google.com> | 2011-06-06 15:52:24 -0700 |
commit | 50a624a47ce645a7992e346e40a4e7ec5e0df9b7 (patch) | |
tree | 6425bdec2c38ae4454144529ba2831acadb1b289 /src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java | |
parent | f00da53dd98c2d536126ed9a405633de584fd36d (diff) | |
download | android_packages_apps_CellBroadcastReceiver-50a624a47ce645a7992e346e40a4e7ec5e0df9b7.tar.gz android_packages_apps_CellBroadcastReceiver-50a624a47ce645a7992e346e40a4e7ec5e0df9b7.tar.bz2 android_packages_apps_CellBroadcastReceiver-50a624a47ce645a7992e346e40a4e7ec5e0df9b7.zip |
Initial checkin of Cell Broadcast display application.
Simple Cell Broadcast application. Supports ETWS and CMAS emergency
messages, and can be extended to support other types of PWS
(Public Warning System) emergency warnings. User preferences for
configuration of each supported national system (ETWS, CMAS, and
channel 50 broadcasts for Brazil) are displayed/hidden based on the
values in res/values/config.xml.
For emergency alerts, a flashing warning icon and special alert sound
is played. If there is a text-to-speech engine installed for the
language of the broadcast, then the contents of the broadcast message
will be spoken after the alert sound is played. The user can disable
the text-to-speech feature in settings, as well as adjusting the
length of the alert sound and enabling/disabling delivery of several
emergency broadcast channels.
The CellBroadcastReceiverTests apk includes a launcher activity with
buttons for sending each type of test message. This APK must be signed
with the system certificate in order to acquire the BROADCAST_SMS
permission required to send test broadcasts to the app.
Change-Id: If9b61e02c246de5783b3e39cd100ea707ea80084
Diffstat (limited to 'src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java')
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java new file mode 100644 index 00000000..d4c7c53b --- /dev/null +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2011 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.cellbroadcastreceiver; + +import android.app.IntentService; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.preference.PreferenceManager; +import android.telephony.SmsCbConstants; +import android.telephony.SmsManager; +import android.util.Log; + +import com.android.internal.telephony.gsm.SmsCbHeader; + +import static com.android.cellbroadcastreceiver.CellBroadcastReceiver.DBG; + +/** + * This service manages enabling and disabling ranges of message identifiers + * that the radio should listen for. It operates independently of the other + * services and runs at boot time and after exiting airplane mode. + * + * Note that the entire range of emergency channels is enabled. Test messages + * and lower priority broadcasts are filtered out in CellBroadcastAlertService + * if the user has not enabled them in settings. + * + * TODO: add notification to re-enable channels after a radio reset. + */ +public class CellBroadcastConfigService extends IntentService { + private static final String TAG = "CellBroadcastConfigService"; + + static final String ACTION_ENABLE_CHANNELS = "ACTION_ENABLE_CHANNELS"; + + public CellBroadcastConfigService() { + super(TAG); // use class name for worker thread name + } + + @Override + protected void onHandleIntent(Intent intent) { + if (ACTION_ENABLE_CHANNELS.equals(intent.getAction())) { + try { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + Resources res = getResources(); + + boolean enableEmergencyAlerts = prefs.getBoolean( + CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS, true); + + boolean enableChannel50Alerts = res.getBoolean(R.bool.show_brazil_settings) && + prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_50_ALERTS, true); + + SmsManager manager = SmsManager.getDefault(); + if (enableEmergencyAlerts) { + if (DBG) Log.d(TAG, "enabling emergency cell broadcast channels"); + manager.enableCellBroadcastRange( + SmsCbConstants.MESSAGE_ID_PWS_FIRST_IDENTIFIER, + SmsCbConstants.MESSAGE_ID_PWS_LAST_IDENTIFIER); + if (DBG) Log.d(TAG, "enabled emergency cell broadcast channels"); + } else { + // we may have enabled these channels previously, so try to disable them + if (DBG) Log.d(TAG, "disabling emergency cell broadcast channels"); + manager.disableCellBroadcastRange( + SmsCbConstants.MESSAGE_ID_PWS_FIRST_IDENTIFIER, + SmsCbConstants.MESSAGE_ID_PWS_LAST_IDENTIFIER); + if (DBG) Log.d(TAG, "disabled emergency cell broadcast channels"); + } + + if (enableChannel50Alerts) { + if (DBG) Log.d(TAG, "enabling cell broadcast channel 50"); + manager.enableCellBroadcast(50); + if (DBG) Log.d(TAG, "enabled cell broadcast channel 50"); + } else { + if (DBG) Log.d(TAG, "disabling cell broadcast channel 50"); + manager.disableCellBroadcast(50); + if (DBG) Log.d(TAG, "disabled cell broadcast channel 50"); + } + } catch (Exception ex) { + Log.e(TAG, "exception enabling cell broadcast channels", ex); + } + } + } +} |