diff options
author | Jake Hamby <jhamby@google.com> | 2011-10-26 20:22:52 -0700 |
---|---|---|
committer | Jake Hamby <jhamby@google.com> | 2011-10-26 20:56:39 -0700 |
commit | f88de2b37383f138b3c7d876bdc3b6b6fae7b728 (patch) | |
tree | ba9ec11b3aa3eb20a7276d49742f4913ba9822c9 | |
parent | 59610ad5074acb5305c353a53c01676eb8258887 (diff) | |
download | CellBroadcastReceiver-ics-mr0.tar.gz |
Show alert dialog for operator-defined Cell Broadcast messages.android-sdk-adt_r16.0.1android-cts-4.0_r1android-4.0.2_r1android-4.0.1_r1.2android-4.0.1_r1.1android-4.0.1_r1ics-mr0-releaseics-mr0ics-factoryrom-2-release
Enable display of received SMS broadcast messages as emergency alerts
(warning sound and alert dialog notification) if they are listed in the
range defined in "ro.cellbroadcast.emergencyids".
Bug: 5516275
Change-Id: Ic26aa28fa2b2201f32bff780db40d76883cd0860
4 files changed, 40 insertions, 5 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java index bb4745e09..dafb3917a 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java @@ -98,7 +98,8 @@ public class CellBroadcastAlertService extends Service { // add notification to the bar addToNotificationBar(cbm); - if (cbm.isEmergencyAlertMessage()) { + if (cbm.isEmergencyAlertMessage() || CellBroadcastConfigService + .isOperatorDefinedEmergencyId(cbm.getMessageIdentifier())) { // start audio/vibration/speech service for emergency alerts Intent audioIntent = new Intent(this, CellBroadcastAlertAudio.class); audioIntent.setAction(CellBroadcastAlertAudio.ACTION_START_ALERT_AUDIO); @@ -191,7 +192,8 @@ public class CellBroadcastAlertService extends Service { notification.setLatestEventInfo(this, channelName, messageBody, pi); - if (message.isEmergencyAlertMessage()) { + if (message.isEmergencyAlertMessage() || CellBroadcastConfigService + .isOperatorDefinedEmergencyId(message.getMessageIdentifier())) { // Emergency: open notification immediately notification.fullScreenIntent = pi; // use default notification lights (CellBroadcastAlertAudio plays sound/vibration) diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java index e24d431ef..112dfc7f9 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java @@ -81,6 +81,34 @@ public class CellBroadcastConfigService extends IntentService { } } + static boolean isOperatorDefinedEmergencyId(int messageId) { + // Check for system property defining the emergency channel ranges to enable + String emergencyIdRange = SystemProperties.get("ro.cellbroadcast.emergencyids"); + if (TextUtils.isEmpty(emergencyIdRange)) { + return false; + } + try { + for (String channelRange : emergencyIdRange.split(",")) { + int dashIndex = channelRange.indexOf('-'); + if (dashIndex != -1) { + int startId = Integer.decode(channelRange.substring(0, dashIndex)); + int endId = Integer.decode(channelRange.substring(dashIndex + 1)); + if (messageId >= startId && messageId <= endId) { + return true; + } + } else { + int emergencyMessageId = Integer.decode(channelRange); + if (emergencyMessageId == messageId) { + return true; + } + } + } + } catch (NumberFormatException e) { + Log.e(TAG, "Number Format Exception parsing emergency channel range", e); + } + return false; + } + @Override protected void onHandleIntent(Intent intent) { if (ACTION_ENABLE_CHANNELS.equals(intent.getAction())) { diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java index 2d25b992c..eafeec298 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastListActivity.java @@ -183,10 +183,12 @@ public class CellBroadcastListActivity extends ListActivity { private void showDialogAndMarkRead(Cursor cursor) { CellBroadcastMessage cbm = CellBroadcastMessage.createFromCursor(cursor); + boolean isAlertMessage = cbm.isPublicAlertMessage() || CellBroadcastConfigService + .isOperatorDefinedEmergencyId(cbm.getMessageIdentifier()); // show emergency alerts with the warning icon, but don't play alert tone CellBroadcastAlertDialog dialog = new CellBroadcastAlertDialog(this, cbm.getDialogTitleResource(), cbm.getMessageBody(), - cbm.isPublicAlertMessage(), cbm.getDeliveryTime()); + isAlertMessage, cbm.getDeliveryTime()); dialog.show(); } @@ -268,7 +270,8 @@ public class CellBroadcastListActivity extends ListActivity { (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(notificationId); - boolean isEmergencyAlert = cbm.isPublicAlertMessage(); + boolean isEmergencyAlert = cbm.isPublicAlertMessage() || CellBroadcastConfigService + .isOperatorDefinedEmergencyId(cbm.getMessageIdentifier()); CellBroadcastAlertDialog dialog = new CellBroadcastAlertDialog(this, cbm.getDialogTitleResource(), cbm.getMessageBody(), diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastMessage.java b/src/com/android/cellbroadcastreceiver/CellBroadcastMessage.java index a4d3bc2aa..e38aa022a 100644 --- a/src/com/android/cellbroadcastreceiver/CellBroadcastMessage.java +++ b/src/com/android/cellbroadcastreceiver/CellBroadcastMessage.java @@ -284,7 +284,9 @@ public class CellBroadcastMessage implements Parcelable { return R.string.cmas_operator_defined_alert; default: - if (SmsCbHeader.isEmergencyMessage(mMessageIdentifier)) { + if (SmsCbHeader.isEmergencyMessage(mMessageIdentifier) || + CellBroadcastConfigService.isOperatorDefinedEmergencyId( + mMessageIdentifier)) { return R.string.pws_other_message_identifiers; } else { return R.string.cb_other_message_identifiers; |