1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cellbroadcastreceiver.tests; 18 19 import android.Manifest; 20 import android.app.Activity; 21 import android.app.AppOpsManager; 22 import android.content.Intent; 23 import android.os.UserHandle; 24 import android.provider.Telephony.Sms.Intents; 25 import android.telephony.SmsCbLocation; 26 import android.telephony.SmsCbMessage; 27 import android.util.Log; 28 import com.android.internal.telephony.PhoneConstants; 29 30 import com.android.internal.telephony.EncodeException; 31 import com.android.internal.telephony.GsmAlphabet; 32 import com.android.internal.telephony.gsm.GsmSmsCbMessage; 33 import com.android.internal.telephony.gsm.SmsCbConstants; 34 import com.android.internal.telephony.uicc.IccUtils; 35 36 import java.io.UnsupportedEncodingException; 37 38 /** 39 * Send test messages. 40 */ 41 public class SendTestMessages { 42 43 private static String TAG = "SendTestMessages"; 44 45 private static final int DCS_7BIT_ENGLISH = 0x01; 46 private static final int DCS_16BIT_UCS2 = 0x48; 47 48 /* ETWS Test message including header */ 49 private static final byte[] etwsMessageNormal = IccUtils.hexStringToBytes("000011001101" + 50 "EA305BAE57CE770C531790E85C716CBF3044573065B930675730" + 51 "9707767A751F30025F37304463FA308C306B5099304830664E0B30553044FF086C178C615E81FF09" + 52 "0000000000000000000000000000"); 53 54 private static final byte[] etwsMessageCancel = IccUtils.hexStringToBytes("000011001101" + 55 "EA305148307B3069002800310030003A0035" + 56 "00320029306E7DCA602557309707901F5831309253D66D883057307E3059FF086C178C615E81FF09" + 57 "00000000000000000000000000000000000000000000"); 58 59 private static final byte[] etwsMessageTest = IccUtils.hexStringToBytes("000011031101" + 60 "EA305BAE57CE770C531790E85C716CBF3044" + 61 "573065B9306757309707300263FA308C306B5099304830664E0B30553044FF086C178C615E81FF09" + 62 "00000000000000000000000000000000000000000000"); 63 64 private static final byte[] gsm7BitTest = { 65 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x40, (byte)0x11, (byte)0x41, 66 (byte)0xD0, (byte)0x71, (byte)0xDA, (byte)0x04, (byte)0x91, (byte)0xCB, (byte)0xE6, 67 (byte)0x70, (byte)0x9D, (byte)0x4D, (byte)0x07, (byte)0x85, (byte)0xD9, (byte)0x70, 68 (byte)0x74, (byte)0x58, (byte)0x5C, (byte)0xA6, (byte)0x83, (byte)0xDA, (byte)0xE5, 69 (byte)0xF9, (byte)0x3C, (byte)0x7C, (byte)0x2E, (byte)0x83, (byte)0xEE, (byte)0x69, 70 (byte)0x3A, (byte)0x1A, (byte)0x34, (byte)0x0E, (byte)0xCB, (byte)0xE5, (byte)0xE9, 71 (byte)0xF0, (byte)0xB9, (byte)0x0C, (byte)0x92, (byte)0x97, (byte)0xE9, (byte)0x75, 72 (byte)0xB9, (byte)0x1B, (byte)0x04, (byte)0x0F, (byte)0x93, (byte)0xC9, (byte)0x69, 73 (byte)0xF7, (byte)0xB9, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 74 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 75 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 76 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 77 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00 78 }; 79 80 private static final byte[] gsm7BitTestUmts = { 81 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x40, 82 83 (byte)0x01, 84 85 (byte)0x41, (byte)0xD0, (byte)0x71, (byte)0xDA, (byte)0x04, (byte)0x91, 86 (byte)0xCB, (byte)0xE6, (byte)0x70, (byte)0x9D, (byte)0x4D, (byte)0x07, 87 (byte)0x85, (byte)0xD9, (byte)0x70, (byte)0x74, (byte)0x58, (byte)0x5C, 88 (byte)0xA6, (byte)0x83, (byte)0xDA, (byte)0xE5, (byte)0xF9, (byte)0x3C, 89 (byte)0x7C, (byte)0x2E, (byte)0x83, (byte)0xEE, (byte)0x69, (byte)0x3A, 90 (byte)0x1A, (byte)0x34, (byte)0x0E, (byte)0xCB, (byte)0xE5, (byte)0xE9, 91 (byte)0xF0, (byte)0xB9, (byte)0x0C, (byte)0x92, (byte)0x97, (byte)0xE9, 92 (byte)0x75, (byte)0xB9, (byte)0x1B, (byte)0x04, (byte)0x0F, (byte)0x93, 93 (byte)0xC9, (byte)0x69, (byte)0xF7, (byte)0xB9, (byte)0xD1, (byte)0x68, 94 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 95 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 96 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 97 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 98 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00, 99 100 (byte)0x34 101 }; 102 103 private static final byte[] gsm7BitTestMultipageUmts = { 104 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x40, 105 106 (byte)0x02, 107 108 (byte)0xC6, (byte)0xB4, (byte)0x7C, (byte)0x4E, (byte)0x07, (byte)0xC1, 109 (byte)0xC3, (byte)0xE7, (byte)0xF2, (byte)0xAA, (byte)0xD1, (byte)0x68, 110 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 111 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 112 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 113 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 114 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, 115 (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, 116 (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, 117 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 118 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 119 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 120 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 121 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00, 122 123 (byte)0x0A, 124 125 (byte)0xD3, (byte)0xF2, (byte)0xF8, (byte)0xED, (byte)0x26, (byte)0x83, 126 (byte)0xE0, (byte)0xE1, (byte)0x73, (byte)0xB9, (byte)0xD1, (byte)0x68, 127 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 128 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 129 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 130 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 131 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, 132 (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, 133 (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, 134 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 135 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 136 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 137 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 138 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00, 139 140 (byte)0x0A 141 }; 142 143 private static final byte[] gsm7BitTestMultipage1 = { 144 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x40, 145 (byte)0xC6, (byte)0xB4, (byte)0x7C, (byte)0x4E, (byte)0x07, (byte)0xC1, 146 (byte)0xC3, (byte)0xE7, (byte)0xF2, (byte)0xAA, (byte)0xD1, (byte)0x68, 147 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 148 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 149 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 150 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 151 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, 152 (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, 153 (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, 154 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 155 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 156 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 157 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 158 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00 159 }; 160 161 private static final byte[] gsm7BitTestMultipage2 = { 162 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x40, 163 (byte)0xD3, (byte)0xF2, (byte)0xF8, (byte)0xED, (byte)0x26, (byte)0x83, 164 (byte)0xE0, (byte)0xE1, (byte)0x73, (byte)0xB9, (byte)0xD1, (byte)0x68, 165 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 166 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 167 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 168 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 169 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, 170 (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, 171 (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, 172 (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 173 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 174 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 175 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 176 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00 177 }; 178 179 private static final byte[] gsm7BitTestNoPadding = { 180 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x40, (byte)0x11, (byte)0x41, 181 (byte)0xD0, (byte)0x71, (byte)0xDA, (byte)0x04, (byte)0x91, (byte)0xCB, (byte)0xE6, 182 (byte)0x70, (byte)0x9D, (byte)0x4D, (byte)0x07, (byte)0x85, (byte)0xD9, (byte)0x70, 183 (byte)0x74, (byte)0x58, (byte)0x5C, (byte)0xA6, (byte)0x83, (byte)0xDA, (byte)0xE5, 184 (byte)0xF9, (byte)0x3C, (byte)0x7C, (byte)0x2E, (byte)0x83, (byte)0xC4, (byte)0xE5, 185 (byte)0xB4, (byte)0xFB, (byte)0x0C, (byte)0x2A, (byte)0xE3, (byte)0xC3, (byte)0x63, 186 (byte)0x3A, (byte)0x3B, (byte)0x0F, (byte)0xCA, (byte)0xCD, (byte)0x40, (byte)0x63, 187 (byte)0x74, (byte)0x58, (byte)0x1E, (byte)0x1E, (byte)0xD3, (byte)0xCB, (byte)0xF2, 188 (byte)0x39, (byte)0x88, (byte)0xFD, (byte)0x76, (byte)0x9F, (byte)0x59, (byte)0xA0, 189 (byte)0x76, (byte)0x39, (byte)0xEC, (byte)0x4E, (byte)0xBB, (byte)0xCF, (byte)0x20, 190 (byte)0x3A, (byte)0xBA, (byte)0x2C, (byte)0x2F, (byte)0x83, (byte)0xD2, (byte)0x73, 191 (byte)0x90, (byte)0xFB, (byte)0x0D, (byte)0x82, (byte)0x87, (byte)0xC9, (byte)0xE4, 192 (byte)0xB4, (byte)0xFB, (byte)0x1C, (byte)0x02 193 }; 194 195 private static final byte[] gsm7BitTestNoPaddingUmts = { 196 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x40, 197 198 (byte)0x01, 199 200 (byte)0x41, (byte)0xD0, (byte)0x71, (byte)0xDA, (byte)0x04, (byte)0x91, 201 (byte)0xCB, (byte)0xE6, (byte)0x70, (byte)0x9D, (byte)0x4D, (byte)0x07, 202 (byte)0x85, (byte)0xD9, (byte)0x70, (byte)0x74, (byte)0x58, (byte)0x5C, 203 (byte)0xA6, (byte)0x83, (byte)0xDA, (byte)0xE5, (byte)0xF9, (byte)0x3C, 204 (byte)0x7C, (byte)0x2E, (byte)0x83, (byte)0xC4, (byte)0xE5, (byte)0xB4, 205 (byte)0xFB, (byte)0x0C, (byte)0x2A, (byte)0xE3, (byte)0xC3, (byte)0x63, 206 (byte)0x3A, (byte)0x3B, (byte)0x0F, (byte)0xCA, (byte)0xCD, (byte)0x40, 207 (byte)0x63, (byte)0x74, (byte)0x58, (byte)0x1E, (byte)0x1E, (byte)0xD3, 208 (byte)0xCB, (byte)0xF2, (byte)0x39, (byte)0x88, (byte)0xFD, (byte)0x76, 209 (byte)0x9F, (byte)0x59, (byte)0xA0, (byte)0x76, (byte)0x39, (byte)0xEC, 210 (byte)0x4E, (byte)0xBB, (byte)0xCF, (byte)0x20, (byte)0x3A, (byte)0xBA, 211 (byte)0x2C, (byte)0x2F, (byte)0x83, (byte)0xD2, (byte)0x73, (byte)0x90, 212 (byte)0xFB, (byte)0x0D, (byte)0x82, (byte)0x87, (byte)0xC9, (byte)0xE4, 213 (byte)0xB4, (byte)0xFB, (byte)0x1C, (byte)0x02, 214 215 (byte)0x52 216 }; 217 218 private static final byte[] gsm7BitTestWithLanguage = { 219 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x04, (byte)0x11, (byte)0x41, 220 (byte)0xD0, (byte)0x71, (byte)0xDA, (byte)0x04, (byte)0x91, (byte)0xCB, (byte)0xE6, 221 (byte)0x70, (byte)0x9D, (byte)0x4D, (byte)0x07, (byte)0x85, (byte)0xD9, (byte)0x70, 222 (byte)0x74, (byte)0x58, (byte)0x5C, (byte)0xA6, (byte)0x83, (byte)0xDA, (byte)0xE5, 223 (byte)0xF9, (byte)0x3C, (byte)0x7C, (byte)0x2E, (byte)0x83, (byte)0xEE, (byte)0x69, 224 (byte)0x3A, (byte)0x1A, (byte)0x34, (byte)0x0E, (byte)0xCB, (byte)0xE5, (byte)0xE9, 225 (byte)0xF0, (byte)0xB9, (byte)0x0C, (byte)0x92, (byte)0x97, (byte)0xE9, (byte)0x75, 226 (byte)0xB9, (byte)0x1B, (byte)0x04, (byte)0x0F, (byte)0x93, (byte)0xC9, (byte)0x69, 227 (byte)0xF7, (byte)0xB9, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 228 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 229 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 230 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 231 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00 232 }; 233 234 private static final byte[] gsm7BitTestWithLanguageInBody = { 235 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x10, (byte)0x11, (byte)0x73, 236 (byte)0x7B, (byte)0x23, (byte)0x08, (byte)0x3A, (byte)0x4E, (byte)0x9B, (byte)0x20, 237 (byte)0x72, (byte)0xD9, (byte)0x1C, (byte)0xAE, (byte)0xB3, (byte)0xE9, (byte)0xA0, 238 (byte)0x30, (byte)0x1B, (byte)0x8E, (byte)0x0E, (byte)0x8B, (byte)0xCB, (byte)0x74, 239 (byte)0x50, (byte)0xBB, (byte)0x3C, (byte)0x9F, (byte)0x87, (byte)0xCF, (byte)0x65, 240 (byte)0xD0, (byte)0x3D, (byte)0x4D, (byte)0x47, (byte)0x83, (byte)0xC6, (byte)0x61, 241 (byte)0xB9, (byte)0x3C, (byte)0x1D, (byte)0x3E, (byte)0x97, (byte)0x41, (byte)0xF2, 242 (byte)0x32, (byte)0xBD, (byte)0x2E, (byte)0x77, (byte)0x83, (byte)0xE0, (byte)0x61, 243 (byte)0x32, (byte)0x39, (byte)0xED, (byte)0x3E, (byte)0x37, (byte)0x1A, (byte)0x8D, 244 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 245 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 246 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 247 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00 248 }; 249 250 private static final byte[] gsm7BitTestWithLanguageInBodyUmts = { 251 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x10, 252 253 (byte)0x01, 254 255 (byte)0x73, (byte)0x7B, (byte)0x23, (byte)0x08, (byte)0x3A, (byte)0x4E, 256 (byte)0x9B, (byte)0x20, (byte)0x72, (byte)0xD9, (byte)0x1C, (byte)0xAE, 257 (byte)0xB3, (byte)0xE9, (byte)0xA0, (byte)0x30, (byte)0x1B, (byte)0x8E, 258 (byte)0x0E, (byte)0x8B, (byte)0xCB, (byte)0x74, (byte)0x50, (byte)0xBB, 259 (byte)0x3C, (byte)0x9F, (byte)0x87, (byte)0xCF, (byte)0x65, (byte)0xD0, 260 (byte)0x3D, (byte)0x4D, (byte)0x47, (byte)0x83, (byte)0xC6, (byte)0x61, 261 (byte)0xB9, (byte)0x3C, (byte)0x1D, (byte)0x3E, (byte)0x97, (byte)0x41, 262 (byte)0xF2, (byte)0x32, (byte)0xBD, (byte)0x2E, (byte)0x77, (byte)0x83, 263 (byte)0xE0, (byte)0x61, (byte)0x32, (byte)0x39, (byte)0xED, (byte)0x3E, 264 (byte)0x37, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, (byte)0xD1, 265 (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, (byte)0xA3, 266 (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, (byte)0x46, 267 (byte)0xA3, (byte)0xD1, (byte)0x68, (byte)0x34, (byte)0x1A, (byte)0x8D, 268 (byte)0x46, (byte)0xA3, (byte)0xD1, (byte)0x00, 269 270 (byte)0x37 271 }; 272 273 private static final byte[] gsmUcs2Test = { 274 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x48, (byte)0x11, (byte)0x00, 275 (byte)0x41, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x55, (byte)0x00, (byte)0x43, 276 (byte)0x00, (byte)0x53, (byte)0x00, (byte)0x32, (byte)0x00, (byte)0x20, (byte)0x00, 277 (byte)0x6D, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x73, 278 (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x65, (byte)0x00, 279 (byte)0x20, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x6F, (byte)0x00, (byte)0x6E, 280 (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x69, (byte)0x00, 281 (byte)0x6E, (byte)0x00, (byte)0x69, (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x67, 282 (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x20, (byte)0x04, 283 (byte)0x34, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x68, 284 (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x72, (byte)0x00, (byte)0x61, (byte)0x00, 285 (byte)0x63, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x72, 286 (byte)0x00, (byte)0x0D, (byte)0x00, (byte)0x0D 287 }; 288 289 private static final byte[] gsmUcs2TestUmts = { 290 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x48, 291 292 (byte)0x01, 293 294 (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x55, 295 (byte)0x00, (byte)0x43, (byte)0x00, (byte)0x53, (byte)0x00, (byte)0x32, 296 (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x6D, (byte)0x00, (byte)0x65, 297 (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x61, 298 (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x20, 299 (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x6F, (byte)0x00, (byte)0x6E, 300 (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x69, 301 (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x69, (byte)0x00, (byte)0x6E, 302 (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x61, 303 (byte)0x00, (byte)0x20, (byte)0x04, (byte)0x34, (byte)0x00, (byte)0x20, 304 (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x68, (byte)0x00, (byte)0x61, 305 (byte)0x00, (byte)0x72, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x63, 306 (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x72, 307 (byte)0x00, (byte)0x0D, (byte)0x00, (byte)0x0D, 308 309 (byte)0x4E 310 }; 311 312 private static final byte[] gsmUcs2TestMultipageUmts = { 313 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x48, 314 315 (byte)0x02, 316 317 (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x41, 318 (byte)0x00, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 319 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 320 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 321 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 322 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 323 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 324 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 325 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 326 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 327 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 328 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 329 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 330 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 331 332 (byte)0x06, 333 334 (byte)0x00, (byte)0x42, (byte)0x00, (byte)0x42, (byte)0x00, (byte)0x42, 335 (byte)0x00, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 336 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 337 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 338 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 339 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 340 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 341 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 342 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 343 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 344 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 345 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 346 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 347 (byte)0x0D, (byte)0x0D, (byte)0x0D, (byte)0x0D, 348 349 (byte)0x06 350 }; 351 352 private static final byte[] gsmUcs2TestWithLanguageInBody = { 353 (byte)0xC0, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x11, (byte)0x11, (byte)0x78, 354 (byte)0x3C, (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x55, 355 (byte)0x00, (byte)0x43, (byte)0x00, (byte)0x53, (byte)0x00, (byte)0x32, (byte)0x00, 356 (byte)0x20, (byte)0x00, (byte)0x6D, (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x73, 357 (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x67, (byte)0x00, 358 (byte)0x65, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x6F, 359 (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x61, (byte)0x00, 360 (byte)0x69, (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x69, (byte)0x00, (byte)0x6E, 361 (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x61, (byte)0x00, 362 (byte)0x20, (byte)0x04, (byte)0x34, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x63, 363 (byte)0x00, (byte)0x68, (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x72, (byte)0x00, 364 (byte)0x61, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x65, 365 (byte)0x00, (byte)0x72, (byte)0x00, (byte)0x0D 366 }; 367 368 private static final byte[] gsmUcs2TestWithLanguageInBodyUmts = { 369 (byte)0x01, (byte)0x00, (byte)0x01, (byte)0xC0, (byte)0x00, (byte)0x11, 370 371 (byte)0x01, 372 373 (byte)0x78, (byte)0x3C, (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x20, 374 (byte)0x00, (byte)0x55, (byte)0x00, (byte)0x43, (byte)0x00, (byte)0x53, 375 (byte)0x00, (byte)0x32, (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x6D, 376 (byte)0x00, (byte)0x65, (byte)0x00, (byte)0x73, (byte)0x00, (byte)0x73, 377 (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x65, 378 (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x6F, 379 (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x61, 380 (byte)0x00, (byte)0x69, (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x69, 381 (byte)0x00, (byte)0x6E, (byte)0x00, (byte)0x67, (byte)0x00, (byte)0x20, 382 (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x20, (byte)0x04, (byte)0x34, 383 (byte)0x00, (byte)0x20, (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x68, 384 (byte)0x00, (byte)0x61, (byte)0x00, (byte)0x72, (byte)0x00, (byte)0x61, 385 (byte)0x00, (byte)0x63, (byte)0x00, (byte)0x74, (byte)0x00, (byte)0x65, 386 (byte)0x00, (byte)0x72, (byte)0x00, (byte)0x0D, 387 388 (byte)0x50 389 }; 390 391 private static final SmsCbLocation sEmptyLocation = new SmsCbLocation(); 392 createFromPdu(byte[] pdu, int serialNumber, int category)393 private static SmsCbMessage createFromPdu(byte[] pdu, int serialNumber, int category) { 394 byte[][] pdus = new byte[1][]; 395 pdus[0] = pdu; 396 return createFromPdus(pdus, serialNumber, category); 397 } 398 createFromPdus(byte[][] pdus, int serialNumber, int category)399 private static SmsCbMessage createFromPdus(byte[][] pdus, int serialNumber, int category) { 400 try { 401 for (byte[] pdu : pdus) { 402 if (pdu.length <= 88) { 403 // GSM format cell broadcast 404 Log.d(TAG, "setting GSM serial number to " + serialNumber); 405 pdu[0] = (byte) ((serialNumber >>> 8) & 0xff); 406 pdu[1] = (byte) (serialNumber & 0xff); 407 if (category != 0) { 408 Log.d(TAG, "setting GSM message identifier to " + category); 409 pdu[2] = (byte) ((category >>> 8) & 0xff); 410 pdu[3] = (byte) (category & 0xff); 411 } 412 } else { 413 // UMTS format cell broadcast 414 Log.d(TAG, "setting UMTS serial number to " + serialNumber); 415 pdu[3] = (byte) ((serialNumber >>> 8) & 0xff); 416 pdu[4] = (byte) (serialNumber & 0xff); 417 if (category != 0) { 418 Log.d(TAG, "setting UMTS message identifier to " + category); 419 pdu[1] = (byte) ((category >>> 8) & 0xff); 420 pdu[2] = (byte) (category & 0xff); 421 } 422 } 423 } 424 return GsmSmsCbMessage.createSmsCbMessage(sEmptyLocation, pdus); 425 } catch (IllegalArgumentException e) { 426 return null; 427 } 428 } 429 testSendMessage7bit(Activity activity, int serialNumber, int category)430 public static void testSendMessage7bit(Activity activity, int serialNumber, 431 int category) { 432 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 433 intent.putExtra("message", createFromPdu(gsm7BitTest, serialNumber, category)); 434 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 435 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 436 } 437 testSendMessage7bitUmts(Activity activity, int serialNumber, int category)438 public static void testSendMessage7bitUmts(Activity activity, int serialNumber, 439 int category) { 440 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 441 intent.putExtra("message", createFromPdu(gsm7BitTestUmts, serialNumber, category)); 442 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 443 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 444 } 445 testSendMessage7bitNoPadding(Activity activity, int serialNumber, int category)446 public static void testSendMessage7bitNoPadding(Activity activity, int serialNumber, 447 int category) { 448 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 449 intent.putExtra("message", createFromPdu(gsm7BitTestNoPadding, serialNumber, category)); 450 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 451 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 452 } 453 testSendMessage7bitNoPaddingUmts(Activity activity, int serialNumber, int category)454 public static void testSendMessage7bitNoPaddingUmts(Activity activity, int serialNumber, 455 int category) { 456 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 457 intent.putExtra("message", createFromPdu(gsm7BitTestNoPaddingUmts, serialNumber, category)); 458 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 459 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 460 } 461 testSendMessage7bitMultipageGsm(Activity activity, int serialNumber, int category)462 public static void testSendMessage7bitMultipageGsm(Activity activity, int serialNumber, 463 int category) { 464 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 465 byte[][] pdus = new byte[2][]; 466 pdus[0] = gsm7BitTestMultipage1; 467 pdus[1] = gsm7BitTestMultipage2; 468 intent.putExtra("message", createFromPdus(pdus, serialNumber, category)); 469 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 470 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 471 } 472 testSendMessage7bitMultipageUmts(Activity activity, int serialNumber, int category)473 public static void testSendMessage7bitMultipageUmts(Activity activity, int serialNumber, 474 int category) { 475 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 476 intent.putExtra("message", createFromPdu(gsm7BitTestMultipageUmts, serialNumber, category)); 477 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 478 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 479 } 480 testSendMessage7bitWithLanguage(Activity activity, int serialNumber, int category)481 public static void testSendMessage7bitWithLanguage(Activity activity, int serialNumber, 482 int category) { 483 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 484 intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguage, serialNumber, category)); 485 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 486 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 487 } 488 testSendMessage7bitWithLanguageInBody(Activity activity, int serialNumber, int category)489 public static void testSendMessage7bitWithLanguageInBody(Activity activity, int serialNumber, 490 int category) { 491 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 492 intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguageInBody, serialNumber, 493 category)); 494 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 495 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 496 } 497 testSendMessage7bitWithLanguageInBodyUmts(Activity activity, int serialNumber, int category)498 public static void testSendMessage7bitWithLanguageInBodyUmts(Activity activity, 499 int serialNumber, int category) { 500 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 501 intent.putExtra("message", createFromPdu(gsm7BitTestWithLanguageInBodyUmts, serialNumber, 502 category)); 503 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 504 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 505 } 506 testSendMessageUcs2(Activity activity, int serialNumber, int category)507 public static void testSendMessageUcs2(Activity activity, int serialNumber, 508 int category) { 509 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 510 intent.putExtra("message", createFromPdu(gsmUcs2Test, serialNumber, category)); 511 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 512 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 513 } 514 testSendMessageUcs2Umts(Activity activity, int serialNumber, int category)515 public static void testSendMessageUcs2Umts(Activity activity, int serialNumber, 516 int category) { 517 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 518 intent.putExtra("message", createFromPdu(gsmUcs2TestUmts, serialNumber, category)); 519 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 520 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 521 } 522 testSendMessageUcs2MultipageUmts(Activity activity, int serialNumber, int category)523 public static void testSendMessageUcs2MultipageUmts(Activity activity, int serialNumber, 524 int category) { 525 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 526 intent.putExtra("message", createFromPdu(gsmUcs2TestMultipageUmts, serialNumber, category)); 527 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 528 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 529 } 530 testSendMessageUcs2WithLanguageInBody(Activity activity, int serialNumber, int category)531 public static void testSendMessageUcs2WithLanguageInBody(Activity activity, int serialNumber, 532 int category) { 533 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 534 intent.putExtra("message", createFromPdu(gsmUcs2TestWithLanguageInBody, serialNumber, 535 category)); 536 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 537 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 538 } 539 testSendMessageUcs2WithLanguageUmts(Activity activity, int serialNumber, int category)540 public static void testSendMessageUcs2WithLanguageUmts(Activity activity, int serialNumber, 541 int category) { 542 Intent intent = new Intent(Intents.SMS_CB_RECEIVED_ACTION); 543 intent.putExtra("message", createFromPdu(gsmUcs2TestWithLanguageInBodyUmts, serialNumber, 544 category)); 545 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, Manifest.permission.RECEIVE_SMS, 546 AppOpsManager.OP_RECEIVE_SMS, null, null, Activity.RESULT_OK, null, null); 547 } 548 testSendEtwsMessageEarthquake(Activity activity, int serialNumber)549 public static void testSendEtwsMessageEarthquake(Activity activity, int serialNumber) { 550 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 551 intent.putExtra("message", createFromPdu(etwsMessageNormal, serialNumber, 552 SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING)); 553 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 554 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 555 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 556 } 557 testSendEtwsMessageTsunami(Activity activity, int serialNumber)558 public static void testSendEtwsMessageTsunami(Activity activity, int serialNumber) { 559 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 560 intent.putExtra("message", createFromPdu(etwsMessageNormal, serialNumber, 561 SmsCbConstants.MESSAGE_ID_ETWS_TSUNAMI_WARNING)); 562 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 563 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 564 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 565 } 566 testSendEtwsMessageEarthquakeTsunami(Activity activity, int serialNumber)567 public static void testSendEtwsMessageEarthquakeTsunami(Activity activity, int serialNumber) { 568 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 569 intent.putExtra("message", createFromPdu(etwsMessageNormal, serialNumber, 570 SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING)); 571 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 572 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 573 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 574 } 575 testSendEtwsMessageOther(Activity activity, int serialNumber)576 public static void testSendEtwsMessageOther(Activity activity, int serialNumber) { 577 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 578 intent.putExtra("message", createFromPdu(etwsMessageNormal, serialNumber, 579 SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE)); 580 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 581 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 582 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 583 } 584 testSendEtwsMessageCancel(Activity activity, int serialNumber)585 public static void testSendEtwsMessageCancel(Activity activity, int serialNumber) { 586 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 587 intent.putExtra("message", createFromPdu(etwsMessageCancel, serialNumber, 0)); 588 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 589 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 590 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 591 } 592 testSendEtwsMessageTest(Activity activity, int serialNumber)593 public static void testSendEtwsMessageTest(Activity activity, int serialNumber) { 594 Intent intent = new Intent(Intents.SMS_EMERGENCY_CB_RECEIVED_ACTION); 595 intent.putExtra("message", createFromPdu(etwsMessageTest, serialNumber, 0)); 596 activity.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, 597 Manifest.permission.RECEIVE_EMERGENCY_BROADCAST, 598 AppOpsManager.OP_RECEIVE_EMERGECY_SMS, null, null, Activity.RESULT_OK, null, null); 599 } 600 }