Merge 25Q1 (ab/BP1A.250305.020) to AOSP main
Bug: 385190204
Merged-In: Icaf5f09913292d86db2a3e0fc8457aad4cff740a
Change-Id: Ib3488fcca8d6594987f1e573e02fe63f650e9f9a
diff --git a/TEST_MAPPING b/TEST_MAPPING
index ad814c8..d1cf886 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,7 +1,7 @@
{
"cellbroadcast-mainline-presubmit": [
{
- "name": "GoogleCellBroadcastReceiverUnitTests",
+ "name": "CellBroadcastReceiverMTS",
"options": [
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
@@ -11,7 +11,7 @@
],
"mainline-presubmit": [
{
- "name": "GoogleCellBroadcastReceiverUnitTests[com.google.android.cellbroadcast.apex]",
+ "name": "CellBroadcastReceiverMTS[com.google.android.cellbroadcast.apex]",
"options": [
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
@@ -30,7 +30,7 @@
"keywords": ["internal"]
},
{
- "name": "GoogleCellBroadcastReceiverUnitTests",
+ "name": "CellBroadcastReceiverMTS",
"options": [
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index fe1d1f5..569bed0 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -105,7 +105,7 @@
<string name="cmas_category_heading" msgid="3923503130776640717">"Categoría de la alerta:"</string>
<string name="cmas_category_geo" msgid="4979494217069688527">"Geofísicas"</string>
<string name="cmas_category_met" msgid="7563732573851773537">"Meteorológicas"</string>
- <string name="cmas_category_safety" msgid="2986472639641883453">"Seguridad"</string>
+ <string name="cmas_category_safety" msgid="2986472639641883453">"Emergencias"</string>
<string name="cmas_category_security" msgid="2549520159044403704">"Seguridad"</string>
<string name="cmas_category_rescue" msgid="4907571719983321086">"Rescates"</string>
<string name="cmas_category_fire" msgid="3331981591918341119">"Incendios"</string>
diff --git a/res/values-mcc234-iw/strings.xml b/res/values-mcc234-iw/strings.xml
index 9406d8e..ef183d5 100644
--- a/res/values-mcc234-iw/strings.xml
+++ b/res/values-mcc234-iw/strings.xml
@@ -36,5 +36,5 @@
<string name="enable_cmas_test_alerts_summary" msgid="2931455154355509465">"קבלת התראות בדיקה ממערכת ההתראה על מקרה חירום"</string>
<string name="cmas_opt_out_dialog_text" msgid="1972978578760513449">"ההגדרה שלך עכשיו היא לקבל התרעות על מקרי חירום. האם ברצונך להמשיך לקבל התרעות על מקרי חירום?"</string>
<string name="emergency_alert_settings_title_watches" msgid="5299419351642118203">"התרעות על מצב חירום"</string>
- <string name="notification_cb_settings_changed_text" msgid="6861845802821634203">"יש להקיש כדי לראות את ההגדרות של ההתרעות על מקרי חירום"</string>
+ <string name="notification_cb_settings_changed_text" msgid="6861845802821634203">"יש ללחוץ כדי לראות את ההגדרות של ההתרעות על מקרי חירום"</string>
</resources>
diff --git a/res/values-mcc270-en-rAU/strings.xml b/res/values-mcc270-en-rAU/strings.xml
index bc799db..cc8e5ab 100644
--- a/res/values-mcc270-en-rAU/strings.xml
+++ b/res/values-mcc270-en-rAU/strings.xml
@@ -16,17 +16,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-alert"</string>
- <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-alert"</string>
- <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-alert"</string>
- <string name="public_safety_message" msgid="7178887441252495779">"LU-alert"</string>
- <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-alert: Kidnapping alert"</string>
- <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-alert test"</string>
- <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-alert exercise"</string>
+ <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-Alert"</string>
+ <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-Alert"</string>
+ <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-Alert"</string>
+ <string name="public_safety_message" msgid="7178887441252495779">"LU-Alert"</string>
+ <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-Alert: Kidnapping alert"</string>
+ <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-Alert Test"</string>
+ <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-Alert Exercise"</string>
<string name="enable_cmas_amber_alerts_title" msgid="3426998226619316792">"Kidnapping alert"</string>
<string name="enable_cmas_amber_alerts_summary" msgid="5532453981233187282">"Show alert messages for child abductions"</string>
- <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-alert test"</string>
+ <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-Alert Test"</string>
<string name="enable_cmas_test_alerts_summary" msgid="4393658967042119261">"Show test messages"</string>
- <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-alert exercise"</string>
+ <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-Alert Exercise"</string>
<string name="enable_exercise_test_alerts_summary" msgid="7365706865492962183">"Show exercise messages"</string>
</resources>
diff --git a/res/values-mcc270-en-rGB/strings.xml b/res/values-mcc270-en-rGB/strings.xml
index bc799db..cc8e5ab 100644
--- a/res/values-mcc270-en-rGB/strings.xml
+++ b/res/values-mcc270-en-rGB/strings.xml
@@ -16,17 +16,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-alert"</string>
- <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-alert"</string>
- <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-alert"</string>
- <string name="public_safety_message" msgid="7178887441252495779">"LU-alert"</string>
- <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-alert: Kidnapping alert"</string>
- <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-alert test"</string>
- <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-alert exercise"</string>
+ <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-Alert"</string>
+ <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-Alert"</string>
+ <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-Alert"</string>
+ <string name="public_safety_message" msgid="7178887441252495779">"LU-Alert"</string>
+ <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-Alert: Kidnapping alert"</string>
+ <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-Alert Test"</string>
+ <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-Alert Exercise"</string>
<string name="enable_cmas_amber_alerts_title" msgid="3426998226619316792">"Kidnapping alert"</string>
<string name="enable_cmas_amber_alerts_summary" msgid="5532453981233187282">"Show alert messages for child abductions"</string>
- <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-alert test"</string>
+ <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-Alert Test"</string>
<string name="enable_cmas_test_alerts_summary" msgid="4393658967042119261">"Show test messages"</string>
- <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-alert exercise"</string>
+ <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-Alert Exercise"</string>
<string name="enable_exercise_test_alerts_summary" msgid="7365706865492962183">"Show exercise messages"</string>
</resources>
diff --git a/res/values-mcc270-en-rIN/strings.xml b/res/values-mcc270-en-rIN/strings.xml
index bc799db..cc8e5ab 100644
--- a/res/values-mcc270-en-rIN/strings.xml
+++ b/res/values-mcc270-en-rIN/strings.xml
@@ -16,17 +16,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-alert"</string>
- <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-alert"</string>
- <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-alert"</string>
- <string name="public_safety_message" msgid="7178887441252495779">"LU-alert"</string>
- <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-alert: Kidnapping alert"</string>
- <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-alert test"</string>
- <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-alert exercise"</string>
+ <string name="cmas_presidential_level_alert" msgid="6712775293264329163">"LU-Alert"</string>
+ <string name="cmas_extreme_alert" msgid="5707699462404036561">"LU-Alert"</string>
+ <string name="cmas_severe_alert" msgid="3403847334974558596">"LU-Alert"</string>
+ <string name="public_safety_message" msgid="7178887441252495779">"LU-Alert"</string>
+ <string name="cmas_amber_alert" msgid="1934668428381380827">"LU-Alert: Kidnapping alert"</string>
+ <string name="cmas_required_monthly_test" msgid="7364077592345886483">"LU-Alert Test"</string>
+ <string name="cmas_exercise_alert" msgid="8651116593061990582">"LU-Alert Exercise"</string>
<string name="enable_cmas_amber_alerts_title" msgid="3426998226619316792">"Kidnapping alert"</string>
<string name="enable_cmas_amber_alerts_summary" msgid="5532453981233187282">"Show alert messages for child abductions"</string>
- <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-alert test"</string>
+ <string name="enable_cmas_test_alerts_title" msgid="6503578245169569633">"LU-Alert Test"</string>
<string name="enable_cmas_test_alerts_summary" msgid="4393658967042119261">"Show test messages"</string>
- <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-alert exercise"</string>
+ <string name="enable_exercise_test_alerts_title" msgid="8642537980920870855">"LU-Alert Exercise"</string>
<string name="enable_exercise_test_alerts_summary" msgid="7365706865492962183">"Show exercise messages"</string>
</resources>
diff --git a/res/values-mcc310-kn/strings.xml b/res/values-mcc310-kn/strings.xml
index 31006ef..c37d289 100644
--- a/res/values-mcc310-kn/strings.xml
+++ b/res/values-mcc310-kn/strings.xml
@@ -21,8 +21,8 @@
<string name="emergency_alert_settings_title_watches" msgid="5702555089013313773">"ವೈರ್ಲೆಸ್ ತುರ್ತು ಅಲರ್ಟ್ಗಳು"</string>
<string name="receive_cmas_in_second_language_title" msgid="7539080017840218665">"ಸ್ಪ್ಯಾನಿಶ್"</string>
<string name="receive_cmas_in_second_language_summary" msgid="4482209573334686904">"ಸಾಧ್ಯವಾದಾಗ ಸ್ಪ್ಯಾನಿಶ್ ಭಾಷೆಯಲ್ಲಿ ತುರ್ತು ಎಚ್ಚರಿಕೆಗಳನ್ನು ಸ್ವೀಕರಿಸಿ"</string>
- <string name="confirm_delete_broadcast" msgid="6808374217554967811">"ಈ ಅಲರ್ಟ್ ಅನ್ನು ಅಳಿಸುವುದೇ?"</string>
- <string name="confirm_delete_all_broadcasts" msgid="4748571670736214158">"ಸ್ವೀಕರಿಸಿದ ಎಲ್ಲಾ ಅಲರ್ಟ್ಗಳನ್ನು ಅಳಿಸುವುದೇ?"</string>
+ <string name="confirm_delete_broadcast" msgid="6808374217554967811">"ಈ ಅಲರ್ಟ್ ಅನ್ನು ಅಳಿಸಬೇಕೆ?"</string>
+ <string name="confirm_delete_all_broadcasts" msgid="4748571670736214158">"ಸ್ವೀಕರಿಸಿದ ಎಲ್ಲಾ ಅಲರ್ಟ್ಗಳನ್ನು ಅಳಿಸಬೇಕೆ?"</string>
<string name="menu_delete" msgid="2691868773984777519">"ಅಲರ್ಟ್ ಅನ್ನು ಅಳಿಸಿ"</string>
<string name="menu_delete_all" msgid="8991615021908376216">"ಅಲರ್ಟ್ಗಳನ್ನು ಅಳಿಸಿ"</string>
<!-- no translation found for enable_cmas_test_alerts_title (3722503121618497385) -->
diff --git a/res/values-mcc334/config.xml b/res/values-mcc334/config.xml
index 8782f11..4b23f02 100644
--- a/res/values-mcc334/config.xml
+++ b/res/values-mcc334/config.xml
@@ -17,50 +17,50 @@
<resources>
<!-- Channel 4370, 4383, 919 -->
<string-array name="cmas_presidential_alerts_channels_range_strings" translatable="false">
- <item>0x1112:rat=gsm, emergency=true, alert_duration=8000, always_on=true</item>
- <item>0x111F:rat=gsm, emergency=true, alert_duration=8000, always_on=true</item>
+ <item>0x1112:rat=gsm, emergency=true, always_on=true</item>
+ <item>0x111F:rat=gsm, emergency=true, always_on=true</item>
<!-- Channel 919 is the secondary channel for level 1-3, following the highest level config -->
- <item>0x397:rat=gsm, emergency=true, alert_duration=8000, always_on=true</item>
+ <item>0x397:rat=gsm, emergency=true, always_on=true</item>
</string-array>
<!-- 4371~4372, 4384~4385 -->
<string-array name="cmas_alert_extreme_channels_range_strings" translatable="false">
- <item>0x1113-0x1114:rat=gsm, alert_duration=8000, emergency=true</item>
- <item>0x1120-0x1121:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x1113-0x1114:rat=gsm, emergency=true</item>
+ <item>0x1120-0x1121:rat=gsm, emergency=true</item>
</string-array>
<!-- 4373~4378, 4386~4391 -->
<string-array name="cmas_alerts_severe_range_strings" translatable="false">
- <item>0x1115-0x111A:rat=gsm, alert_duration=8000, emergency=true</item>
- <item>0x1122-0x1127:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x1115-0x111A:rat=gsm, emergency=true</item>
+ <item>0x1122-0x1127:rat=gsm, emergency=true</item>
</string-array>
<!-- 4379 -->
<string-array name="cmas_amber_alerts_channels_range_strings" translatable="false">
- <item>0x111B:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x111B:rat=gsm, emergency=true</item>
</string-array>
<!-- 4380, 519 -->
<string-array name="required_monthly_test_range_strings" translatable="false">
- <item>0x111C:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x111C:rat=gsm, emergency=true</item>
<!-- Channel 519 is the secondary channel for test and exercise alert -->
- <item>0x207:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x207:rat=gsm, emergency=true</item>
</string-array>
<!-- 4381 -->
<string-array name="exercise_alert_range_strings" translatable="false">
- <item>0x111D:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x111D:rat=gsm, emergency=true</item>
</string-array>
<!-- Channel 6400 -->
<string-array name="public_safety_messages_channels_range_strings" translatable="false">
- <item>0x1900:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x1900:rat=gsm, emergency=true</item>
</string-array>
<!-- Channel 4396-4399 -->
<string-array name="emergency_alerts_channels_range_strings" translatable="false">
<!-- Channel 4396-4399 reserved for future -->
- <item>0x112C-0x112F:rat=gsm, alert_duration=8000, emergency=true</item>
+ <item>0x112C-0x112F:rat=gsm, emergency=true</item>
</string-array>
<string-array name="operator_defined_alert_range_strings" translatable="false" />
diff --git a/res/values-mcc420-in/strings.xml b/res/values-mcc420-in/strings.xml
index 4f4f2c1..a67b155 100644
--- a/res/values-mcc420-in/strings.xml
+++ b/res/values-mcc420-in/strings.xml
@@ -14,7 +14,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="cmas_presidential_level_alert" msgid="5922755396541728069">"Notifikasi Peringatan Nasional"</string>
- <string name="cmas_extreme_alert" msgid="2666370743728576543">"Notifikasi Peringatan Darurat Ekstrim"</string>
+ <string name="cmas_extreme_alert" msgid="2666370743728576543">"Notifikasi Peringatan Darurat Ekstrem"</string>
<!-- no translation found for cmas_extreme_immediate_observed_alert (9214912512697774351) -->
<skip />
<!-- no translation found for cmas_extreme_immediate_likely_alert (5872678423468023949) -->
diff --git a/res/values-mcc440-mnc20/config.xml b/res/values-mcc440-mnc20/config.xml
index ee877aa..fc8c1e0 100644
--- a/res/values-mcc440-mnc20/config.xml
+++ b/res/values-mcc440-mnc20/config.xml
@@ -19,13 +19,7 @@
<string-array name="etws_test_alerts_range_strings" translatable="false">
<item>0x1103:rat=gsm, emergency=true, debug_build=true</item>
</string-array>
- <string-array name="additional_cbs_channels_strings" translatable="false">
- <item>0xA800:type=etws_earthquake, emergency=true, scope=carrier</item>
- <item>0xAFEE:type=etws_tsunami, emergency=true, scope=carrier</item>
- <item>0xAC00-0xAFED:type=other, emergency=true, scope=carrier</item>
- <item>0xA802:type=test, emergency=true, scope=carrier</item>
- <item>0xA804:type=test, emergency=true, scope=carrier</item>
- </string-array>
+
<!-- Whether to show test settings -->
<bool name="show_test_settings">false</bool>
<bool name="allow_testing_mode_on_user_build">false</bool>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index de6e091..588496e 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -56,7 +56,7 @@
<string name="public_safety_message" msgid="9119928798786998252">"பொதுமக்களுக்கான பாதுகாப்புச் செய்தி"</string>
<string name="state_local_test_alert" msgid="8003145745857480200">"மாநில/உள்ளூர் சோதனை மெசேஜ்கள்"</string>
<string name="emergency_alert" msgid="624783871477634263">"அவசரகால எச்சரிக்கை"</string>
- <string name="emergency_alerts_title" msgid="6605036374197485429">"எச்சரிக்கைகள்"</string>
+ <string name="emergency_alerts_title" msgid="6605036374197485429">"விழிப்பூட்டல்கள்"</string>
<string name="notification_channel_broadcast_messages" msgid="880704362482824524">"வலைபரப்புச் செய்திகள்"</string>
<string name="notification_channel_emergency_alerts" msgid="5008287980979183617">"அவசரகால எச்சரிக்கைகள்"</string>
<string name="notification_channel_emergency_alerts_high_priority" msgid="3937475297436439073">"உறுதிசெய்யப்படாத அவசரகால எச்சரிக்கைகள்"</string>
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index 4d896ae..fa754b5 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -490,7 +490,9 @@
if (channelManager.isEmergencyMessage(cbm) && !sRemindAfterCallFinish) {
// start alert sound / vibration / TTS and display full-screen alert
openEmergencyAlertNotification(cbm);
- Resources res = CellBroadcastSettings.getResources(mContext, cbm.getSubscriptionId());
+ Resources res = CellBroadcastSettings.getResourcesByOperator(mContext,
+ cbm.getSubscriptionId(),
+ CellBroadcastReceiver.getRoamingOperatorSupported(mContext));
CellBroadcastChannelRange range = channelManager
.getCellBroadcastChannelRangeFromMessage(cbm);
@@ -618,14 +620,20 @@
if (resourcesKey == R.array.exercise_alert_range_strings
&& res.getBoolean(R.bool.show_separate_exercise_settings)) {
- return emergencyAlertEnabled && checkAlertConfigEnabled(
+ return emergencyAlertEnabled
+ && CellBroadcastSettings.isExerciseTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
+ && checkAlertConfigEnabled(
subId, CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS,
res.getBoolean(R.bool.test_exercise_alerts_enabled_default));
}
if (resourcesKey == R.array.operator_defined_alert_range_strings
&& res.getBoolean(R.bool.show_separate_operator_defined_settings)) {
- return emergencyAlertEnabled && checkAlertConfigEnabled(
+ return emergencyAlertEnabled
+ && CellBroadcastSettings.isOperatorTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
+ && checkAlertConfigEnabled(
subId, CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS,
res.getBoolean(R.bool.test_operator_defined_alerts_enabled_default));
}
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
index 78e31b6..b64ff88 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastConfigService.java
@@ -301,17 +301,28 @@
&& prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS,
false)));
+ CellBroadcastChannelManager channelManager = new CellBroadcastChannelManager(
+ getApplicationContext(), SubscriptionManager.getDefaultSubscriptionId(),
+ roamingOperator);
boolean enableExerciseAlerts = enableAlertsMasterToggle && (isRoaming
? (res.getBoolean(R.bool.show_separate_exercise_settings)
+ && CellBroadcastSettings.isExerciseTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
&& res.getBoolean(R.bool.test_exercise_alerts_enabled_default))
: (res.getBoolean(R.bool.show_separate_exercise_settings)
+ && CellBroadcastSettings.isExerciseTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
&& prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS,
false)));
boolean enableOperatorDefined = enableAlertsMasterToggle && (isRoaming
? (res.getBoolean(R.bool.show_separate_operator_defined_settings)
+ && CellBroadcastSettings.isOperatorTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
&& res.getBoolean(R.bool.test_operator_defined_alerts_enabled_default))
: (res.getBoolean(R.bool.show_separate_operator_defined_settings)
+ && CellBroadcastSettings.isOperatorTestAlertsToggleVisible(
+ res, getApplicationContext(), channelManager)
&& prefs.getBoolean(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS,
false)));
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
index e6c5ec5..3d2da1f 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSearchIndexableProvider.java
@@ -42,6 +42,7 @@
import android.content.res.Resources;
import android.database.Cursor;
import android.database.MatrixCursor;
+import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.SearchIndexablesProvider;
import android.telephony.SubscriptionManager;
@@ -106,6 +107,32 @@
/**
* this method is to make this class unit-testable, because
+ * CellBroadcastSettings.isExerciseTestAlertsToggleVisible is a static method and
+ * therefore not mockable
+ *
+ * @return true if test alerts toggle is Visible
+ */
+ @VisibleForTesting
+ public boolean isExerciseTestAlertsToggleVisible(CellBroadcastChannelManager channelManager) {
+ return CellBroadcastSettings.isExerciseTestAlertsToggleVisible(
+ getResourcesMethod(), getContext(), channelManager);
+ }
+
+ /**
+ * this method is to make this class unit-testable, because
+ * CellBroadcastSettings.isOperatorTestAlertsToggleVisible is a static method and
+ * therefore not mockable
+ *
+ * @return true if test alerts toggle is Visible
+ */
+ @VisibleForTesting
+ public boolean isOperatorTestAlertsToggleVisible(CellBroadcastChannelManager channelManager) {
+ return CellBroadcastSettings.isOperatorTestAlertsToggleVisible(
+ getResourcesMethod(), getContext(), channelManager);
+ }
+
+ /**
+ * this method is to make this class unit-testable, because
* CellBroadcastSettings.isShowFullScreenMessageVisible is a static method and therefore not
* able to mock
*
@@ -199,15 +226,52 @@
Resources res = getResourcesMethod();
Object[] ref;
+ final UserManager userManager = getContextMethod().getSystemService(UserManager.class);
+ boolean isAdminUser = userManager.isAdminUser();
- if (!res.getBoolean(R.bool.show_presidential_alerts_settings)) {
+ if (!isAdminUser) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.class.getSimpleName();
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser || !res.getBoolean(R.bool.show_main_switch_settings)) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_EMERGENCY_ALERT_HISTORY;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_ALERT_REMINDER_INTERVAL;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser || !res.getBoolean(R.bool.show_override_dnd_settings)) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_OVERRIDE_DND;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser || !res.getBoolean(R.bool.show_presidential_alerts_settings)) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_CMAS_PRESIDENTIAL_ALERTS;
cursor.addRow(ref);
}
- if (!CellBroadcastSettings.getResources(getContextMethod(),
+ if (!isAdminUser || !CellBroadcastSettings.getResources(getContextMethod(),
SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
.getBoolean(R.bool.show_alert_speech_setting)) {
ref = new Object[1];
@@ -216,7 +280,7 @@
cursor.addRow(ref);
}
- if (!res.getBoolean(R.bool.show_extreme_alert_settings)) {
+ if (!isAdminUser || !res.getBoolean(R.bool.show_extreme_alert_settings)) {
// Remove CMAS preference items in emergency alert category.
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -224,7 +288,7 @@
cursor.addRow(ref);
}
- if (!res.getBoolean(R.bool.show_severe_alert_settings)) {
+ if (!isAdminUser || !res.getBoolean(R.bool.show_severe_alert_settings)) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -232,14 +296,14 @@
cursor.addRow(ref);
}
- if (!res.getBoolean(R.bool.show_amber_alert_settings)) {
+ if (!isAdminUser || !res.getBoolean(R.bool.show_amber_alert_settings)) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS;
cursor.addRow(ref);
}
- if (!res.getBoolean(R.bool.config_showAreaUpdateInfoSettings)) {
+ if (!isAdminUser || !res.getBoolean(R.bool.config_showAreaUpdateInfoSettings)) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_AREA_UPDATE_INFO_ALERTS;
@@ -248,7 +312,7 @@
CellBroadcastChannelManager channelManager = new CellBroadcastChannelManager(
getContextMethod(), SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
- if (channelManager.getCellBroadcastChannelRanges(
+ if (!isAdminUser || channelManager.getCellBroadcastChannelRanges(
R.array.cmas_amber_alerts_channels_range_strings).isEmpty()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -256,7 +320,7 @@
cursor.addRow(ref);
}
- if (channelManager.getCellBroadcastChannelRanges(
+ if (!isAdminUser || channelManager.getCellBroadcastChannelRanges(
R.array.emergency_alerts_channels_range_strings).isEmpty()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -264,7 +328,7 @@
cursor.addRow(ref);
}
- if (channelManager.getCellBroadcastChannelRanges(
+ if (!isAdminUser || channelManager.getCellBroadcastChannelRanges(
R.array.public_safety_messages_channels_range_strings).isEmpty()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -272,7 +336,7 @@
cursor.addRow(ref);
}
- if (channelManager.getCellBroadcastChannelRanges(
+ if (!isAdminUser || channelManager.getCellBroadcastChannelRanges(
R.array.state_local_test_alert_range_strings).isEmpty()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
@@ -280,14 +344,29 @@
cursor.addRow(ref);
}
- if (!isTestAlertsToggleVisible()) {
+ if (!isAdminUser || !isTestAlertsToggleVisible()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_TEST_ALERTS;
cursor.addRow(ref);
}
- if (res.getString(R.string.emergency_alert_second_language_code).isEmpty()) {
+ if (!isAdminUser || !isExerciseTestAlertsToggleVisible(channelManager)) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser || !isOperatorTestAlertsToggleVisible(channelManager)) {
+ ref = new Object[1];
+ ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
+ CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS;
+ cursor.addRow(ref);
+ }
+
+ if (!isAdminUser
+ || res.getString(R.string.emergency_alert_second_language_code).isEmpty()) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_RECEIVE_CMAS_IN_SECOND_LANGUAGE;
@@ -296,14 +375,14 @@
boolean isVisibleVibrationSetting = CellBroadcastSettings
.isVibrationToggleVisible(getContextMethod(), res);
- if (!isVisibleVibrationSetting) {
+ if (!isAdminUser || !isVisibleVibrationSetting) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_ALERT_VIBRATE;
cursor.addRow(ref);
}
- if (!isShowFullScreenMessageVisible(res)) {
+ if (!isAdminUser || !isShowFullScreenMessageVisible(res)) {
ref = new Object[1];
ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] =
CellBroadcastSettings.KEY_ENABLE_PUBLIC_SAFETY_MESSAGES_FULL_SCREEN;
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
index 106a284..116f9a8 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastSettings.java
@@ -669,31 +669,13 @@
}
if (mExerciseTestCheckBox != null) {
- boolean visible = false;
- if (res.getBoolean(R.bool.show_separate_exercise_settings)) {
- if (res.getBoolean(R.bool.show_exercise_settings)
- || CellBroadcastReceiver.isTestingMode(getContext())) {
- if (!channelManager.getCellBroadcastChannelRanges(
- R.array.exercise_alert_range_strings).isEmpty()) {
- visible = true;
- }
- }
- }
- mExerciseTestCheckBox.setVisible(visible);
+ mExerciseTestCheckBox.setVisible(
+ isExerciseTestAlertsToggleVisible(res, getContext(), channelManager));
}
if (mOperatorDefinedCheckBox != null) {
- boolean visible = false;
- if (res.getBoolean(R.bool.show_separate_operator_defined_settings)) {
- if (res.getBoolean(R.bool.show_operator_defined_settings)
- || CellBroadcastReceiver.isTestingMode(getContext())) {
- if (!channelManager.getCellBroadcastChannelRanges(
- R.array.operator_defined_alert_range_strings).isEmpty()) {
- visible = true;
- }
- }
- }
- mOperatorDefinedCheckBox.setVisible(visible);
+ mOperatorDefinedCheckBox.setVisible(
+ isOperatorTestAlertsToggleVisible(res, getContext(), channelManager));
}
if (mEmergencyAlertsCheckBox != null) {
@@ -967,6 +949,36 @@
return false;
}
+ /**
+ * Check whether exercise test alert toggle is visible
+ * @param res Resources
+ * @param context Context
+ * @param channelManager ChannelManager
+ */
+ public static boolean isExerciseTestAlertsToggleVisible(Resources res, Context context,
+ CellBroadcastChannelManager channelManager) {
+ return res.getBoolean(R.bool.show_separate_exercise_settings)
+ && (res.getBoolean(R.bool.show_exercise_settings)
+ || CellBroadcastReceiver.isTestingMode(context))
+ && !channelManager.getCellBroadcastChannelRanges(
+ R.array.exercise_alert_range_strings).isEmpty();
+ }
+
+ /**
+ * Check whether operator test alert toggle is visible
+ * @param res Resources
+ * @param context Context
+ * @param channelManager ChannelManager
+ */
+ public static boolean isOperatorTestAlertsToggleVisible(Resources res, Context context,
+ CellBroadcastChannelManager channelManager) {
+ return res.getBoolean(R.bool.show_separate_operator_defined_settings)
+ && (res.getBoolean(R.bool.show_operator_defined_settings)
+ || CellBroadcastReceiver.isTestingMode(context))
+ && !channelManager.getCellBroadcastChannelRanges(
+ R.array.operator_defined_alert_range_strings).isEmpty();
+ }
+
public static boolean isTestAlertsToggleVisible(Context context) {
return isTestAlertsToggleVisible(context, null);
}
diff --git a/tests/compliancetests/Android.bp b/tests/compliancetests/Android.bp
index 22dd985..77fcf72 100644
--- a/tests/compliancetests/Android.bp
+++ b/tests/compliancetests/Android.bp
@@ -31,7 +31,7 @@
"mockito-target-minus-junit4",
"truth",
"ub-uiautomator",
- "android.telephony.mockmodem",
+ "cellbroadcast.mockmodem",
"modules-utils-build_system",
"junit-params",
],
@@ -40,6 +40,22 @@
platform_apis: true,
}
+java_import {
+ name: "prebuilt_cellbroadcast_mockmodem",
+ jars: ["mockmodem/classes.jar"],
+}
+
+android_library {
+ name: "cellbroadcast.mockmodem",
+ asset_dirs: ["mockmodem/assets"],
+ manifest: "mockmodem/AndroidManifest.xml",
+ static_libs: [
+ "prebuilt_cellbroadcast_mockmodem",
+ ],
+ min_sdk_version: "30",
+ platform_apis: true,
+}
+
android_test {
name: "CellBroadcastReceiverComplianceTests",
defaults: ["CellBroadcastTestCommonComplianceTest"],
diff --git a/tests/compliancetests/assets/emergency_alert_channels.json b/tests/compliancetests/assets/emergency_alert_channels.json
index fe2915b..ed2de49 100644
--- a/tests/compliancetests/assets/emergency_alert_channels.json
+++ b/tests/compliancetests/assets/emergency_alert_channels.json
@@ -693,43 +693,6 @@
"title": "子供の誘拐(誘拐事件速報)", //"Child abduction (Amber alert)",
"default_value": "true",
"toggle_avail": "true"
- },
- "43008": {
- "title": "緊急地震速報", //"Earthquake warning",
- "default_value": "true",
- "toggle_avail": "false"
- },
- "45038": {
- "title": "津波警報", //"Tsunami warning",
- "default_value": "true",
- "toggle_avail": "false",
- "warning_type": "02"
- },
- "44032": {
- "title": "緊急速報メール", //"Emergency warning",
- "default_value": "true",
- "toggle_avail": "false",
- "end_channel": "45037"
- },
- "45000": {
- "title": "緊急速報メール", //"Emergency warning",
- "default_value": "true",
- "toggle_avail": "false"
- },
- "45037": {
- "title": "緊急速報メール", //"Emergency warning",
- "default_value": "true",
- "toggle_avail": "false"
- },
- "43010": {
- "title": "ETWS 試験メッセージ", //"ETWS test message",
- "default_value": "false",
- "toggle_avail": "false"
- },
- "43012": {
- "title": "ETWS 試験メッセージ", //"ETWS test message",
- "default_value": "false",
- "toggle_avail": "false"
}
},
"hongkong": {
diff --git a/tests/compliancetests/mockmodem/AndroidManifest.xml b/tests/compliancetests/mockmodem/AndroidManifest.xml
new file mode 100644
index 0000000..71fdccd
--- /dev/null
+++ b/tests/compliancetests/mockmodem/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="android.telephony.mockmodem">
+
+ <!-- Must be debuggable for compat shell commands to work on user builds -->
+ <application android:debuggable="true">
+ <service android:name="android.telephony.mockmodem.MockModemService"
+ android:directBootAware="true"
+ android:persistent="true"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.telephony.mockmodem.iradioconfig"/>
+ <action android:name="android.telephony.mockmodem.iradiomodem"/>
+ <action android:name="android.telephony.mockmodem.iradiosim"/>
+ <action android:name="android.telephony.mockmodem.iradionetwork"/>
+ <action android:name="android.telephony.mockmodem.iradiodata"/>
+ <action android:name="android.telephony.mockmodem.iradiomessaging"/>
+ <action android:name="android.telephony.mockmodem.iradiovoice"/>
+ <action android:name="android.telephony.mockmodem.iradioims"/>
+ </intent-filter>
+ </service>
+ </application>
+</manifest>
diff --git a/tests/compliancetests/mockmodem/assets/mock_network_tw_cht.xml b/tests/compliancetests/mockmodem/assets/mock_network_tw_cht.xml
new file mode 100644
index 0000000..1a0e8c6
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_network_tw_cht.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MockNetwork carrierid="1">
+ <MockCellProperty>
+ <EHPLMNLIST>46692</EHPLMNLIST>
+ <AllowRoamingList>310026</AllowRoamingList>
+ </MockCellProperty>
+
+ <MockNetworkProfile id="0" rat="LTE" connection="primary">
+ <MockCellIdentity>
+ <MCC>466</MCC>
+ <MNC>92</MNC>
+ <CI>101</CI>
+ <PCI>273</PCI>
+ <TAC>13100</TAC>
+ <EARFCN>9260</EARFCN>
+ <OperatorInfo>
+ <AlphaLong>Chung Hwa Telecom</AlphaLong>
+ <AlphaShort>CHT</AlphaShort>
+ <OperatorNumeric>46692</OperatorNumeric>
+ </OperatorInfo>
+ </MockCellIdentity>
+
+ <MockCellSignalStrength>
+ <SignalStrength>20</SignalStrength>
+ <RSRP>71</RSRP>
+ <RSRQ>6</RSRQ>
+ <RSSNR>100</RSSNR>
+ <CQI>13</CQI>
+ <TimingAdvance>0</TimingAdvance>
+ <CqiTableIndex>1</CqiTableIndex>
+ </MockCellSignalStrength>
+ </MockNetworkProfile>
+
+ <MockNetworkProfile id="1" rat="WCDMA">
+ <MockCellIdentity>
+ <MCC>466</MCC>
+ <MNC>92</MNC>
+ <LAC>9222</LAC>
+ <CID>14549</CID>
+ <PSC>413</PSC>
+ <UARFCN>10613</UARFCN>
+ <OperatorInfo>
+ <AlphaLong>Chung Hwa Telecom</AlphaLong>
+ <AlphaShort>CHT</AlphaShort>
+ <OperatorNumeric>46692</OperatorNumeric>
+ </OperatorInfo>
+ </MockCellIdentity>
+
+ <MockCellSignalStrength>
+ <SignalStrength>20</SignalStrength>
+ <BitErrorRate>3</BitErrorRate>
+ <RSCP>45</RSCP>
+ <ECNO>25</ECNO>
+ </MockCellSignalStrength>
+ </MockNetworkProfile>
+</MockNetwork>
diff --git a/tests/compliancetests/mockmodem/assets/mock_network_tw_fet.xml b/tests/compliancetests/mockmodem/assets/mock_network_tw_fet.xml
new file mode 100644
index 0000000..140768e
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_network_tw_fet.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MockNetwork carrierid="2">
+ <MockCellProperty>
+ <EHPLMNLIST>46601,46605</EHPLMNLIST>
+ <AllowRoamingList>310026</AllowRoamingList>
+ </MockCellProperty>
+
+ <MockNetworkProfile id="0" rat="WCDMA" connection="primary">
+ <MockCellIdentity>
+ <MCC>466</MCC>
+ <MNC>01</MNC>
+ <LAC>8122</LAC>
+ <CID>16249</CID>
+ <PSC>413</PSC>
+ <UARFCN>10613</UARFCN>
+ <OperatorInfo>
+ <AlphaLong>Far EasTone</AlphaLong>
+ <AlphaShort>FET</AlphaShort>
+ <OperatorNumeric>46601</OperatorNumeric>
+ </OperatorInfo>
+ </MockCellIdentity>
+
+ <MockCellSignalStrength>
+ <SignalStrength>10</SignalStrength>
+ <BitErrorRate>6</BitErrorRate>
+ <RSCP>55</RSCP>
+ <ECNO>15</ECNO>
+ </MockCellSignalStrength>
+ </MockNetworkProfile>
+</MockNetwork>
diff --git a/tests/compliancetests/mockmodem/assets/mock_network_us_fi.xml b/tests/compliancetests/mockmodem/assets/mock_network_us_fi.xml
new file mode 100644
index 0000000..bf194c4
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_network_us_fi.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MockNetwork carrierid="3">
+ <MockCellProperty>
+ <EHPLMNLIST>312580</EHPLMNLIST>
+ <AllowRoamingList>310026</AllowRoamingList>
+ </MockCellProperty>
+
+ <MockNetworkProfile id="0" rat="LTE" connection="primary">
+ <MockCellIdentity>
+ <MCC>312</MCC>
+ <MNC>580</MNC>
+ <CI>101</CI>
+ <PCI>273</PCI>
+ <TAC>13100</TAC>
+ <EARFCN>9260</EARFCN>
+ <OperatorInfo>
+ <AlphaLong>Google Fi</AlphaLong>
+ <AlphaShort>Fi</AlphaShort>
+ <OperatorNumeric>312580</OperatorNumeric>
+ </OperatorInfo>
+ </MockCellIdentity>
+
+ <MockCellSignalStrength>
+ <SignalStrength>20</SignalStrength>
+ <RSRP>71</RSRP>
+ <RSRQ>6</RSRQ>
+ <RSSNR>100</RSSNR>
+ <CQI>13</CQI>
+ <TimingAdvance>0</TimingAdvance>
+ <CqiTableIndex>1</CqiTableIndex>
+ </MockCellSignalStrength>
+ </MockNetworkProfile>
+
+ <MockNetworkProfile id="1" rat="WCDMA">
+ <MockCellIdentity>
+ <MCC>312</MCC>
+ <MNC>580</MNC>
+ <LAC>9222</LAC>
+ <CID>14549</CID>
+ <PSC>413</PSC>
+ <UARFCN>10613</UARFCN>
+ <OperatorInfo>
+ <AlphaLong>Google Fi</AlphaLong>
+ <AlphaShort>Fi</AlphaShort>
+ <OperatorNumeric>312580</OperatorNumeric>
+ </OperatorInfo>
+ </MockCellIdentity>
+
+ <MockCellSignalStrength>
+ <SignalStrength>20</SignalStrength>
+ <BitErrorRate>3</BitErrorRate>
+ <RSCP>45</RSCP>
+ <ECNO>25</ECNO>
+ </MockCellSignalStrength>
+ </MockNetworkProfile>
+</MockNetwork>
diff --git a/tests/compliancetests/mockmodem/assets/mock_sim_tw_cht.xml b/tests/compliancetests/mockmodem/assets/mock_sim_tw_cht.xml
new file mode 100644
index 0000000..6125c2d
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_sim_tw_cht.xml
@@ -0,0 +1,32 @@
+<MockSim numofapp="2" atr="3B9F96801FC78031E073FE2111634082918307900099">
+<MockSimProfile id="0" type="APPTYPE_USIM">
+ <PinProfile appstate="APPSTATE_READY">
+ <Pin1State>PINSTATE_DISABLED</Pin1State>
+ <Pin2State>PINSTATE_ENABLED_NOT_VERIFIED</Pin2State>
+ </PinProfile>
+
+ <FacilityLock>
+ <FD>LOCK_DISABLED</FD>
+ <SC>LOCK_DISABLED</SC>
+ </FacilityLock>
+
+ <MF name="MF" path="3F00">
+ <EFDIR name="ADF1" curr_active="true">A0000000871002F886FF9289050B00FE</EFDIR>
+ </MF>
+
+ <ADF aid="A0000000871002F886FF9289050B00FE">
+ <EF name="EF_IMSI" id="6F07" command="" mnc-digit="2">466920123456789</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xb0">89886920042507847155</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xc0">0000000A2FE2040000FFFF01020002</EF>
+ <EF name="EF_GID1" id="6F3E" command="0xb0">BA01270000000000</EF>
+ <EF name="EF_GID1" id="6F3E" command="0xc0">000000086F3E040000FFFF01020002</EF>
+ </ADF>
+</MockSimProfile>
+
+<MockSimProfile id="1" type="APPTYPE_ISIM">
+ <PinProfile appstate="APPSTATE_DETECTED">
+ <Pin1State>PINSTATE_DISABLED</Pin1State>
+ <Pin2State>PINSTATE_ENABLED_NOT_VERIFIED</Pin2State>
+ </PinProfile>
+</MockSimProfile>
+</MockSim>
diff --git a/tests/compliancetests/mockmodem/assets/mock_sim_tw_fet.xml b/tests/compliancetests/mockmodem/assets/mock_sim_tw_fet.xml
new file mode 100644
index 0000000..4463d88
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_sim_tw_fet.xml
@@ -0,0 +1,23 @@
+<MockSim numofapp="1" atr="3B9E95801FC78031E073FE211B66D001A0E50F0048">
+<MockSimProfile id="0" type="APPTYPE_USIM">
+ <PinProfile appstate="APPSTATE_READY">
+ <Pin1State>PINSTATE_DISABLED</Pin1State>
+ <Pin2State>PINSTATE_ENABLED_NOT_VERIFIED</Pin2State>
+ </PinProfile>
+
+ <FacilityLock>
+ <FD>LOCK_DISABLED</FD>
+ <SC>LOCK_DISABLED</SC>
+ </FacilityLock>
+
+ <MF name="MF" path="3F00">
+ <EFDIR name="ADF1" curr_active="true">A0000000871002FF33FFFF8901010100</EFDIR>
+ </MF>
+
+ <ADF aid="A0000000871002FF33FFFF8901010100">
+ <EF name="EF_IMSI" id="6F07" command="" mnc-digit="2">466011122334455</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xb0">89886021157300856597</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xc0">0000000A2FE2040000FFFF01020002</EF>
+ </ADF>
+</MockSimProfile>
+</MockSim>
\ No newline at end of file
diff --git a/tests/compliancetests/mockmodem/assets/mock_sim_us_fi.xml b/tests/compliancetests/mockmodem/assets/mock_sim_us_fi.xml
new file mode 100644
index 0000000..0e4ccc3
--- /dev/null
+++ b/tests/compliancetests/mockmodem/assets/mock_sim_us_fi.xml
@@ -0,0 +1,32 @@
+<MockSim numofapp="2" atr="3B9F97C00A3FC6828031E073FE211F65D002341512810F51">
+<MockSimProfile id="0" type="APPTYPE_USIM">
+ <PinProfile appstate="APPSTATE_READY">
+ <Pin1State>PINSTATE_DISABLED</Pin1State>
+ <Pin2State>PINSTATE_ENABLED_NOT_VERIFIED</Pin2State>
+ </PinProfile>
+
+ <FacilityLock>
+ <FD>LOCK_DISABLED</FD>
+ <SC>LOCK_DISABLED</SC>
+ </FacilityLock>
+
+ <MF name="MF" path="3F00">
+ <EFDIR name="ADF1" curr_active="true">A0000000871002F310FFFF89190417FF</EFDIR>
+ </MF>
+
+ <ADF aid="A0000000871002F310FFFF89190417FF">
+ <EF name="EF_IMSI" id="6F07" command="" mnc-digit="3">312580123456789</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xb0">89015801000037773143</EF>
+ <EF name="EF_ICCID" id="2FE2" command="0xc0">0000000A2FE2040000FFFF01020002</EF>
+ <EF name="EF_GID1" id="6F3E" command="0xb0">0001</EF>
+ <EF name="EF_GID1" id="6F3E" command="0xc0">000000026F3E040000FFFF01020002</EF>
+ </ADF>
+</MockSimProfile>
+
+<MockSimProfile id="1" type="APPTYPE_ISIM">
+ <PinProfile appstate="APPSTATE_DETECTED">
+ <Pin1State>PINSTATE_DISABLED</Pin1State>
+ <Pin2State>PINSTATE_ENABLED_NOT_VERIFIED</Pin2State>
+ </PinProfile>
+</MockSimProfile>
+</MockSim>
diff --git a/tests/compliancetests/mockmodem/classes.jar b/tests/compliancetests/mockmodem/classes.jar
new file mode 100644
index 0000000..961422a
--- /dev/null
+++ b/tests/compliancetests/mockmodem/classes.jar
Binary files differ
diff --git a/tests/compliancetests/src/com/android/cellbroadcastreceiver/compliancetests/CellBroadcastBaseTest.java b/tests/compliancetests/src/com/android/cellbroadcastreceiver/compliancetests/CellBroadcastBaseTest.java
index d805fc2..a364dec 100644
--- a/tests/compliancetests/src/com/android/cellbroadcastreceiver/compliancetests/CellBroadcastBaseTest.java
+++ b/tests/compliancetests/src/com/android/cellbroadcastreceiver/compliancetests/CellBroadcastBaseTest.java
@@ -144,9 +144,7 @@
@BeforeClass
public static void beforeAllTests() throws Exception {
logd("CellBroadcastBaseTest#beforeAllTests()");
- // TODO: Make cellbroadcastcompliancetest use old mockmodem lib so that test can be
- // run on the previous platform as well.
- if (!SdkLevel.isAtLeastV()) {
+ if (!SdkLevel.isAtLeastT()) {
Log.i(TAG, "sdk level is below the latest platform");
sPreconditionError = ERROR_SDK_VERSION;
return;
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
index d09d94b..046bc12 100644
--- a/tests/unit/Android.bp
+++ b/tests/unit/Android.bp
@@ -82,7 +82,6 @@
instrumentation_for: "CellBroadcastApp",
test_suites: [
"device-tests",
- "mts-cellbroadcast",
],
manifest: "AndroidManifest.xml",
test_config: "AndroidTest.xml",
@@ -96,9 +95,9 @@
instrumentation_for: "CellBroadcastApp",
test_suites: [
"general-tests",
- "mts-cellbroadcast",
],
manifest: "AndroidManifest.xml",
+ target_sdk_version: "10000",
test_config: "AndroidTest_PixelExperience.xml",
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
index cfb8962..02043dc 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertDialogTest.java
@@ -20,7 +20,9 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -41,11 +43,13 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
+import android.os.IBinder;
import android.os.IPowerManager;
import android.os.IThermalService;
import android.os.Looper;
import android.os.Message;
import android.os.PowerManager;
+import android.os.RemoteException;
import android.telephony.SmsCbMessage;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -76,6 +80,8 @@
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@@ -147,6 +153,10 @@
// PowerManager is a final class so we can't use Mockito to mock it, but we can mock
// its underlying service.
doReturn(true).when(mMockedPowerManagerService).isInteractive();
+ if (SdkLevel.isAtLeastU()) {
+ doReturn(true).when(
+ mMockedPowerManagerService).isDisplayInteractive(anyInt());
+ }
mPowerManager = new PowerManager(mContext, mMockedPowerManagerService,
mMockedThermalService, null);
injectSystemService(PowerManager.class, mPowerManager);
@@ -286,6 +296,23 @@
};
mMockedActivityManagerHelper = new MockedServiceManager();
mMockedActivityManagerHelper.replaceService("window", mWindowManagerService);
+ Field fieldHandler = ActivityManager.class.getDeclaredField("IActivityManagerSingleton");
+ fieldHandler.setAccessible(true);
+ Singleton<IActivityManager> activityManager =
+ (Singleton<IActivityManager>) fieldHandler.get(null);
+ IActivityManager realInstance = activityManager.get();
+ doAnswer(new Answer() {
+ public Void answer(InvocationOnMock invocation) throws RemoteException {
+ if (realInstance != null) {
+ realInstance.finishReceiver(invocation.getArgument(0),
+ invocation.getArgument(1), invocation.getArgument(2),
+ invocation.getArgument(3), invocation.getArgument(4),
+ invocation.getArgument(5));
+ }
+ return null;
+ }
+ }).when(mMockedActivityManager).finishReceiver(nullable(IBinder.class), anyInt(),
+ nullable(String.class), nullable(Bundle.class), anyBoolean(), anyInt());
mMockedActivityManagerHelper.replaceInstance(ActivityManager.class,
"IActivityManagerSingleton", null, activityManagerSingleton);
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertServiceTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertServiceTest.java
index a7f5df8..54dfe35 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertServiceTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastAlertServiceTest.java
@@ -67,6 +67,8 @@
import com.android.cellbroadcastreceiver.CellBroadcastAlertAudio;
import com.android.cellbroadcastreceiver.CellBroadcastAlertService;
+import com.android.cellbroadcastreceiver.CellBroadcastChannelManager;
+import com.android.cellbroadcastreceiver.CellBroadcastReceiver;
import com.android.cellbroadcastreceiver.CellBroadcastSettings;
import com.android.internal.telephony.gsm.SmsCbConstants;
import com.android.modules.utils.build.SdkLevel;
@@ -141,6 +143,8 @@
@After
public void tearDown() throws Exception {
+ CellBroadcastSettings.resetResourcesCache();
+ CellBroadcastChannelManager.clearAllCellBroadcastChannelRanges();
super.tearDown();
}
@@ -365,6 +369,86 @@
compareCellBroadCastMessage(message, newMessageList.get(0));
}
+ public void testShowNewAlertWithNotification() {
+ if (!SdkLevel.isAtLeastS()) {
+ return;
+ }
+ doReturn("").when(mMockedSharedPreferences).getString(
+ eq("roaming_operator_supported"), any());
+ doReturn(false).when(mResources).getBoolean(
+ com.android.cellbroadcastreceiver.R.bool.show_alert_dialog_with_notification);
+
+ Intent intent = new Intent(mContext, CellBroadcastAlertService.class);
+ intent.setAction(SHOW_NEW_ALERT_ACTION);
+ SmsCbMessage message = createMessage(34788612);
+ intent.putExtra("message", message);
+ startService(intent);
+ waitForServiceIntent();
+
+ verify(mMockedNotificationManager, times(0))
+ .notify(anyInt(), any());
+
+ doReturn(true).when(mResources).getBoolean(
+ com.android.cellbroadcastreceiver.R.bool.show_alert_dialog_with_notification);
+
+ intent = new Intent(mContext, CellBroadcastAlertService.class);
+ intent.setAction(SHOW_NEW_ALERT_ACTION);
+ message = createMessage(34788612);
+ intent.putExtra("message", message);
+ startService(intent);
+ waitForServiceIntent();
+
+ ArgumentCaptor<Notification> notificationCaptor =
+ ArgumentCaptor.forClass(Notification.class);
+ ArgumentCaptor<Integer> mInt = ArgumentCaptor.forClass(Integer.class);
+ verify(mMockedNotificationManager, times(1))
+ .notify(mInt.capture(), notificationCaptor.capture());
+ assertEquals(1, (int) mInt.getValue());
+ }
+
+ public void testShowNewAlertWithNotificationInRoaming() {
+ if (!SdkLevel.isAtLeastS()) {
+ return;
+ }
+ doReturn(false).when(mResources).getBoolean(
+ com.android.cellbroadcastreceiver.R.bool.show_alert_dialog_with_notification);
+ doReturn("123456").when(mMockedSharedPreferences).getString(
+ eq("roaming_operator_supported"), any());
+ Resources mockResources2 = mock(Resources.class);
+ CellBroadcastSettings.sResourcesCacheByOperator.put("123456", mockResources2);
+ doReturn("").when(mockResources2).getText(anyInt());
+
+ doReturn(false).when(mockResources2).getBoolean(
+ com.android.cellbroadcastreceiver.R.bool.show_alert_dialog_with_notification);
+
+ Intent intent = new Intent(mContext, CellBroadcastAlertService.class);
+ intent.setAction(SHOW_NEW_ALERT_ACTION);
+ SmsCbMessage message = createMessage(34788612);
+ intent.putExtra("message", message);
+ startService(intent);
+ waitForServiceIntent();
+
+ verify(mMockedNotificationManager, times(0))
+ .notify(anyInt(), any());
+
+ doReturn(true).when(mockResources2).getBoolean(
+ com.android.cellbroadcastreceiver.R.bool.show_alert_dialog_with_notification);
+
+ intent = new Intent(mContext, CellBroadcastAlertService.class);
+ intent.setAction(SHOW_NEW_ALERT_ACTION);
+ message = createMessage(34788612);
+ intent.putExtra("message", message);
+ startService(intent);
+ waitForServiceIntent();
+
+ ArgumentCaptor<Notification> notificationCaptor =
+ ArgumentCaptor.forClass(Notification.class);
+ ArgumentCaptor<Integer> intCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(mMockedNotificationManager, times(1))
+ .notify(intCaptor.capture(), notificationCaptor.capture());
+ assertEquals(1, (int) intCaptor.getValue());
+ }
+
// Test showNewAlert method with a CMAS child abduction alert, using the default language code
@InstrumentationTest
// This test has a module dependency, so it is disabled for OEM testing because it is not a true
@@ -430,6 +514,7 @@
putResources(com.android.cellbroadcastreceiver.R.bool.show_separate_exercise_settings,
true);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, true);
putResources(com.android.cellbroadcastreceiver.R.array.exercise_alert_range_strings,
new String[]{
"0x111D:rat=gsm, emergency=true",
@@ -602,6 +687,285 @@
((TestContextWrapper) mContext).injectCreateConfigurationContext(null);
}
+ public void testShouldDisplayMessageForExerciseAlerts() {
+ putResources(com.android.cellbroadcastreceiver.R.array
+ .exercise_alert_range_strings, new String[]{
+ "0x111D:rat=gsm, emergency=true",
+ });
+ sendMessage(1);
+
+ CellBroadcastAlertService cellBroadcastAlertService =
+ (CellBroadcastAlertService) getService();
+ SmsCbMessage message = new SmsCbMessage(1, 2, 3, new SmsCbLocation(),
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE,
+ "language", "body",
+ SmsCbMessage.MESSAGE_PRIORITY_NORMAL, null,
+ null, 0, 1);
+
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_separate_exercise_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .test_exercise_alerts_enabled_default, false);
+ // disable testing mode
+ disablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, true);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, false);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, true);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, false);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // enable testing mode
+ enablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, true);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, false);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, true);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, false);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // roaming case
+ Context mockContext = mock(Context.class);
+ Resources mockResources = mock(Resources.class);
+ doReturn(mockResources).when(mockContext).getResources();
+ ((TestContextWrapper) mContext).injectCreateConfigurationContext(mockContext);
+ // inject roaming operator
+ doReturn("123").when(mMockedSharedPreferences)
+ .getString(anyString(), anyString());
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.show_separate_exercise_settings));
+
+ // disable testing mode
+ disablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings));
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.test_exercise_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.test_exercise_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings));
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.test_exercise_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // enable testing mode
+ enablePreference(CellBroadcastReceiver.TESTING_MODE);
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertFalse("Should disable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.test_exercise_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ assertTrue("Should enable exercise test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ ((TestContextWrapper) mContext).injectCreateConfigurationContext(null);
+ }
+
+ public void testShouldDisplayMessageForOperatorAlerts() {
+ putResources(com.android.cellbroadcastreceiver.R.array
+ .operator_defined_alert_range_strings, new String[]{
+ "0x111E:rat=gsm, emergency=true",
+ });
+ sendMessage(1);
+
+ CellBroadcastAlertService cellBroadcastAlertService =
+ (CellBroadcastAlertService) getService();
+ SmsCbMessage message = new SmsCbMessage(1, 2, 3, new SmsCbLocation(),
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE,
+ "language", "body",
+ SmsCbMessage.MESSAGE_PRIORITY_NORMAL, null,
+ null, 0, 1);
+
+ enablePreference(CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_separate_operator_defined_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default, false);
+ // disable testing mode
+ disablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings, true);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, false);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings, true);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, false);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // enable testing mode
+ enablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings, true);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, false);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings, true);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, false);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // roaming case
+ Context mockContext = mock(Context.class);
+ Resources mockResources = mock(Resources.class);
+ doReturn(mockResources).when(mockContext).getResources();
+ ((TestContextWrapper) mContext).injectCreateConfigurationContext(mockContext);
+ // inject roaming operator
+ doReturn("123").when(mMockedSharedPreferences)
+ .getString(anyString(), anyString());
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool
+ .show_separate_operator_defined_settings));
+
+ // disable testing mode
+ disablePreference(CellBroadcastReceiver.TESTING_MODE);
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings));
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool.show_operator_defined_settings));
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(false).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ // enable testing mode
+ enablePreference(CellBroadcastReceiver.TESTING_MODE);
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertFalse("Should disable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ doReturn(true).when(mockResources).getBoolean(
+ eq(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default));
+ disablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+ enablePreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+ assertTrue("Should enable operator test channel",
+ cellBroadcastAlertService.shouldDisplayMessage(message));
+
+ ((TestContextWrapper) mContext).injectCreateConfigurationContext(null);
+ }
+
public void testShouldDisplayMessageWithMasterToggleState() {
Context mockContext = mock(Context.class);
doReturn(mResources).when(mockContext).getResources();
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastConfigServiceTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastConfigServiceTest.java
index 86898cc..2808abe 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastConfigServiceTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastConfigServiceTest.java
@@ -21,10 +21,13 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
@@ -46,6 +49,7 @@
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
+import android.os.IBinder;
import android.os.RemoteException;
import android.telephony.CellBroadcastIdRange;
import android.telephony.SmsCbMessage;
@@ -60,6 +64,7 @@
import com.android.cellbroadcastreceiver.CellBroadcastAlertService;
import com.android.cellbroadcastreceiver.CellBroadcastConfigService;
+import com.android.cellbroadcastreceiver.CellBroadcastReceiver;
import com.android.cellbroadcastreceiver.CellBroadcastSettings;
import com.android.internal.telephony.ISms;
import com.android.internal.telephony.cdma.sms.SmsEnvelope;
@@ -72,7 +77,10 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -761,6 +769,157 @@
}
/**
+ * Test enabling channels for exercise test channels
+ */
+ @Test
+ @SmallTest
+ public void testEnablingExerciseTestChannels() throws Exception {
+ setPreference(CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE, true);
+
+ // check enable when setting is shown and preference is true
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_separate_exercise_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_exercise_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .test_exercise_alerts_enabled_default, true);
+
+ CbConfig[] enableConfigs = new CbConfig[]{
+ new CbConfig(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE,
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE,
+ SmsCbMessage.MESSAGE_FORMAT_3GPP, true),
+ };
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 1, 1);
+
+ // check disable when preference is false
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, false);
+
+ CbConfig[] disableConfigs = new CbConfig[]{
+ new CbConfig(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE,
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE,
+ SmsCbMessage.MESSAGE_FORMAT_3GPP, false),
+ };
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 2, 1);
+
+ // check disable when setting is not shown
+ putResources(com.android.cellbroadcastreceiver.R.bool.show_exercise_settings, false);
+
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 3, 2);
+
+ // check disable when setting is not shown and preference is off
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 4, 3);
+
+ // testingmode is on
+ // check disable when setting is shown and preference is off
+ setPreference(CellBroadcastReceiver.TESTING_MODE, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 5, 4);
+
+ // check enable when setting is shown and preference is on
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 6, 2);
+
+ // roaming case
+ Context mockContext = mock(Context.class);
+ doReturn(mResources).when(mockContext).getResources();
+ doReturn(mockContext).when(mContext).createConfigurationContext(any());
+ doReturn("123").when(mMockedSharedPreferences).getString(anyString(), anyString());
+ doReturn(mResources).when(mConfigService).getResources(anyInt(), anyString());
+
+ setPreference(CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 7, 3);
+
+ setPreference(CellBroadcastReceiver.TESTING_MODE, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 8, 5);
+ }
+
+ /**
+ * Test enabling channels for operator test channels
+ */
+ @Test
+ @SmallTest
+ public void testEnablingOperatorTestChannels() throws Exception {
+ setPreference(CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE, true);
+
+ // check enable when setting is shown and preference is true
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_separate_operator_defined_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, true);
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .test_operator_defined_alerts_enabled_default, true);
+
+ CbConfig[] enableConfigs = new CbConfig[]{
+ new CbConfig(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE,
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE,
+ SmsCbMessage.MESSAGE_FORMAT_3GPP, true),
+ };
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 1, 1);
+
+ // check disable when preference is false
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, false);
+
+ CbConfig[] disableConfigs = new CbConfig[]{
+ new CbConfig(SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE,
+ SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE,
+ SmsCbMessage.MESSAGE_FORMAT_3GPP, false),
+ };
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 2, 1);
+
+ // check disable when setting is not shown
+ putResources(com.android.cellbroadcastreceiver.R.bool
+ .show_operator_defined_settings, false);
+
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 3, 2);
+
+ // check disable when setting is not shown and preference is off
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 4, 3);
+
+ // testingmode is on
+ // check disable when setting is shown and preference is off
+ setPreference(CellBroadcastReceiver.TESTING_MODE, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 5, 4);
+
+ // check enable when setting is shown and preference is on
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, true);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 6, 2);
+
+ // roaming case
+ Context mockContext = mock(Context.class);
+ doReturn(mResources).when(mockContext).getResources();
+ doReturn(mockContext).when(mContext).createConfigurationContext(any());
+ doReturn("123").when(mMockedSharedPreferences).getString(anyString(), anyString());
+ doReturn(mResources).when(mConfigService).getResources(anyInt(), anyString());
+
+ setPreference(CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(enableConfigs, 7, 3);
+
+ setPreference(CellBroadcastReceiver.TESTING_MODE, false);
+ mConfigService.enableCellBroadcastChannels(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
+ verifySetRanges(disableConfigs, 8, 5);
+ }
+
+ /**
* Test handling the intent to enable channels
*/
@Test
@@ -1546,6 +1705,23 @@
}
};
mMockedServiceManager.replaceService("window", mWindowManagerService);
+ Field fieldHandler = ActivityManager.class.getDeclaredField("IActivityManagerSingleton");
+ fieldHandler.setAccessible(true);
+ Singleton<IActivityManager> activityManager =
+ (Singleton<IActivityManager>) fieldHandler.get(null);
+ IActivityManager realInstance = activityManager.get();
+ doAnswer(new Answer() {
+ public Void answer(InvocationOnMock invocation) throws RemoteException {
+ if (realInstance != null) {
+ realInstance.finishReceiver(invocation.getArgument(0),
+ invocation.getArgument(1), invocation.getArgument(2),
+ invocation.getArgument(3), invocation.getArgument(4),
+ invocation.getArgument(5));
+ }
+ return null;
+ }
+ }).when(mMockedActivityManager).finishReceiver(nullable(IBinder.class), anyInt(),
+ nullable(String.class), nullable(Bundle.class), anyBoolean(), anyInt());
mMockedServiceManager.replaceInstance(ActivityManager.class,
"IActivityManagerSingleton", null, activityManagerSingleton);
doNothing().when(mConfigService).resetAllPreferences();
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSearchIndexableProviderTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSearchIndexableProviderTest.java
index b34d4f0..458c18f 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSearchIndexableProviderTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSearchIndexableProviderTest.java
@@ -18,13 +18,16 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import android.content.Context;
import android.database.Cursor;
+import android.os.UserManager;
import android.os.Vibrator;
import com.android.cellbroadcastreceiver.CellBroadcastSearchIndexableProvider;
@@ -37,6 +40,9 @@
public class CellBroadcastSearchIndexableProviderTest extends CellBroadcastTest {
CellBroadcastSearchIndexableProvider mSearchIndexableProvider;
+ @Mock
+ UserManager mUserManager;
+
@Before
public void setUp() throws Exception {
super.setUp(getClass().getSimpleName());
@@ -48,6 +54,9 @@
doReturn(mResources).when(mSearchIndexableProvider).getResourcesMethod();
doReturn("testString").when(mResources).getString(anyInt());
doReturn(null).when(mSearchIndexableProvider).queryRawData(null);
+ doReturn(Context.USER_SERVICE).when(mContext).getSystemServiceName(UserManager.class);
+ doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+ doReturn(true).when(mUserManager).isAdminUser();
}
@Test
@@ -79,6 +88,67 @@
doReturn(mVibrator).when(mContext).getSystemService("test");
doReturn(true).when(mVibrator).hasVibrator();
doReturn(false).when(mSearchIndexableProvider).isShowFullScreenMessageVisible(mResources);
+ doReturn(false).when(mSearchIndexableProvider)
+ .isExerciseTestAlertsToggleVisible(any());
+ doReturn(false).when(mSearchIndexableProvider)
+ .isOperatorTestAlertsToggleVisible(any());
+ Cursor cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
+
+ //KEY_RECEIVE_CMAS_IN_SECOND_LANGUAGE
+ //KEY_ENABLE_TEST_ALERTS
+ //KEY_ENABLE_STATE_LOCAL_TEST_ALERTS
+ //KEY_ENABLE_PUBLIC_SAFETY_MESSAGES
+ //KEY_ENABLE_EMERGENCY_ALERTS
+ //KEY_ENABLE_CMAS_AMBER_ALERTS
+ //KEY_ENABLE_AREA_UPDATE_INFO_ALERTSf
+ //KEY_ENABLE_CMAS_AMBER_ALERTS
+ //KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS
+ //KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS
+ //KEY_ENABLE_ALERT_SPEECH
+ //KEY_ENABLE_CMAS_PRESIDENTIAL_ALERTS
+ //KEY_ENABLE_ALERTS_MASTER_TOGGLE
+ //KEY_OVERRIDE_DND
+ //KEY_ENABLE_EXERCISE_ALERTS
+ //KEY_OPERATOR_DEFINED_ALERTS
+ assertThat(cursor.getCount()).isEqualTo(17);
+
+ doReturn(false).when(mVibrator).hasVibrator();
+ //KEY_ENABLE_ALERT_VIBRATE
+ cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
+ assertThat(cursor.getCount()).isEqualTo(18);
+
+ doReturn(true).when(mSearchIndexableProvider).isTestAlertsToggleVisible();
+ //KEY_ENABLE_TEST_ALERTS
+ cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
+ assertThat(cursor.getCount()).isEqualTo(17);
+
+ doReturn(true).when(mSearchIndexableProvider).isShowFullScreenMessageVisible(mResources);
+ //KEY_ENABLE_TEST_ALERTS
+ cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
+ assertThat(cursor.getCount()).isEqualTo(16);
+
+ doReturn(true).when(mSearchIndexableProvider)
+ .isExerciseTestAlertsToggleVisible(any());
+ doReturn(true).when(mSearchIndexableProvider)
+ .isOperatorTestAlertsToggleVisible(any());
+ cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
+ assertThat(cursor.getCount()).isEqualTo(14);
+ }
+
+ @Test
+ public void testQueryNonIndexableKeysWithNonAdminMode() {
+ doReturn(false).when(mSearchIndexableProvider).isTestAlertsToggleVisible();
+ doReturn(false).when(mResources).getBoolean(anyInt());
+ doReturn("").when(mResources).getString(anyInt());
+ doReturn("test").when(mContext).getSystemServiceName(Vibrator.class);
+ doReturn(mVibrator).when(mContext).getSystemService("test");
+ doReturn(true).when(mVibrator).hasVibrator();
+ doReturn(false).when(mSearchIndexableProvider).isShowFullScreenMessageVisible(mResources);
+ doReturn(false).when(mSearchIndexableProvider)
+ .isExerciseTestAlertsToggleVisible(any());
+ doReturn(false).when(mSearchIndexableProvider)
+ .isOperatorTestAlertsToggleVisible(any());
+ doReturn(false).when(mUserManager).isAdminUser();
Cursor cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
//KEY_RECEIVE_CMAS_IN_SECOND_LANGUAGE
@@ -93,21 +163,13 @@
//KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS
//KEY_ENABLE_ALERT_SPEECH
//KEY_ENABLE_CMAS_PRESIDENTIAL_ALERTS
- assertThat(cursor.getCount()).isEqualTo(13);
-
- doReturn(false).when(mVibrator).hasVibrator();
- //KEY_ENABLE_ALERT_VIBRATE
- cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
- assertThat(cursor.getCount()).isEqualTo(14);
-
- doReturn(true).when(mSearchIndexableProvider).isTestAlertsToggleVisible();
- //KEY_ENABLE_TEST_ALERTS
- cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
- assertThat(cursor.getCount()).isEqualTo(13);
-
- doReturn(true).when(mSearchIndexableProvider).isShowFullScreenMessageVisible(mResources);
- //KEY_ENABLE_TEST_ALERTS
- cursor = mSearchIndexableProvider.queryNonIndexableKeys(new String[]{""});
- assertThat(cursor.getCount()).isEqualTo(12);
+ //KEY_ENABLE_ALERTS_MASTER_TOGGLE
+ //KEY_OVERRIDE_DND
+ //KEY_ENABLE_EXERCISE_ALERTS
+ //KEY_OPERATOR_DEFINED_ALERTS
+ //KEY_EMERGENCY_ALERT_HISTORY
+ //KEY_ALERT_REMINDER_INTERVAL
+ //TITLE
+ assertThat(cursor.getCount()).isEqualTo(21);
}
}
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
index 7402059..57821b8 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastSettingsTest.java
@@ -30,7 +30,6 @@
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -65,7 +64,6 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import java.lang.reflect.Field;
import java.util.Locale;
@@ -104,6 +102,10 @@
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
MockitoAnnotations.initMocks(this);
CellBroadcastSettings.resetResourcesCache();
+ SubscriptionManager mockSubManager = mock(SubscriptionManager.class);
+ injectSystemService(SubscriptionManager.class, mockSubManager);
+ SubscriptionInfo mockSubInfo = mock(SubscriptionInfo.class);
+ doReturn(mockSubInfo).when(mockSubManager).getActiveSubscriptionInfo(anyInt());
}
@After
@@ -371,7 +373,6 @@
String topIntroRoamingText = "test";
doReturn(topIntroRoamingText).when(mContext.getResources()).getString(
eq(R.string.top_intro_roaming_text));
- setSubscriptionManager();
setPreference(PREFERENCE_PUT_TYPE_STRING, ROAMING_OPERATOR_SUPPORTED, "XXX");
CellBroadcastSettings settings = startActivity();
@@ -383,7 +384,6 @@
@Test
public void testDoNotShowTestCheckBox() throws Throwable {
- setSubscriptionManager();
setPreference(PREFERENCE_PUT_TYPE_BOOL, TESTING_MODE, "false");
doReturn(false).when(mContext.getResources()).getBoolean(
eq(R.bool.show_separate_exercise_settings));
@@ -394,6 +394,7 @@
doReturn(new String[]{"0x111E:rat=gsm, emergency=true"}).when(mContext.getResources())
.getStringArray(eq(R.array.operator_defined_alert_range_strings));
CellBroadcastSettings settings = startActivity();
+ waitForMs(100);
TwoStatePreference exerciseTestCheckBox =
settings.mCellBroadcastSettingsFragment.findPreference(
@@ -402,24 +403,12 @@
settings.mCellBroadcastSettingsFragment.findPreference(
CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
- // received the ACTION_TESTING_MODE_CHANGED, do not show exerciseTestCheckBox &
- // operatorDefinedCheckBox
- Field fieldTestingModeChangedReceiver =
- CellBroadcastSettings.CellBroadcastSettingsFragment.class.getDeclaredField(
- "mTestingModeChangedReceiver");
- fieldTestingModeChangedReceiver.setAccessible(true);
- BroadcastReceiver broadcastReceiver =
- (BroadcastReceiver) fieldTestingModeChangedReceiver.get(
- settings.mCellBroadcastSettingsFragment);
- broadcastReceiver.onReceive(mContext, new Intent().setAction(ACTION_TESTING_MODE_CHANGED));
-
assertFalse(exerciseTestCheckBox.isVisible());
assertFalse(operatorDefinedCheckBox.isVisible());
}
@Test
- public void testShowTestCheckBox() throws Throwable {
- setSubscriptionManager();
+ public void testShowTestCheckBoxWithTestingMode() throws Throwable {
setPreference(PREFERENCE_PUT_TYPE_BOOL, TESTING_MODE, "true");
doReturn(true).when(mContext.getResources()).getBoolean(
eq(R.bool.show_separate_exercise_settings));
@@ -430,6 +419,7 @@
doReturn(new String[]{"0x111E:rat=gsm, emergency=true"}).when(mContext.getResources())
.getStringArray(eq(R.array.operator_defined_alert_range_strings));
CellBroadcastSettings settings = startActivity();
+ waitForMs(100);
TwoStatePreference exerciseTestCheckBox =
settings.mCellBroadcastSettingsFragment.findPreference(
@@ -438,28 +428,37 @@
settings.mCellBroadcastSettingsFragment.findPreference(
CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
- // received the ACTION_TESTING_MODE_CHANGED, show exerciseTestCheckBox &
- // operatorDefinedCheckBox
- Field fieldTestingModeChangedReceiver =
- CellBroadcastSettings.CellBroadcastSettingsFragment.class.getDeclaredField(
- "mTestingModeChangedReceiver");
- fieldTestingModeChangedReceiver.setAccessible(true);
- BroadcastReceiver broadcastReceiver =
- (BroadcastReceiver) fieldTestingModeChangedReceiver.get(
- settings.mCellBroadcastSettingsFragment);
- broadcastReceiver.onReceive(mContext, new Intent().setAction(ACTION_TESTING_MODE_CHANGED));
-
- waitForChange(() -> exerciseTestCheckBox.isVisible(), TEST_TIMEOUT_MILLIS);
assertTrue(exerciseTestCheckBox.isVisible());
- waitForChange(() -> operatorDefinedCheckBox.isVisible(), TEST_TIMEOUT_MILLIS);
assertTrue(operatorDefinedCheckBox.isVisible());
}
- private void setSubscriptionManager() {
- SubscriptionManager mockSubManager = mock(SubscriptionManager.class);
- injectSystemService(SubscriptionManager.class, mockSubManager);
- SubscriptionInfo mockSubInfo = mock(SubscriptionInfo.class);
- doReturn(mockSubInfo).when(mockSubManager).getActiveSubscriptionInfo(anyInt());
+ @Test
+ public void testShowTestCheckBox() throws Throwable {
+ setPreference(PREFERENCE_PUT_TYPE_BOOL, TESTING_MODE, "false");
+ doReturn(true).when(mContext.getResources()).getBoolean(
+ eq(R.bool.show_separate_exercise_settings));
+ doReturn(true).when(mContext.getResources()).getBoolean(
+ eq(R.bool.show_separate_operator_defined_settings));
+ doReturn(true).when(mContext.getResources()).getBoolean(
+ eq(R.bool.show_exercise_settings));
+ doReturn(true).when(mContext.getResources()).getBoolean(
+ eq(R.bool.show_operator_defined_settings));
+ doReturn(new String[]{"0x111D:rat=gsm, emergency=true"}).when(mContext.getResources())
+ .getStringArray(eq(R.array.exercise_alert_range_strings));
+ doReturn(new String[]{"0x111E:rat=gsm, emergency=true"}).when(mContext.getResources())
+ .getStringArray(eq(R.array.operator_defined_alert_range_strings));
+ CellBroadcastSettings settings = startActivity();
+ waitForMs(100);
+
+ TwoStatePreference exerciseTestCheckBox =
+ settings.mCellBroadcastSettingsFragment.findPreference(
+ CellBroadcastSettings.KEY_ENABLE_EXERCISE_ALERTS);
+ TwoStatePreference operatorDefinedCheckBox =
+ settings.mCellBroadcastSettingsFragment.findPreference(
+ CellBroadcastSettings.KEY_OPERATOR_DEFINED_ALERTS);
+
+ assertTrue(exerciseTestCheckBox.isVisible());
+ assertTrue(operatorDefinedCheckBox.isVisible());
}
private void setPreference(int putType, String key, String value) {