summaryrefslogtreecommitdiffstats
path: root/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
diff options
context:
space:
mode:
authorJake Hamby <jhamby@google.com>2011-05-17 18:49:03 -0700
committerJake Hamby <jhamby@google.com>2011-06-06 15:52:24 -0700
commit50a624a47ce645a7992e346e40a4e7ec5e0df9b7 (patch)
tree6425bdec2c38ae4454144529ba2831acadb1b289 /src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
parentf00da53dd98c2d536126ed9a405633de584fd36d (diff)
downloadandroid_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.java95
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);
+ }
+ }
+ }
+}