summaryrefslogtreecommitdiffstats
path: root/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java')
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java151
1 files changed, 100 insertions, 51 deletions
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
index 17b9bee1..fc3b975b 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
@@ -1,4 +1,6 @@
/*
+ * Copyright (c) 2013, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,6 +26,8 @@ import android.content.res.Resources;
import android.os.SystemProperties;
import android.preference.PreferenceManager;
import android.telephony.CellBroadcastMessage;
+import android.telephony.MSimSmsManager;
+import android.telephony.MSimTelephonyManager;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -31,6 +35,7 @@ import android.util.Log;
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
import com.android.internal.telephony.gsm.SmsCbConstants;
+import com.android.internal.telephony.MSimConstants;
import static com.android.cellbroadcastreceiver.CellBroadcastReceiver.DBG;
@@ -53,13 +58,49 @@ public class CellBroadcastConfigService extends IntentService {
static final String EMERGENCY_BROADCAST_RANGE_GSM =
"ro.cb.gsm.emergencyids";
+ private int mSubscription = MSimConstants.DEFAULT_SUBSCRIPTION;
+
public CellBroadcastConfigService() {
super(TAG); // use class name for worker thread name
}
- private static void setChannelRange(SmsManager manager, String ranges, boolean enable) {
- if (DBG)log("setChannelRange: " + ranges);
+ private void enableCellBroadcast(int messageIdentifier, boolean isMSim) {
+ if (isMSim) {
+ MSimSmsManager.getDefault().enableCellBroadcast(messageIdentifier, mSubscription);
+ } else {
+ SmsManager.getDefault().enableCellBroadcast(messageIdentifier);
+ }
+ }
+ private void disableCellBroadcast(int messageIdentifier, boolean isMSim) {
+ if (isMSim) {
+ MSimSmsManager.getDefault().disableCellBroadcast(messageIdentifier, mSubscription);
+ } else {
+ SmsManager.getDefault().disableCellBroadcast(messageIdentifier);
+ }
+ }
+
+ private void enableCellBroadcastRange(int startMessageId, int endMessageId, boolean isMSim) {
+ if (isMSim) {
+ MSimSmsManager.getDefault().enableCellBroadcastRange(startMessageId, endMessageId,
+ mSubscription);
+ } else {
+ SmsManager.getDefault().enableCellBroadcastRange(startMessageId, endMessageId);
+ }
+ }
+
+ private void disableCellBroadcastRange(int startMessageId, int endMessageId, boolean isMSim) {
+ if (isMSim) {
+ MSimSmsManager.getDefault().enableCellBroadcastRange(startMessageId, endMessageId,
+ mSubscription);
+ } else {
+ SmsManager.getDefault().enableCellBroadcastRange(startMessageId, endMessageId);
+ }
+ }
+
+ private void setChannelRange(String ranges, boolean enable) {
+ if (DBG)log("setChannelRange: " + ranges);
+ boolean isMSim = MSimTelephonyManager.getDefault().isMultiSimEnabled();
try {
for (String channelRange : ranges.split(",")) {
int dashIndex = channelRange.indexOf('-');
@@ -68,19 +109,19 @@ public class CellBroadcastConfigService extends IntentService {
int endId = Integer.decode(channelRange.substring(dashIndex + 1).trim());
if (enable) {
if (DBG) log("enabling emergency IDs " + startId + '-' + endId);
- manager.enableCellBroadcastRange(startId, endId);
+ enableCellBroadcastRange(startId, endId, isMSim);
} else {
if (DBG) log("disabling emergency IDs " + startId + '-' + endId);
- manager.disableCellBroadcastRange(startId, endId);
+ disableCellBroadcastRange(startId, endId, isMSim);
}
} else {
int messageId = Integer.decode(channelRange.trim());
if (enable) {
if (DBG) log("enabling emergency message ID " + messageId);
- manager.enableCellBroadcast(messageId);
+ enableCellBroadcast(messageId, isMSim);
} else {
if (DBG) log("disabling emergency message ID " + messageId);
- manager.disableCellBroadcast(messageId);
+ disableCellBroadcast(messageId, isMSim);
}
}
}
@@ -90,10 +131,10 @@ public class CellBroadcastConfigService extends IntentService {
// Make sure CMAS Presidential is enabled (See 3GPP TS 22.268 Section 6.2).
if (DBG) log("setChannelRange: enabling CMAS Presidential");
- if (CellBroadcastReceiver.phoneIsCdma()) {
- manager.enableCellBroadcast(SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT);
+ if (CellBroadcastReceiver.phoneIsCdma(mSubscription)) {
+ enableCellBroadcast(SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT, isMSim);
} else {
- manager.enableCellBroadcast(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL);
+ enableCellBroadcast(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL, isMSim);
}
}
@@ -109,7 +150,7 @@ public class CellBroadcastConfigService extends IntentService {
}
// Check for system property defining the emergency channel ranges to enable
- String emergencyIdRange = (CellBroadcastReceiver.phoneIsCdma()) ?
+ String emergencyIdRange = (CellBroadcastReceiver.phoneIsCdma(message.getSubId())) ?
"" : SystemProperties.get(EMERGENCY_BROADCAST_RANGE_GSM);
if (TextUtils.isEmpty(emergencyIdRange)) {
@@ -141,6 +182,8 @@ public class CellBroadcastConfigService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
if (ACTION_ENABLE_CHANNELS.equals(intent.getAction())) {
+ mSubscription = intent.getIntExtra(MSimConstants.SUBSCRIPTION_KEY,
+ MSimConstants.DEFAULT_SUBSCRIPTION);
try {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Resources res = getResources();
@@ -150,7 +193,7 @@ public class CellBroadcastConfigService extends IntentService {
// except for cmas presidential. i.e. to receive cmas severe alerts, both
// enableEmergencyAlerts AND enableCmasSevereAlerts must be true.
boolean enableEmergencyAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS, true);
+ CellBroadcastSettings.KEY_ENABLE_EMERGENCY_ALERTS + mSubscription, true);
TelephonyManager tm = (TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE);
@@ -159,23 +202,26 @@ public class CellBroadcastConfigService extends IntentService {
"br".equals(tm.getSimCountryIso());
boolean enableChannel50Alerts = enableChannel50Support &&
- prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_50_ALERTS, true);
+ prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_50_ALERTS
+ + mSubscription, true);
// Note: ETWS is for 3GPP only
boolean enableEtwsTestAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_ETWS_TEST_ALERTS, false);
+ CellBroadcastSettings.KEY_ENABLE_ETWS_TEST_ALERTS + mSubscription, false);
boolean enableCmasExtremeAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS, true);
+ CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS + mSubscription,
+ true);
boolean enableCmasSevereAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS, true);
+ CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS + mSubscription,
+ true);
boolean enableCmasAmberAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS, true);
+ CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS + mSubscription, true);
boolean enableCmasTestAlerts = prefs.getBoolean(
- CellBroadcastSettings.KEY_ENABLE_CMAS_TEST_ALERTS, false);
+ CellBroadcastSettings.KEY_ENABLE_CMAS_TEST_ALERTS + mSubscription, false);
// set up broadcast ID ranges to be used for each category
int cmasExtremeStart =
@@ -189,8 +235,10 @@ public class CellBroadcastConfigService extends IntentService {
int cmasTestEnd = SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE;
int cmasPresident = SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL;
+ boolean isMSim = MSimTelephonyManager.getDefault().isMultiSimEnabled();
+
// set to CDMA broadcast ID rage if phone is in CDMA mode.
- boolean isCdma = CellBroadcastReceiver.phoneIsCdma();
+ boolean isCdma = CellBroadcastReceiver.phoneIsCdma(mSubscription);
if (isCdma) {
cmasExtremeStart = SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT;
cmasExtremeEnd = cmasExtremeStart;
@@ -202,68 +250,69 @@ public class CellBroadcastConfigService extends IntentService {
cmasPresident = SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT;
}
- SmsManager manager = SmsManager.getDefault();
// Check for system property defining the emergency channel ranges to enable
String emergencyIdRange = isCdma ?
"" : SystemProperties.get(EMERGENCY_BROADCAST_RANGE_GSM);
if (enableEmergencyAlerts) {
if (DBG) log("enabling emergency cell broadcast channels");
if (!TextUtils.isEmpty(emergencyIdRange)) {
- setChannelRange(manager, emergencyIdRange, true);
+ setChannelRange(emergencyIdRange, true);
} else {
// No emergency channel system property, enable all emergency channels
// that have checkbox checked
if (!isCdma) {
- manager.enableCellBroadcastRange(
+ enableCellBroadcastRange(
SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING,
- SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING);
+ SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING,
+ isMSim);
if (enableEtwsTestAlerts) {
- manager.enableCellBroadcast(
- SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE);
+ enableCellBroadcast(SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE,
+ isMSim);
}
- manager.enableCellBroadcast(
- SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE);
+ enableCellBroadcast(
+ SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE, isMSim);
}
if (enableCmasExtremeAlerts) {
- manager.enableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd);
+ enableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd, isMSim);
}
if (enableCmasSevereAlerts) {
- manager.enableCellBroadcastRange(cmasSevereStart, cmasSevereEnd);
+ enableCellBroadcastRange(cmasSevereStart, cmasSevereEnd, isMSim);
}
if (enableCmasAmberAlerts) {
- manager.enableCellBroadcast(cmasAmber);
+ enableCellBroadcast(cmasAmber, isMSim);
}
if (enableCmasTestAlerts) {
- manager.enableCellBroadcastRange(cmasTestStart, cmasTestEnd);
+ enableCellBroadcastRange(cmasTestStart, cmasTestEnd, isMSim);
}
// CMAS Presidential must be on (See 3GPP TS 22.268 Section 6.2).
- manager.enableCellBroadcast(cmasPresident);
+ enableCellBroadcast(cmasPresident, isMSim);
}
if (DBG) log("enabled emergency cell broadcast channels");
} else {
// we may have enabled these channels previously, so try to disable them
if (DBG) log("disabling emergency cell broadcast channels");
if (!TextUtils.isEmpty(emergencyIdRange)) {
- setChannelRange(manager, emergencyIdRange, false);
+ setChannelRange(emergencyIdRange, false);
} else {
// No emergency channel system property, disable all emergency channels
// except for CMAS Presidential (See 3GPP TS 22.268 Section 6.2)
if (!isCdma) {
- manager.disableCellBroadcastRange(
+ disableCellBroadcastRange(
SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING,
- SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING);
- manager.disableCellBroadcast(
- SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE);
- manager.disableCellBroadcast(
- SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE);
+ SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING,
+ isMSim);
+ disableCellBroadcast(SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE,
+ isMSim);
+ disableCellBroadcast(
+ SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE, isMSim);
}
- manager.disableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd);
- manager.disableCellBroadcastRange(cmasSevereStart, cmasSevereEnd);
- manager.disableCellBroadcast(cmasAmber);
- manager.disableCellBroadcastRange(cmasTestStart, cmasTestEnd);
+ disableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd, isMSim);
+ disableCellBroadcastRange(cmasSevereStart, cmasSevereEnd, isMSim);
+ disableCellBroadcast(cmasAmber, isMSim);
+ disableCellBroadcastRange(cmasTestStart, cmasTestEnd, isMSim);
// CMAS Presidential must be on (See 3GPP TS 22.268 Section 6.2).
- manager.enableCellBroadcast(cmasPresident);
+ enableCellBroadcast(cmasPresident, isMSim);
}
if (DBG) log("disabled emergency cell broadcast channels");
}
@@ -272,11 +321,11 @@ public class CellBroadcastConfigService extends IntentService {
if (DBG) log("channel 50 is not aplicable for cdma");
} else if (enableChannel50Alerts) {
if (DBG) log("enabling cell broadcast channel 50");
- manager.enableCellBroadcast(50);
+ enableCellBroadcast(50, isMSim);
if (DBG) log("enabled cell broadcast channel 50");
} else {
if (DBG) log("disabling cell broadcast channel 50");
- manager.disableCellBroadcast(50);
+ disableCellBroadcast(50, isMSim);
if (DBG) log("disabled cell broadcast channel 50");
}
@@ -285,24 +334,24 @@ public class CellBroadcastConfigService extends IntentService {
// but check box is unchecked to receive such as cmas severe alerts.
if (!enableEtwsTestAlerts && !isCdma) {
if (DBG) Log.d(TAG, "disabling cell broadcast ETWS test messages");
- manager.disableCellBroadcast(
- SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE);
+ disableCellBroadcast(
+ SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE, isMSim);
}
if (!enableCmasExtremeAlerts) {
if (DBG) Log.d(TAG, "disabling cell broadcast CMAS extreme");
- manager.disableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd);
+ disableCellBroadcastRange(cmasExtremeStart, cmasExtremeEnd, isMSim);
}
if (!enableCmasSevereAlerts) {
if (DBG) Log.d(TAG, "disabling cell broadcast CMAS severe");
- manager.disableCellBroadcastRange(cmasSevereStart, cmasSevereEnd);
+ disableCellBroadcastRange(cmasSevereStart, cmasSevereEnd, isMSim);
}
if (!enableCmasAmberAlerts) {
if (DBG) Log.d(TAG, "disabling cell broadcast CMAS amber");
- manager.disableCellBroadcast(cmasAmber);
+ disableCellBroadcast(cmasAmber, isMSim);
}
if (!enableCmasTestAlerts) {
if (DBG) Log.d(TAG, "disabling cell broadcast CMAS test messages");
- manager.disableCellBroadcastRange(cmasTestStart, cmasTestEnd);
+ disableCellBroadcastRange(cmasTestStart, cmasTestEnd, isMSim);
}
} catch (Exception ex) {
Log.e(TAG, "exception enabling cell broadcast channels", ex);