summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHuaibin Yang <huaibiny@codeaurora.org>2016-03-21 14:33:42 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-08-24 08:19:20 -0600
commit160c2f7e607226e1b9856ba07c0da6d4e3ada0cd (patch)
tree1df4ce8f1b0c1f69baa9591d47f6d771527dec86
parent29b07a9d1f003d59addd245a9870c85ce8ecafa2 (diff)
downloadandroid_packages_apps_CellBroadcastReceiver-160c2f7e607226e1b9856ba07c0da6d4e3ada0cd.tar.gz
android_packages_apps_CellBroadcastReceiver-160c2f7e607226e1b9856ba07c0da6d4e3ada0cd.tar.bz2
android_packages_apps_CellBroadcastReceiver-160c2f7e607226e1b9856ba07c0da6d4e3ada0cd.zip
Support Channel 60 switch in CellBroadcast for India
Add support for cell broadcasts on channel 60 and add checkbox in UI to disable/enable the channel to meet India requirement. Change-Id: I6389efa731a303df165e1b0b0dc5904d950b68b0
-rw-r--r--res/values-zh-rCN/strings.xml1
-rw-r--r--res/values/config.xml4
-rw-r--r--res/values/strings.xml6
-rw-r--r--res/xml/preferences.xml11
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java67
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java22
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java10
-rw-r--r--src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java32
8 files changed, 139 insertions, 14 deletions
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 96e7bff0..3c44a1db 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -68,6 +68,7 @@
<string name="category_brazil_settings_title" msgid="6343130548572319922">"针对巴西的设置"</string>
<string name="enable_channel_50_alerts_title" msgid="2818924064446974167">"显示 50 频道的广播"</string>
<string name="enable_channel_50_alerts_summary" msgid="7507770011325273009">"巴西使用频道 50 来广播区域动态信息"</string>
+ <string name="category_india_settings_title">针对印度的设置</string>
<string name="category_dev_settings_title" msgid="6194393458398329994">"开发者选项"</string>
<string name="cmas_category_heading" msgid="3923503130776640717">"警报类别:"</string>
<string name="cmas_category_geo" msgid="4979494217069688527">"地球物理"</string>
diff --git a/res/values/config.xml b/res/values/config.xml
index 7e7ae9bb..9c9a91a1 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -21,4 +21,8 @@
<bool name="show_cmas_settings">true</bool>
<!-- Whether to enable channel 50 settings (Brazil) -->
<bool name="show_brazil_settings">false</bool>
+ <!-- Whether to enable channel 50 and 60 settings (India) -->
+ <bool name="show_india_settings">false</bool>
+ <!-- CellBroadcast channel 60 enabled or not,default value is true -->
+ <bool name="def_channel_60_enabled">true</bool>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 57e2d9a0..84e602ab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -137,10 +137,16 @@
<!-- Preference category title for Brazil settings. [CHAR LIMIT=50] -->
<string name="category_brazil_settings_title">Settings for Brazil</string>
+ <!-- Preference category title for India settings. [CHAR LIMIT=50] -->
+ <string name="category_india_settings_title">Settings for India</string>
<!-- Preference title for enable channel 50 alerts (Brazil only). [CHAR LIMIT=30] -->
<string name="enable_channel_50_alerts_title">Show channel 50 broadcasts</string>
<!-- Preference summary for enable channel 50 alerts (Brazil only). [CHAR LIMIT=100] -->
<string name="enable_channel_50_alerts_summary">Channel 50 is used in Brazil for area update information</string>
+ <!-- Preference title for enable channel 60 alerts. [CHAR LIMIT=30] -->
+ <string name="enable_channel_60_alerts_title">Show channel 60 broadcasts</string>
+ <!-- Preference summary for enable channel 60 alerts. [CHAR LIMIT=100] -->
+ <string name="enable_channel_60_alerts_summary">Channel 60 is used in India for Operator specific information</string>
<!-- Preference category title for developer settings. [CHAR LIMIT=50] -->
<string name="category_dev_settings_title">Developer options</string>
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 8d3b1fa2..35eb1bb4 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -94,6 +94,17 @@
</PreferenceCategory>
+ <!-- This preference is ignored and hidden
+ unless the boolean "show_india_settings" is set to true in config.xml. -->
+ <PreferenceCategory android:title="@string/category_india_settings_title"
+ android:key="category_india_settings">
+
+ <CheckBoxPreference android:key="enable_channel_60_alerts"
+ android:summary="@string/enable_channel_60_alerts_summary"
+ android:title="@string/enable_channel_60_alerts_title" />
+
+ </PreferenceCategory>
+
<!-- Only visible when Developer options toggle is enabled in Settings. -->
<PreferenceCategory android:title="@string/category_dev_settings_title"
android:key="category_dev_settings">
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index 21d8be0b..c0e0fa1e 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -32,6 +32,7 @@ import android.os.UserHandle;
import android.preference.PreferenceManager;
import android.provider.Telephony;
import android.telephony.CellBroadcastMessage;
+import android.telephony.TelephonyManager;
import android.telephony.SmsCbCmasInfo;
import android.telephony.SmsCbEtwsInfo;
import android.telephony.SmsCbLocation;
@@ -62,6 +63,15 @@ public class CellBroadcastAlertService extends Service {
static final String CB_AREA_INFO_RECEIVED_ACTION =
"android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED";
+ /** Channel 50 Cell Broadcast. */
+ static final int CB_CHANNEL_50 = 50;
+
+ /** Channel 60 Cell Broadcast. */
+ static final int CB_CHANNEL_60 = 60;
+
+ private static final String COUNTRY_BRAZIL = "br";
+ private static final String COUNTRY_INDIA = "in";
+
/**
* Container for service category, serial number, location, body hash code, and ETWS primary/
* secondary information for duplication detection.
@@ -266,6 +276,40 @@ public class CellBroadcastAlertService extends Service {
}
/**
+ * Send broadcast twice, once for apps that have PRIVILEGED permission and
+ * once for those that have the runtime one.
+ * @param message the message to broadcast
+ */
+ private void broadcastAreaInfoReceivedAction(CellBroadcastMessage message) {
+ Intent intent = new Intent(CB_AREA_INFO_RECEIVED_ACTION);
+
+ intent.putExtra("message", message);
+ sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
+ sendBroadcastAsUser(intent, UserHandle.ALL,
+ android.Manifest.permission.READ_PHONE_STATE);
+ }
+
+ /**
+ * Get preference setting for channel 60
+ * @param message the message to check
+ * @return true if channel 60 preference is set; false otherwise
+ */
+ private boolean getChannel60Preference(CellBroadcastMessage message) {
+ String country = TelephonyManager.getDefault().
+ getSimCountryIso(message.getSubId());
+
+ boolean enable60Channel = SubscriptionManager.
+ getResourcesForSubId(getApplicationContext(), message.
+ getSubId()).getBoolean(R.bool.show_india_settings) ||
+ COUNTRY_INDIA.equals(country);
+
+ return PreferenceManager.getDefaultSharedPreferences(this).
+ getBoolean(CellBroadcastSettings.
+ KEY_ENABLE_CHANNEL_60_ALERTS, enable60Channel);
+ }
+
+ /**
* Filter out broadcasts on the test channels that the user has not enabled,
* and types of notifications that the user is not interested in receiving.
* This allows us to enable an entire range of message identifiers in the
@@ -331,18 +375,19 @@ public class CellBroadcastAlertService extends Service {
}
}
- if (message.getServiceCategory() == 50) {
- // save latest area info broadcast for Settings display and send as broadcast
+ int serviceCategory = message.getServiceCategory();
+ if (serviceCategory == CB_CHANNEL_50) {
+ String country = TelephonyManager.getDefault().
+ getSimCountryIso(message.getSubId());
+ // save latest area info broadcast for Settings display and send as
+ // broadcast
CellBroadcastReceiverApp.setLatestAreaInfo(message);
- Intent intent = new Intent(CB_AREA_INFO_RECEIVED_ACTION);
- intent.putExtra("message", message);
- // Send broadcast twice, once for apps that have PRIVILEGED permission and once
- // for those that have the runtime one
- sendBroadcastAsUser(intent, UserHandle.ALL,
- android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
- sendBroadcastAsUser(intent, UserHandle.ALL,
- android.Manifest.permission.READ_PHONE_STATE);
- return false; // area info broadcasts are displayed in Settings status screen
+ broadcastAreaInfoReceivedAction(message);
+ return !(COUNTRY_BRAZIL.equals(country) ||
+ COUNTRY_INDIA.equals(country));
+ } else if (serviceCategory == CB_CHANNEL_60) {
+ broadcastAreaInfoReceivedAction(message);
+ return getChannel60Preference(message);
}
return true; // other broadcast messages are always enabled
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
index 451f9a7f..be340a38 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
@@ -57,6 +57,7 @@ public class CellBroadcastConfigService extends IntentService {
private static final String COUNTRY_TAIWAN = "tw";
private static final String COUNTRY_ISRAEL = "ir";
private static final String COUNTRY_BRAZIL = "br";
+ private static final String COUNTRY_INDIA = "in";
public CellBroadcastConfigService() {
super(TAG); // use class name for worker thread name
@@ -280,13 +281,23 @@ public class CellBroadcastConfigService extends IntentService {
TelephonyManager tm = (TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE);
+ String country = tm.getSimCountryIso(subId);
boolean enableChannel50Support = res.getBoolean(R.bool.show_brazil_settings) ||
- COUNTRY_BRAZIL.equals(tm.getSimCountryIso(subId));
+ COUNTRY_BRAZIL.equals(country) ||
+ res.getBoolean(R.bool.show_india_settings) ||
+ COUNTRY_INDIA.equals(country);
boolean enableChannel50Alerts = enableChannel50Support &&
prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_50_ALERTS, true);
+ boolean enableChannel60Support = res.getBoolean(R.bool.show_india_settings) ||
+ COUNTRY_INDIA.equals(country);
+
+ boolean enableChannel60Alerts = enableChannel60Support &&
+ prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_CHANNEL_60_ALERTS, true);
+
+
// Current Israel requires enable certain CMAS messages ids.
// Todo: Move this to CarrierConfig later.
boolean supportIsraelPwsAlerts = (COUNTRY_ISRAEL.equals(tm.getSimCountryIso(subId))
@@ -306,6 +317,7 @@ public class CellBroadcastConfigService extends IntentService {
log("enableEtwsTestAlerts = " + enableEtwsTestAlerts);
log("enableCmasTestAlerts = " + enableCmasTestAlerts);
log("enableChannel50Alerts = " + enableChannel50Alerts);
+ log("enableChannel60Alerts = " + enableChannel60Alerts);
log("supportIsraelPwsAlerts = " + supportIsraelPwsAlerts);
log("supportTaiwanPwsAlerts = " + supportTaiwanPwsAlerts);
}
@@ -421,12 +433,18 @@ public class CellBroadcastConfigService extends IntentService {
SmsCbConstants.MESSAGE_ID_CMAS_ALERT_REQUIRED_MONTHLY_TEST_LANGUAGE,
SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE_LANGUAGE);
- // Enable/Disable channel 50 messages for Brazil.
+ // Enable/Disable channel 50 messages for Brazil/India.
setCellBroadcastRange(manager, enableChannel50Alerts,
SmsManager.CELL_BROADCAST_RAN_TYPE_GSM,
SmsCbConstants.MESSAGE_ID_GSMA_ALLOCATED_CHANNEL_50,
SmsCbConstants.MESSAGE_ID_GSMA_ALLOCATED_CHANNEL_50);
+ // Enable/Disable channel 60 messages for India.
+ setCellBroadcastRange(manager, enableChannel60Alerts,
+ SmsManager.CELL_BROADCAST_RAN_TYPE_GSM,
+ SmsCbConstants.MESSAGE_ID_GSMA_ALLOCATED_CHANNEL_60,
+ SmsCbConstants.MESSAGE_ID_GSMA_ALLOCATED_CHANNEL_60);
+
if (supportIsraelPwsAlerts) {
// Enable/Disable Israel PWS channels (919~928).
setCellBroadcastRange(manager, enableEmergencyAlerts,
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
index 85365375..a10651a4 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
@@ -150,6 +150,16 @@ public class CellBroadcastSearchIndexableProvider extends SearchIndexablesProvid
cursor.addRow(ref);
}
+ boolean enableChannel60Support = res.getBoolean(R.bool.show_india_settings) ||
+ "in".equals(tm.getSimCountryIso());
+
+ if (!enableChannel60Support) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_CATEGORY_INDIA_SETTINGS;
+ cursor.addRow(ref);
+ }
+
if (!enableDevSettings) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
index b60b77e7..1e5b6458 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
@@ -85,10 +85,17 @@ public class CellBroadcastSettings extends PreferenceActivity {
// Preference category for Brazil specific settings.
public static final String KEY_CATEGORY_BRAZIL_SETTINGS = "category_brazil_settings";
+ // Preference category for India specific settings.
+ public static final String KEY_CATEGORY_INDIA_SETTINGS = "category_india_settings";
+
// Preference key for whether to enable channel 50 notifications
// Enabled by default for phones sold in Brazil, otherwise this setting may be hidden.
public static final String KEY_ENABLE_CHANNEL_50_ALERTS = "enable_channel_50_alerts";
+ // Preference key for whether to enable channel 60 notifications
+ // Enabled by default for phones sold in India, otherwise this setting may be hidden.
+ public static final String KEY_ENABLE_CHANNEL_60_ALERTS = "enable_channel_60_alerts";
+
// Preference key for initial opt-in/opt-out dialog.
public static final String KEY_SHOW_CMAS_OPT_OUT_DIALOG = "show_cmas_opt_out_dialog";
@@ -104,6 +111,9 @@ public class CellBroadcastSettings extends PreferenceActivity {
// Brazil country code
private static final String COUNTRY_BRAZIL = "br";
+ // India country code
+ private static final String COUNTRY_INDIA = "in";
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -133,6 +143,7 @@ public class CellBroadcastSettings extends PreferenceActivity {
private CheckBoxPreference mSpeechCheckBox;
private CheckBoxPreference mEtwsTestCheckBox;
private CheckBoxPreference mChannel50CheckBox;
+ private CheckBoxPreference mChannel60CheckBox;
private CheckBoxPreference mCmasTestCheckBox;
private PreferenceCategory mAlertCategory;
private PreferenceCategory mETWSSettingCategory;
@@ -164,6 +175,8 @@ public class CellBroadcastSettings extends PreferenceActivity {
findPreference(KEY_ENABLE_ETWS_TEST_ALERTS);
mChannel50CheckBox = (CheckBoxPreference)
findPreference(KEY_ENABLE_CHANNEL_50_ALERTS);
+ mChannel60CheckBox = (CheckBoxPreference)
+ findPreference(KEY_ENABLE_CHANNEL_60_ALERTS);
mCmasTestCheckBox = (CheckBoxPreference)
findPreference(KEY_ENABLE_CMAS_TEST_ALERTS);
mAlertCategory = (PreferenceCategory)
@@ -274,12 +287,24 @@ public class CellBroadcastSettings extends PreferenceActivity {
subId = SubscriptionManager.getDefaultSubscriptionId();
}
+ String country = tm.getSimCountryIso(subId);
+
boolean enableChannel50Support = res.getBoolean(R.bool.show_brazil_settings) ||
- COUNTRY_BRAZIL.equals(tm.getSimCountryIso(subId));
+ COUNTRY_BRAZIL.equals(country) ||
+ res.getBoolean(R.bool.show_india_settings) ||
+ COUNTRY_INDIA.equals(country);
if (!enableChannel50Support) {
preferenceScreen.removePreference(findPreference(KEY_CATEGORY_BRAZIL_SETTINGS));
}
+
+ boolean enableChannel60Support = res.getBoolean(R.bool.show_india_settings) ||
+ COUNTRY_INDIA.equals(country);
+
+ if (!enableChannel60Support) {
+ preferenceScreen.removePreference(findPreference(KEY_CATEGORY_INDIA_SETTINGS));
+ }
+
if (!enableDevSettings) {
preferenceScreen.removePreference(findPreference(KEY_CATEGORY_DEV_SETTINGS));
}
@@ -287,6 +312,11 @@ public class CellBroadcastSettings extends PreferenceActivity {
if (mChannel50CheckBox != null) {
mChannel50CheckBox.setOnPreferenceChangeListener(startConfigServiceListener);
}
+
+ if (mChannel60CheckBox != null) {
+ mChannel60CheckBox.setOnPreferenceChangeListener(startConfigServiceListener);
+ }
+
if (mEtwsTestCheckBox != null) {
mEtwsTestCheckBox.setOnPreferenceChangeListener(startConfigServiceListener);
}