• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }