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