100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby/* 200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Copyright (C) 2012 The Android Open Source Project 300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * 400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * you may not use this file except in compliance with the License. 600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * You may obtain a copy of the License at 700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * 800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * 1000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Unless required by applicable law or agreed to in writing, software 1100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 1200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * See the License for the specific language governing permissions and 1400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * limitations under the License. 1500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby */ 1600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 1700b87064abfb9d254fbbf72110643d2e626365e6Jake Hambypackage com.android.cellbroadcastreceiver.tests; 1800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 1900b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.app.Activity; 2000b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.content.Intent; 2100b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.os.Parcel; 2200b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.provider.Telephony; 2300b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.telephony.SmsCbCmasInfo; 2400b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.telephony.SmsCbLocation; 2500b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.telephony.SmsCbMessage; 2600b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.test.AndroidTestCase; 2700b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport android.util.Log; 2800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 2900b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.telephony.GsmAlphabet; 3000b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.telephony.cdma.sms.BearerData; 3100b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.telephony.cdma.sms.CdmaSmsAddress; 3200b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.telephony.cdma.sms.SmsEnvelope; 3300b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.telephony.cdma.sms.UserData; 3400b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport com.android.internal.util.BitwiseOutputStream; 3500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 3600b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport java.util.Arrays; 3700b87064abfb9d254fbbf72110643d2e626365e6Jake Hambyimport java.util.Random; 3800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 3900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby/** 4000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Send some test CDMA CMAS warning notifications. 4100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby */ 4200b87064abfb9d254fbbf72110643d2e626365e6Jake Hambypublic class SendCdmaCmasMessages { 4300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 4400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String TEST_TEXT = "This is a test CDMA cell broadcast message..." 4500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby + "678901234567890123456789012345678901234567890"; 4600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 4700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String PRES_ALERT = 4800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby "THE PRESIDENT HAS ISSUED AN EMERGENCY ALERT. CHECK LOCAL MEDIA FOR MORE DETAILS"; 4900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 5000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String EXTREME_ALERT = "FLASH FLOOD WARNING FOR SOUTH COCONINO COUNTY" 5100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby + " - NORTH CENTRAL ARIZONA UNTIL 415 PM MST"; 5200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 5300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String SEVERE_ALERT = "SEVERE WEATHER WARNING FOR SOMERSET COUNTY" 5400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby + " - NEW JERSEY UNTIL 415 PM MST"; 5500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 5600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String AMBER_ALERT = 5700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby "AMBER ALERT:Mountain View,CA VEH'07 Blue Honda Civic CA LIC 5ABC123"; 5800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 5900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String MONTHLY_TEST_ALERT = "This is a test of the emergency alert system." 6000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby + " This is only a test. 89012345678901234567890"; 6100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 6200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static final String IS91_TEXT = "IS91 SHORT MSG"; // max length 14 chars 6300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 6457273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby public static void testSendCmasPresAlert(Activity activity, int messageId) { 6500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage cbMessage = createCmasSmsMessage( 6657273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT, messageId, "en", 6700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby PRES_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_GEO, 6800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_RESPONSE_TYPE_PREPARE, SmsCbCmasInfo.CMAS_SEVERITY_EXTREME, 6900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_URGENCY_EXPECTED, SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY); 7000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 7100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 7200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby intent.putExtra("message", cbMessage); 7300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); 7400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 7500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 7657273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby public static void testSendCmasExtremeAlert(Activity activity, int messageId) { 7700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage cbMessage = createCmasSmsMessage( 7857273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT, messageId, "en", 7900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby EXTREME_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_MET, 8000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_RESPONSE_TYPE_PREPARE, SmsCbCmasInfo.CMAS_SEVERITY_EXTREME, 8100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_URGENCY_EXPECTED, SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED); 8200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 8300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 8400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby intent.putExtra("message", cbMessage); 8500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); 8600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 8700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 8857273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby public static void testSendCmasSevereAlert(Activity activity, int messageId) { 8900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage cbMessage = createCmasSmsMessage( 9057273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT, messageId, "en", 9100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SEVERE_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_HEALTH, 9200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_RESPONSE_TYPE_AVOID, SmsCbCmasInfo.CMAS_SEVERITY_SEVERE, 9300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE, SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY); 9400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 9500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 9600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby intent.putExtra("message", cbMessage); 9700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); 9800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 9900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 10057273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby public static void testSendCmasAmberAlert(Activity activity, int messageId) { 10100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage cbMessage = createCmasSmsMessage( 10257273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY, messageId, "en", 10300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby AMBER_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_UNKNOWN, 10400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_RESPONSE_TYPE_UNKNOWN, SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN, 10500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN, SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN); 10600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 10700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 10800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby intent.putExtra("message", cbMessage); 10900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); 11000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 11100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 11257273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby public static void testSendCmasMonthlyTest(Activity activity, int messageId) { 11300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage cbMessage = createCmasSmsMessage( 11457273ebfa13f96bf5aba9902b70e2b179fec9e4cJake Hamby SmsEnvelope.SERVICE_CATEGORY_CMAS_TEST_MESSAGE, messageId, "en", 11500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby MONTHLY_TEST_ALERT, SmsCbCmasInfo.CMAS_CATEGORY_UNKNOWN, 11600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_RESPONSE_TYPE_UNKNOWN, SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN, 11700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN, SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN); 11800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 11900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby Intent intent = new Intent(Telephony.Sms.Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 12000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby intent.putExtra("message", cbMessage); 12100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby activity.sendOrderedBroadcast(intent, "android.permission.RECEIVE_SMS"); 12200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 12300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 12400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby /** 12500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Create a new SmsCbMessage for testing CDMA CMAS support. 12600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param serviceCategory the CDMA service category 12700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param messageId the 16-bit message identifier 12800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param language message language code 12900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param body message body 13000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param cmasCategory CMAS category (or -1 to skip adding CMAS type 1 elements record) 13100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param responseType CMAS response type 13200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param severity CMAS severity 13300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param urgency CMAS urgency 13400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param certainty CMAS certainty 13500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @return the newly created SmsMessage object 13600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby */ 13700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static SmsCbMessage createCmasSmsMessage(int serviceCategory, int messageId, 13800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby String language, String body, int cmasCategory, int responseType, int severity, 13900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby int urgency, int certainty) { 14000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby int cmasMessageClass = serviceCategoryToCmasMessageClass(serviceCategory); 14100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbCmasInfo cmasInfo = new SmsCbCmasInfo(cmasMessageClass, cmasCategory, responseType, 14200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby severity, urgency, certainty); 14300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return new SmsCbMessage(SmsCbMessage.MESSAGE_FORMAT_3GPP2, 14400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby SmsCbMessage.GEOGRAPHICAL_SCOPE_PLMN_WIDE, messageId, new SmsCbLocation("123456"), 14500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby serviceCategory, language, body, SmsCbMessage.MESSAGE_PRIORITY_EMERGENCY, null, 14600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby cmasInfo); 14700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 14800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 14900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby /** 15000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * Convert CDMA service category to CMAS message class. Copied from {@code BearerData}. 15100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @param serviceCategory CDMA service category 15200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby * @return CMAS message class 15300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby */ 15400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby private static int serviceCategoryToCmasMessageClass(int serviceCategory) { 15500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby switch (serviceCategory) { 15600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby case SmsEnvelope.SERVICE_CATEGORY_CMAS_PRESIDENTIAL_LEVEL_ALERT: 15700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT; 15800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 15900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby case SmsEnvelope.SERVICE_CATEGORY_CMAS_EXTREME_THREAT: 16000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_EXTREME_THREAT; 16100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 16200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby case SmsEnvelope.SERVICE_CATEGORY_CMAS_SEVERE_THREAT: 16300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 16400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 16500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby case SmsEnvelope.SERVICE_CATEGORY_CMAS_CHILD_ABDUCTION_EMERGENCY: 16600b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY; 16700b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 16800b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby case SmsEnvelope.SERVICE_CATEGORY_CMAS_TEST_MESSAGE: 16900b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_REQUIRED_MONTHLY_TEST; 17000b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby 17100b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby default: 17200b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_UNKNOWN; 17300b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 17400b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby } 17500b87064abfb9d254fbbf72110643d2e626365e6Jake Hamby} 176