diff options
author | Huaibin Yang <huaibiny@codeaurora.org> | 2016-03-21 14:33:42 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2016-08-24 08:19:20 -0600 |
commit | 160c2f7e607226e1b9856ba07c0da6d4e3ada0cd (patch) | |
tree | 1df4ce8f1b0c1f69baa9591d47f6d771527dec86 | |
parent | 29b07a9d1f003d59addd245a9870c85ce8ecafa2 (diff) | |
download | android_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.xml | 1 | ||||
-rw-r--r-- | res/values/config.xml | 4 | ||||
-rw-r--r-- | res/values/strings.xml | 6 | ||||
-rw-r--r-- | res/xml/preferences.xml | 11 | ||||
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java | 67 | ||||
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java | 22 | ||||
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java | 10 | ||||
-rw-r--r-- | src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java | 32 |
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); } |