[automerger skipped] Import translations. DO NOT MERGE ANYWHERE am: d4363b8611 -s ours
am skip reason: contains skip directive
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/CellBroadcastReceiver/+/30595969
Change-Id: I50e3a39e41423afd98173115e7c8386c509075bd
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
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-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-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/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/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/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) {