Show alert dialog with notification for Telefonica channel 50

Add config "dialog_with_notification" per channel and apply to Telefonica
channel 50 for LATAM

Bug: 202638978
Test: Manual
Change-Id: I7ea2ad7d0d81d9a2c317c6a674b27a06539ca0ae
diff --git a/res/values-mcc334-mnc03/config.xml b/res/values-mcc334-mnc03/config.xml
index 1092325..667abcd 100644
--- a/res/values-mcc334-mnc03/config.xml
+++ b/res/values-mcc334-mnc03/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
     </string-array>
     <!-- Channel 919, 6400, and 4396-4399 -->
     <string-array name="additional_cbs_channels_strings" translatable="false">
diff --git a/res/values-mcc334-mnc030 b/res/values-mcc334-mnc030
new file mode 120000
index 0000000..f13e2df
--- /dev/null
+++ b/res/values-mcc334-mnc030
@@ -0,0 +1 @@
+values-mcc334-mnc03
\ No newline at end of file
diff --git a/res/values-mcc706-mnc04/config.xml b/res/values-mcc706-mnc04/config.xml
index 2278b09..c941edf 100644
--- a/res/values-mcc706-mnc04/config.xml
+++ b/res/values-mcc706-mnc04/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
 </resources>
diff --git a/res/values-mcc712-mnc04/config.xml b/res/values-mcc712-mnc04/config.xml
index 2278b09..c941edf 100644
--- a/res/values-mcc712-mnc04/config.xml
+++ b/res/values-mcc712-mnc04/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
 </resources>
diff --git a/res/values-mcc716-mnc06/config.xml b/res/values-mcc716-mnc06/config.xml
index f1f2111..f540844 100644
--- a/res/values-mcc716-mnc06/config.xml
+++ b/res/values-mcc716-mnc06/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 519, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0207:rat=gsm, emergency=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
diff --git a/res/values-mcc722-mnc07/config.xml b/res/values-mcc722-mnc07/config.xml
index 821fb2f..c1f2f2a 100644
--- a/res/values-mcc722-mnc07/config.xml
+++ b/res/values-mcc722-mnc07/config.xml
@@ -19,6 +19,6 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x032:rat=gsm, emergency=true</item>
+        <item>0x032:rat=gsm, emergency=true, dialog_with_notification=true</item>
     </string-array>
 </resources>
diff --git a/res/values-mcc730-mnc02/config.xml b/res/values-mcc730-mnc02/config.xml
index f1e5611..73b13d7 100644
--- a/res/values-mcc730-mnc02/config.xml
+++ b/res/values-mcc730-mnc02/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 920 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0398:rat=gsm, emergency=true</item>
     </string-array>
 </resources>
diff --git a/res/values-mcc732-mnc123/config.xml b/res/values-mcc732-mnc123/config.xml
index 24eea62..61a9319 100644
--- a/res/values-mcc732-mnc123/config.xml
+++ b/res/values-mcc732-mnc123/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
     </string-array>
     <!-- Channel 919 -->
     <string-array name="additional_cbs_channels_strings" translatable="false">
diff --git a/res/values-mcc734-mnc04/config.xml b/res/values-mcc734-mnc04/config.xml
index 3243649..67e1546 100644
--- a/res/values-mcc734-mnc04/config.xml
+++ b/res/values-mcc734-mnc04/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
 </resources>
diff --git a/res/values-mcc740-mnc00/config.xml b/res/values-mcc740-mnc00/config.xml
index 5bb3d21..1bd641d 100644
--- a/res/values-mcc740-mnc00/config.xml
+++ b/res/values-mcc740-mnc00/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 519, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0207:rat=gsm, emergency=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
diff --git a/res/values-mcc748-mnc07/config.xml b/res/values-mcc748-mnc07/config.xml
index 3243649..67e1546 100644
--- a/res/values-mcc748-mnc07/config.xml
+++ b/res/values-mcc748-mnc07/config.xml
@@ -19,7 +19,7 @@
     <bool name="emergency_alerts_enabled_default">false</bool>
     <!-- 50, 919 -->
     <string-array name="emergency_alerts_channels_range_strings" translatable="false">
-        <item>0x0032:rat=gsm, emergency=true</item>
+        <item>0x0032:rat=gsm, emergency=true, dialog_with_notification=true</item>
         <item>0x0397:rat=gsm, emergency=true</item>
     </string-array>
 </resources>
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
index f1b83c4..b5edce2 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastAlertService.java
@@ -421,12 +421,18 @@
             // start alert sound / vibration / TTS and display full-screen alert
             openEmergencyAlertNotification(cbm);
             Resources res = CellBroadcastSettings.getResources(mContext, cbm.getSubscriptionId());
