diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 30b27781127b8..a9a7116541372 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -392,7 +392,7 @@
This indicates that a work profile has been deleted. [CHAR LIMIT=NONE]-->
Your work profile is no longer available on this device.
-
Device is managed
credit card
+
+ Stay calm and seek shelter nearby.
+
+
+ Evacuate immediately from coastal regions and riverside areas to a safer place such as high ground.
+
+
+ Stay calm and seek shelter nearby.
+
+
+ Emergency messages test
+
+
+
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index f6f29d9d36358..6acccd1a71e43 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2919,4 +2919,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSmsCbMessage.java b/telephony/java/com/android/internal/telephony/gsm/GsmSmsCbMessage.java
index 15ed810988134..6bf22a05beec9 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmSmsCbMessage.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmSmsCbMessage.java
@@ -16,10 +16,19 @@
package com.android.internal.telephony.gsm;
+import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE;
+import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI;
+import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_OTHER_EMERGENCY;
+import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_TEST_MESSAGE;
+import static android.telephony.SmsCbEtwsInfo.ETWS_WARNING_TYPE_TSUNAMI;
+
+import android.content.Context;
+import android.content.res.Resources;
import android.telephony.SmsCbLocation;
import android.telephony.SmsCbMessage;
import android.util.Pair;
+import com.android.internal.R;
import com.android.internal.telephony.GsmAlphabet;
import com.android.internal.telephony.SmsConstants;
@@ -54,24 +63,50 @@ public class GsmSmsCbMessage {
/** Utility class with only static methods. */
private GsmSmsCbMessage() { }
+ /**
+ * Get built-in ETWS primary messages by category. ETWS primary message does not contain text,
+ * so we have to show the pre-built messages to the user.
+ *
+ * @param context Device context
+ * @param category ETWS message category defined in SmsCbConstants
+ * @return ETWS text message in string. Return an empty string if no match.
+ */
+ private static String getEtwsPrimaryMessage(Context context, int category) {
+ final Resources r = context.getResources();
+ switch (category) {
+ case ETWS_WARNING_TYPE_EARTHQUAKE:
+ return r.getString(R.string.etws_primary_default_message_earthquake);
+ case ETWS_WARNING_TYPE_TSUNAMI:
+ return r.getString(R.string.etws_primary_default_message_tsunami);
+ case ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI:
+ return r.getString(R.string.etws_primary_default_message_earthquake_and_tsunami);
+ case ETWS_WARNING_TYPE_TEST_MESSAGE:
+ return r.getString(R.string.etws_primary_default_message_test);
+ case ETWS_WARNING_TYPE_OTHER_EMERGENCY:
+ return r.getString(R.string.etws_primary_default_message_others);
+ default:
+ return "";
+ }
+ }
+
/**
* Create a new SmsCbMessage object from a header object plus one or more received PDUs.
*
* @param pdus PDU bytes
*/
- public static SmsCbMessage createSmsCbMessage(SmsCbHeader header, SmsCbLocation location,
- byte[][] pdus) throws IllegalArgumentException {
+ public static SmsCbMessage createSmsCbMessage(Context context, SmsCbHeader header,
+ SmsCbLocation location, byte[][] pdus)
+ throws IllegalArgumentException {
if (header.isEtwsPrimaryNotification()) {
// ETSI TS 23.041 ETWS Primary Notification message
// ETWS primary message only contains 4 fields including serial number,
// message identifier, warning type, and warning security information.
- // There is no field for the content/text. We hardcode "ETWS" in the
- // text body so the user won't see an empty dialog without any text.
- return new SmsCbMessage(SmsCbMessage.MESSAGE_FORMAT_3GPP,
- header.getGeographicalScope(), header.getSerialNumber(),
- location, header.getServiceCategory(),
- null, "ETWS", SmsCbMessage.MESSAGE_PRIORITY_EMERGENCY,
- header.getEtwsInfo(), header.getCmasInfo());
+ // There is no field for the content/text so we get the text from the resources.
+ return new SmsCbMessage(SmsCbMessage.MESSAGE_FORMAT_3GPP, header.getGeographicalScope(),
+ header.getSerialNumber(), location, header.getServiceCategory(), null,
+ getEtwsPrimaryMessage(context, header.getEtwsInfo().getWarningType()),
+ SmsCbMessage.MESSAGE_PRIORITY_EMERGENCY, header.getEtwsInfo(),
+ header.getCmasInfo());
} else {
String language = null;
StringBuilder sb = new StringBuilder();
@@ -90,19 +125,6 @@ public class GsmSmsCbMessage {
}
}
- /**
- * Create a new SmsCbMessage object from one or more received PDUs. This is used by some
- * CellBroadcastReceiver test cases, because SmsCbHeader is now package local.
- *
- * @param location the location (geographical scope) for the message
- * @param pdus PDU bytes
- */
- public static SmsCbMessage createSmsCbMessage(SmsCbLocation location, byte[][] pdus)
- throws IllegalArgumentException {
- SmsCbHeader header = new SmsCbHeader(pdus[0]);
- return createSmsCbMessage(header, location, pdus);
- }
-
/**
* Parse and unpack the body text according to the encoding in the DCS.
* After completing successfully this method will have assigned the body