[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) {