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