diff options
Diffstat (limited to 'tests/testapp/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java')
-rw-r--r-- | tests/testapp/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/tests/testapp/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java b/tests/testapp/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java new file mode 100644 index 00000000..112db372 --- /dev/null +++ b/tests/testapp/src/com/android/cellbroadcastreceiver/tests/SendCdmaCmasMessages.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.cellbroadcastreceiver.tests; + +import android.Manifest; +import android.app.Activity; +import android.app.AppOpsManager; +import android.content.Intent; +import android.os.UserHandle; +import android.provider.Telephony; +import android.telephony.SmsCbCmasInfo; +import android.telephony.SmsCbLocation; +import android.telephony.SmsCbMessage; +import com.android.internal.telephony.PhoneConstants; +import com.android.internal.telephony.cdma.sms.SmsEnvelope; + +/** + * Send some test CDMA CMAS warning notifications. + */ +public class SendCdmaCmasMessages { + + private static final String TEST_TEXT = "This is a test CDMA cell broadcast message..." + + "678901234567890123456789012345678901234567890"; + + private static final String PRES_ALERT = + "THE PRESIDENT HAS ISSUED AN EMERGENCY ALERT. CHECK LOCAL MEDIA FOR MORE DETAILS"; + + private static final String EXTREME_ALERT = "FLASH FLOOD WARNING FOR SOUTH COCONINO COUNTY" + + " - NORTH CENTRAL ARIZONA UNTIL 415 PM MST"; + + private static final String SEVERE_ALERT = "SEVERE WEATHER WARNING FOR SOMERSET COUNTY" + + " - NEW JERSEY UNTIL 415 PM MST"; + + private static final String AMBER_ALERT = + "AMBER ALERT:Mountain View,CA VEH'07 Blue Honda Civic CA LIC 5ABC123"; + + private static final String MONTHLY_TEST_ALERT = "This is a test of the emergency alert system." + + " This is only a test. 89012345678901234567890"; + + private static final String IS91_TEXT = "IS91 SHORT MSG"; // max length 14 chars + + public static void testSendCmasPresAlert(Activity activity, int messageId) { + SmsCbMessage cbMessage = createCmasSmsMessage( + SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT, messageId, "en", + PRES_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_GEO, + SmsCbCmasInfo.CMAS_RESPONSE_TYPE_PREPARE, SmsCbCmasInfo.CMAS_SEVERITY_EXTREME, + SmsCbCmasInfo.CMAS_URGENCY_EXPECTED, SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY); + + Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); + intent.putExtra("message", cbMessage); + activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, + AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); + } + + public static void testSendCmasExtremeAlert(Activity activity, int messageId) { + SmsCbMessage cbMessage = createCmasSmsMessage( + SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT, messageId, "en", + EXTREME_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_MET, + SmsCbCmasInfo.CMAS_RESPONSE_TYPE_PREPARE, SmsCbCmasInfo.CMAS_SEVERITY_EXTREME, + SmsCbCmasInfo.CMAS_URGENCY_EXPECTED, SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED); + + Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); + intent.putExtra("message", cbMessage); + activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, + AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); + } + + public static void testSendCmasSevereAlert(Activity activity, int messageId) { + SmsCbMessage cbMessage = createCmasSmsMessage( + SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT, messageId, "en", + SEVERE_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_HEALTH, + SmsCbCmasInfo.CMAS_RESPONSE_TYPE_AVOID, SmsCbCmasInfo.CMAS_SEVERITY_SEVERE, + SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE, SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY); + + Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); + intent.putExtra("message", cbMessage); + activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, + AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); + } + + public static void testSendCmasAmberAlert(Activity activity, int messageId) { + SmsCbMessage cbMessage = createCmasSmsMessage( + SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY, messageId, "en", + AMBER_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_UNKNOWN, + SmsCbCmasInfo.CMAS_RESPONSE_TYPE_UNKNOWN, SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN, + SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN, SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN); + + Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); + intent.putExtra("message", cbMessage); + activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, + AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); + } + + public static void testSendCmasMonthlyTest(Activity activity, int messageId) { + SmsCbMessage cbMessage = createCmasSmsMessage( + SmsEnvelope.SERVICE_CATEGORY_CMAS_TEST_MESSAGE, messageId, "en", + MONTHLY_TEST_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_UNKNOWN, + SmsCbCmasInfo.CMAS_RESPONSE_TYPE_UNKNOWN, SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN, + SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN, SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN); + + Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); + intent.putExtra("message", cbMessage); + activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, + Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, + AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); + } + + /** + * Create a new SmsCbMessage for testing CDMA CMAS support. + * @param serviceCategory the CDMA service category + * @param messageId the 16-bit message identifier + * @param language message language code + * @param body message body + * @param cmasCategory CMAS category (or -1 to skip adding CMAS type 1 elements record) + * @param responseType CMAS response type + * @param severity CMAS severity + * @param urgency CMAS urgency + * @param certainty CMAS certainty + * @return the newly created SmsMessage object + */ + private static SmsCbMessage createCmasSmsMessage(int serviceCategory, int messageId, + String language, String body, int cmasCategory, int responseType, int severity, + int urgency, int certainty) { + int cmasMessageClass = serviceCategoryToCmasMessageClass(serviceCategory); + SmsCbCmasInfo cmasInfo = new SmsCbCmasInfo(cmasMessageClass, cmasCategory, responseType, + severity, urgency, certainty); + return new SmsCbMessage(SmsCbMessage.MESSAGE_FORMAT_3GPP2, + SmsCbMessage.GEOGRAPHICAL_SCOPE_PLMN_WIDE, messageId, new SmsCbLocation("123456"), + serviceCategory, language, body, SmsCbMessage.MESSAGE_PRIORITY_EMERGENCY, null, + cmasInfo); + } + + /** + * Convert CDMA service category to CMAS message class. Copied from {@code BearerData}. + * @param serviceCategory CDMA service category + * @return CMAS message class + */ + private static int serviceCategoryToCmasMessageClass(int serviceCategory) { + switch (serviceCategory) { + case SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT: + return SmsCbCmasInfo.CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT; + + case SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT: + return SmsCbCmasInfo.CMAS_CLASS_EXTREME_THREAT; + + case SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT: + return SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; + + case SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY: + return SmsCbCmasInfo.CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY; + + case SmsEnvelope.SERVICE_CATEGORY_CMAS_TEST_MESSAGE: + return SmsCbCmasInfo.CMAS_CLASS_REQUIRED_MONTHLY_TEST; + + default: + return SmsCbCmasInfo.CMAS_CLASS_UNKNOWN; + } + } +}
\ No newline at end of file |