Added carrier customized ETWS test channel support

Added carrier customized ETWS test channel support and changed
channel 0x802 and 0x804 on Softbank to ETWS test channel so it's
disabled by default unless users enable it.

Test: Manual and unit tests
bug: 69145050
Merged-In: I39d48d08f7aac9f601eaba8291176bff58bc4069
Change-Id: I39d48d08f7aac9f601eaba8291176bff58bc4069
(cherry picked from commit 5eb334ffb44b27ab76703a28f391e5008be9ad96)
(cherry picked from commit ea2d2d27eed836974112dcc8b5109461f6689a3b)
diff --git a/res/values-mcc440-mnc20/config.xml b/res/values-mcc440-mnc20/config.xml
index bc6925b..fbe7edc 100644
--- a/res/values-mcc440-mnc20/config.xml
+++ b/res/values-mcc440-mnc20/config.xml
@@ -16,10 +16,10 @@
 
 <resources>
     <string-array name="additional_cbs_channels_strings" translatable="false">
-        <item>0xA800:type=earthquake, emergency=true</item>
-        <item>0xAFEE:type=tsunami, emergency=true</item>
+        <item>0xA800:type=etws_earthquake, emergency=true</item>
+        <item>0xAFEE:type=etws_tsunami, emergency=true</item>
         <item>0xAC00-0xAFED:type=other, emergency=true</item>
-        <item>0xA802:type=etws_default, emergency=true</item>
-        <item>0xA804:type=etws_default, emergency=true</item>
+        <item>0xA802:type=etws_test, emergency=true</item>
+        <item>0xA804:type=etws_test, emergency=true</item>
     </string-array>
 </resources>
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
index fe75c96..68eaf2d 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertAudio.java
@@ -420,11 +420,11 @@
 
                 // Load the tones based on type
                 switch (alertType) {
-                    case EARTHQUAKE:
+                    case ETWS_EARTHQUAKE:
                         setDataSourceFromResource(getResources(), mMediaPlayer,
                                 R.raw.etws_earthquake);
                         break;
-                    case TSUNAMI:
+                    case ETWS_TSUNAMI:
                         setDataSourceFromResource(getResources(), mMediaPlayer,
                                 R.raw.etws_tsunami);
                         break;
@@ -433,6 +433,7 @@
                                 R.raw.etws_other_disaster);
                         break;
                     case ETWS_DEFAULT:
+                    case ETWS_TEST:
                         setDataSourceFromResource(getResources(), mMediaPlayer,
                                 R.raw.etws_default);
                         break;
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index d80bff7..593a0b4 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -98,8 +98,9 @@
     public enum AlertType {
         CMAS_DEFAULT,
         ETWS_DEFAULT,
-        EARTHQUAKE,
-        TSUNAMI,
+        ETWS_EARTHQUAKE,
+        ETWS_TSUNAMI,
+        ETWS_TEST,
         AREA,
         OTHER
     }
@@ -440,6 +441,12 @@
                             // area info broadcasts are displayed in Settings status screen
                         }
                         return false;
+                    } else if (range.mAlertType == AlertType.ETWS_TEST) {
+                        return emergencyAlertEnabled
+                                && !forceDisableEtwsCmasTest
+                                && PreferenceManager.getDefaultSharedPreferences(this)
+                                .getBoolean(CellBroadcastSettings.KEY_ENABLE_ETWS_TEST_ALERTS,
+                                        false);
                     }
 
                     return emergencyAlertEnabled;
@@ -510,10 +517,13 @@
                 switch (warningType) {
                     case SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE:
                     case SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI:
-                        alertType = AlertType.EARTHQUAKE;
+                        alertType = AlertType.ETWS_EARTHQUAKE;
                         break;
                     case SmsCbEtwsInfo.ETWS_WARNING_TYPE_TSUNAMI:
-                        alertType = AlertType.TSUNAMI;
+                        alertType = AlertType.ETWS_TSUNAMI;
+                        break;
+                    case SmsCbEtwsInfo.ETWS_WARNING_TYPE_TEST_MESSAGE:
+                        alertType = AlertType.ETWS_TEST;
                         break;
                     case SmsCbEtwsInfo.ETWS_WARNING_TYPE_OTHER_EMERGENCY:
                         alertType = AlertType.OTHER;
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java b/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
index 9946ce9..05cb772 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastResources.java
@@ -304,10 +304,12 @@
                         switch (range.mAlertType) {
                             case CMAS_DEFAULT:
                                 return R.string.pws_other_message_identifiers;
-                            case EARTHQUAKE:
+                            case ETWS_EARTHQUAKE:
                                 return R.string.etws_earthquake_warning;
-                            case TSUNAMI:
+                            case ETWS_TSUNAMI:
                                 return R.string.etws_tsunami_warning;
+                            case ETWS_TEST:
+                                return R.string.etws_test_message;
                             case ETWS_DEFAULT:
                             case OTHER:
                                 return R.string.etws_other_emergency_type;
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManagerTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManagerTest.java
index 264ee3d..b86234f 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManagerTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManagerTest.java
@@ -53,11 +53,12 @@
     @SmallTest
     public void testGetCellBroadcastChannelRanges() throws Exception {
         putResources(R.array.additional_cbs_channels_strings, new String[]{
-                "12:type=earthquake, emergency=true",
-                "456:type=tsunami, emergency=true",
+                "12:type=etws_earthquake, emergency=true",
+                "456:type=etws_tsunami, emergency=true",
                 "0xAC00-0xAFED:type=other, emergency=false",
                 "54-60:emergency=true",
-                "100-200"
+                "100-200",
+                "0xA804:type=etws_test, emergency=true"
         });
 
         ArrayList<CellBroadcastChannelRange> list = CellBroadcastChannelManager.getInstance()
@@ -65,12 +66,12 @@
 
         assertEquals(12, list.get(0).mStartId);
         assertEquals(12, list.get(0).mEndId);
-        assertEquals(AlertType.EARTHQUAKE, list.get(0).mAlertType);
+        assertEquals(AlertType.ETWS_EARTHQUAKE, list.get(0).mAlertType);
         assertTrue(list.get(0).mIsEmergency);
 
         assertEquals(456, list.get(1).mStartId);
         assertEquals(456, list.get(1).mEndId);
-        assertEquals(AlertType.TSUNAMI, list.get(1).mAlertType);
+        assertEquals(AlertType.ETWS_TSUNAMI, list.get(1).mAlertType);
         assertTrue(list.get(1).mIsEmergency);
 
         assertEquals(0xAC00, list.get(2).mStartId);
@@ -87,5 +88,10 @@
         assertEquals(200, list.get(4).mEndId);
         assertEquals(AlertType.CMAS_DEFAULT, list.get(4).mAlertType);
         assertFalse(list.get(4).mIsEmergency);
+
+        assertEquals(0xA804, list.get(5).mStartId);
+        assertEquals(0xA804, list.get(5).mEndId);
+        assertEquals(AlertType.ETWS_TEST, list.get(5).mAlertType);
+        assertTrue(list.get(5).mIsEmergency);
     }
 }
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastSettingsTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastSettingsTest.java
index e4ea05f..f342a58 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastSettingsTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/CellBroadcastSettingsTest.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.FlakyTest;
 import android.support.test.runner.AndroidJUnit4;
 import android.support.test.uiautomator.UiDevice;
 
@@ -45,6 +46,7 @@
         mDevice = UiDevice.getInstance(mInstrumentation);
     }
 
+    @FlakyTest
     @Test
     public void testRotate_alertReminderDialogOpen_shouldNotCrash() {
         mInstrumentation.startActivitySync(createActivityIntent());