+
+            CellBroadcastChannelRange range = channelManager
+                    .getCellBroadcastChannelRangeFromMessage(cbm);
+
             // KR carriers mandate to always show notifications along with alert dialog.
             if (res.getBoolean(R.bool.show_alert_dialog_with_notification) ||
                     // to support emergency alert on companion devices use flag
                     // show_notification_if_connected_to_companion_devices instead.
                     (res.getBoolean(R.bool.show_notification_if_connected_to_companion_devices)
-                            && isConnectedToCompanionDevices())) {
+                            && isConnectedToCompanionDevices())
+                    // show dialog and notification for specific channel
+                    || (range != null && range.mDisplayDialogWithNotification)) {
                 // add notification to the bar by passing the list of unread non-emergency
                 // cell broadcast messages. The notification should be of LOW_IMPORTANCE if the
                 // notification is shown together with full-screen dialog.
diff --git a/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManager.java b/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManager.java
index 1873e92..a56cd0a 100644
--- a/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManager.java
+++ b/src/com/android/cellbroadcastreceiver/CellBroadcastChannelManager.java
@@ -116,7 +116,8 @@
         private static final String KEY_DEBUG_BUILD_ONLY = "debug_build";
         /** Define the ISO-639-1 language code associated with the alert message. */
         private static final String KEY_LANGUAGE_CODE = "language";
-
+        /** Define whether to display dialog and notification */
+        private static final String KEY_DIALOG_WITH_NOTIFICATION = "dialog_with_notification";
 
         /**
          * Defines whether the channel needs language filter or not. True indicates that the alert
@@ -163,6 +164,8 @@
         public boolean mIsDebugBuildOnly = false;
         // This is used to override dialog title language
         public String mLanguageCode;
+        // Display both ways dialog and notification
+        public boolean mDisplayDialogWithNotification = false;
 
         public CellBroadcastChannelRange(Context context, int subId, String channelRange) {
             mAlertType = AlertType.DEFAULT;
@@ -277,7 +280,11 @@
                             case KEY_LANGUAGE_CODE:
                                 mLanguageCode = value;
                                 break;
-
+                            case KEY_DIALOG_WITH_NOTIFICATION:
+                                if (value.equalsIgnoreCase("true")) {
+                                    mDisplayDialogWithNotification = true;
+                                }
+                                break;
                         }
                     }
                 }
@@ -312,7 +319,8 @@
                     + mAlwaysOn + ",ScreenOnDuration=" + mScreenOnDuration + ", displayIcon="
                     + mDisplayIcon + "dismissOnOutsideTouch=" + mDismissOnOutsideTouch
                     + ", mIsDebugBuildOnly =" + mIsDebugBuildOnly
-                    + ", languageCode=" + mLanguageCode + "]";
+                    + ", languageCode=" + mLanguageCode
+                    + ", mDisplayDialogWithNotification=" + mDisplayDialogWithNotification + "]";
         }
     }
 
diff --git a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastChannelManagerTest.java b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastChannelManagerTest.java
index bca39f6..cfd58fa 100644
--- a/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastChannelManagerTest.java
+++ b/tests/unit/src/com/android/cellbroadcastreceiver/unit/CellBroadcastChannelManagerTest.java
@@ -60,7 +60,8 @@
                         "456:type=etws_tsunami, emergency=true, alert_duration=60000, "
                                 + "scope=domestic", "0xAC00-0xAFED:type=other, emergency=false, "
                         + "override_dnd=true, scope=carrier", "54-60:emergency=true, "
-                        + "testing_mode=true", "100-200", "0xA804:type=test, "
+                        + "testing_mode=true, " + "dialog_with_notification=true",
+                        "100-200", "0xA804:type=test, "
                         + "emergency=true, exclude_from_sms_inbox=true, vibration=0|350|250|350",
                         "0x111E:debug_build=true"});
 
@@ -79,6 +80,7 @@
         assertFalse(list.get(0).mOverrideDnd);
         assertTrue(list.get(0).mWriteToSmsInbox);
         assertFalse(list.get(0).mTestMode);
+        assertFalse(list.get(0).mDisplayDialogWithNotification);
 
         assertEquals(456, list.get(1).mStartId);
         assertEquals(456, list.get(1).mEndId);
@@ -90,6 +92,7 @@
         assertTrue(list.get(1).mWriteToSmsInbox);
         assertFalse(list.get(1).mTestMode);
         assertEquals(60000, list.get(1).mAlertDuration);
+        assertFalse(list.get(1).mDisplayDialogWithNotification);
 
         assertEquals(0xAC00, list.get(2).mStartId);
         assertEquals(0xAFED, list.get(2).mEndId);
@@ -101,6 +104,7 @@
         assertTrue(list.get(2).mWriteToSmsInbox);
         assertFalse(list.get(2).mTestMode);
         assertEquals(list.get(2).mScope, CellBroadcastChannelRange.SCOPE_CARRIER);
+        assertFalse(list.get(2).mDisplayDialogWithNotification);
 
         assertEquals(54, list.get(3).mStartId);
         assertEquals(60, list.get(3).mEndId);
@@ -111,6 +115,7 @@
         assertFalse(list.get(3).mOverrideDnd);
         assertTrue(list.get(3).mWriteToSmsInbox);
         assertTrue(list.get(3).mTestMode);
+        assertTrue(list.get(3).mDisplayDialogWithNotification);
 
         assertEquals(100, list.get(4).mStartId);
         assertEquals(200, list.get(4).mEndId);
@@ -121,6 +126,7 @@
         assertFalse(list.get(4).mOverrideDnd);
         assertTrue(list.get(4).mWriteToSmsInbox);
         assertFalse(list.get(4).mTestMode);
+        assertFalse(list.get(4).mDisplayDialogWithNotification);
 
         assertEquals(0xA804, list.get(5).mStartId);
         assertEquals(0xA804, list.get(5).mEndId);
@@ -133,6 +139,7 @@
         assertFalse(list.get(5).mTestMode);
         assertTrue(Arrays.equals(new int[]{0, 350, 250, 350}, list.get(5).mVibrationPattern));
         assertNotEquals(list.get(4).toString(), list.get(5).toString());
+        assertFalse(list.get(5).mDisplayDialogWithNotification);
 
         assertEquals(6, list.size());
     }