Snap for 4657601 from 2bc33808b8bf9d921ffbf9f437e8c605b8fb86e0 to oc-m4-release

Change-Id: I38e12162d9d25d0dcaa7787b787ce31ba17dc72f
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());