• 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.app.Activity;
20 import android.os.Bundle;
21 import android.os.Handler;
22 import android.os.Message;
23 import android.telephony.SubscriptionManager;
24 import android.util.Log;
25 import android.view.View;
26 import android.view.View.OnClickListener;
27 import android.widget.Button;
28 import android.widget.CheckBox;
29 import android.widget.EditText;
30 
31 import java.util.Random;
32 
33 /**
34  * Activity to send test cell broadcast messages from GUI.
35  */
36 public class SendTestBroadcastActivity extends Activity {
37     private static final String TAG = "SendTestBroadcastActivity";
38 
39     /** Whether to delay before sending test message. */
40     private boolean mDelayBeforeSending;
41 
42     /** Delay time before sending test message (when box is checked). */
43     private static final int DELAY_BEFORE_SENDING_MSEC = 5000;
44 
45     private final Handler mDelayHandler = new Handler() {
46         @Override
47         public void handleMessage(Message msg) {
48             // call the onClick() method again, passing null View.
49             // The callback will ignore mDelayBeforeSending when the View is null.
50             OnClickListener pendingButtonClick = (OnClickListener) msg.obj;
51             pendingButtonClick.onClick(null);
52         }
53     };
54 
55     /**
56      * Increment the message ID field and return the previous value.
57      * @return the current value of the message ID text field
58      */
getMessageId()59     private int getMessageId() {
60         EditText messageIdField = (EditText) findViewById(R.id.message_id);
61         int messageId = 0;
62         try {
63             messageId = Integer.parseInt(messageIdField.getText().toString());
64         } catch (NumberFormatException ignored) {
65             Log.e(TAG, "Invalid message ID");
66         }
67         int newMessageId = (messageId + 1) % 65536;
68         if (newMessageId == 0) {
69             newMessageId = 1;
70         }
71         messageIdField.setText(String.valueOf(newMessageId));
72         return messageId;
73     }
74 
75     /**
76      * Return the value of the category field.
77      * @return the current value of the category text field
78      */
getCategory()79     private int getCategory() {
80         EditText categoryField = (EditText) findViewById(R.id.category_id);
81         return Integer.parseInt(categoryField.getText().toString());
82     }
83 
84     /**
85      * Initialization of the Activity after it is first created.  Must at least
86      * call {@link android.app.Activity#setContentView(int)} to
87      * describe what is to be displayed in the screen.
88      */
89     @Override
onCreate(Bundle savedInstanceState)90     protected void onCreate(Bundle savedInstanceState) {
91         super.onCreate(savedInstanceState);
92 
93         setContentView(R.layout.test_buttons);
94 
95         /* Set message ID to a random value from 1-65535. */
96         EditText messageIdField = (EditText) findViewById(R.id.message_id);
97         messageIdField.setText(String.valueOf(new Random().nextInt(65535) + 1));
98 
99         /* When category ID is non-zero, use it for the GSM/UMTS message identifier. */
100         EditText categoryIdField = (EditText) findViewById(R.id.category_id);
101         categoryIdField.setText("0");
102 
103         /* Send an ETWS normal broadcast message to app. */
104         Button etwsNormalTypeButton = (Button) findViewById(R.id.button_etws_normal_type);
105         etwsNormalTypeButton.setOnClickListener(new OnClickListener() {
106             public void onClick(View v) {
107                 if (mDelayBeforeSending && v != null) {
108                     Message msg = mDelayHandler.obtainMessage(0, this);
109                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
110                 } else {
111                     SendTestMessages.testSendEtwsMessageNormal(SendTestBroadcastActivity.this,
112                             getMessageId());
113                 }
114             }
115         });
116 
117         /* Send an ETWS cancel broadcast message to app. */
118         Button etwsCancelTypeButton = (Button) findViewById(R.id.button_etws_cancel_type);
119         etwsCancelTypeButton.setOnClickListener(new OnClickListener() {
120             public void onClick(View v) {
121                 if (mDelayBeforeSending && v != null) {
122                     Message msg = mDelayHandler.obtainMessage(0, this);
123                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
124                 } else {
125                     SendTestMessages.testSendEtwsMessageCancel(SendTestBroadcastActivity.this,
126                             getMessageId());
127                 }
128             }
129         });
130 
131         /* Send an ETWS test broadcast message to app. */
132         Button etwsTestTypeButton = (Button) findViewById(R.id.button_etws_test_type);
133         etwsTestTypeButton.setOnClickListener(new OnClickListener() {
134             public void onClick(View v) {
135                 if (mDelayBeforeSending && v != null) {
136                     Message msg = mDelayHandler.obtainMessage(0, this);
137                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
138                 } else {
139                     SendTestMessages.testSendEtwsMessageTest(SendTestBroadcastActivity.this,
140                             getMessageId());
141                 }
142             }
143         });
144 
145         /* Send a CMAS presidential alert to app. */
146         Button cmasPresAlertButton = (Button) findViewById(R.id.button_cmas_pres_alert);
147         cmasPresAlertButton.setOnClickListener(new OnClickListener() {
148             public void onClick(View v) {
149                 if (mDelayBeforeSending && v != null) {
150                     Message msg = mDelayHandler.obtainMessage(0, this);
151                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
152                 } else {
153                     SendCdmaCmasMessages.testSendCmasPresAlert(SendTestBroadcastActivity.this,
154                             getMessageId());
155                 }
156             }
157         });
158 
159         /* Send a CMAS extreme alert to app. */
160         Button cmasExtremeAlertButton = (Button) findViewById(R.id.button_cmas_extreme_alert);
161         cmasExtremeAlertButton.setOnClickListener(new OnClickListener() {
162             public void onClick(View v) {
163                 if (mDelayBeforeSending && v != null) {
164                     Message msg = mDelayHandler.obtainMessage(0, this);
165                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
166                 } else {
167                     SendCdmaCmasMessages.testSendCmasExtremeAlert(SendTestBroadcastActivity.this,
168                             getMessageId());
169                 }
170             }
171         });
172 
173         /* Send a CMAS severe alert to app. */
174         Button cmasSevereAlertButton = (Button) findViewById(R.id.button_cmas_severe_alert);
175         cmasSevereAlertButton.setOnClickListener(new OnClickListener() {
176             public void onClick(View v) {
177                 if (mDelayBeforeSending && v != null) {
178                     Message msg = mDelayHandler.obtainMessage(0, this);
179                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
180                 } else {
181                     SendCdmaCmasMessages.testSendCmasSevereAlert(SendTestBroadcastActivity.this,
182                             getMessageId());
183                 }
184             }
185         });
186 
187         /* Send a CMAS AMBER alert to app. */
188         Button cmasAmberAlertButton = (Button) findViewById(R.id.button_cmas_amber_alert);
189         cmasAmberAlertButton.setOnClickListener(new OnClickListener() {
190             public void onClick(View v) {
191                 if (mDelayBeforeSending && v != null) {
192                     Message msg = mDelayHandler.obtainMessage(0, this);
193                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
194                 } else {
195                     SendCdmaCmasMessages.testSendCmasAmberAlert(SendTestBroadcastActivity.this,
196                             getMessageId());
197                 }
198             }
199         });
200 
201         /* Send a CMAS monthly test alert to app. */
202         Button cmasMonthlyTestButton = (Button) findViewById(R.id.button_cmas_monthly_test);
203         cmasMonthlyTestButton.setOnClickListener(new OnClickListener() {
204             public void onClick(View v) {
205                 if (mDelayBeforeSending && v != null) {
206                     Message msg = mDelayHandler.obtainMessage(0, this);
207                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
208                 } else {
209                     SendCdmaCmasMessages.testSendCmasMonthlyTest(SendTestBroadcastActivity.this,
210                             getMessageId());
211                 }
212             }
213         });
214 
215         /* Send a GSM 7-bit broadcast message to app. */
216         Button gsm7bitTypeButton = (Button) findViewById(R.id.button_gsm_7bit_type);
217         gsm7bitTypeButton.setOnClickListener(new OnClickListener() {
218             public void onClick(View v) {
219                 if (mDelayBeforeSending && v != null) {
220                     Message msg = mDelayHandler.obtainMessage(0, this);
221                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
222                 } else {
223                     SendTestMessages.testSendMessage7bit(SendTestBroadcastActivity.this,
224                             getMessageId(), getCategory());
225                 }
226             }
227         });
228 
229         /* Send a UMTS 7-bit broadcast message to app. */
230         Button gsm7bitUmtsTypeButton = (Button) findViewById(R.id.button_gsm_7bit_umts_type);
231         gsm7bitUmtsTypeButton.setOnClickListener(new OnClickListener() {
232             public void onClick(View v) {
233                 if (mDelayBeforeSending && v != null) {
234                     Message msg = mDelayHandler.obtainMessage(0, this);
235                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
236                 } else {
237                     SendTestMessages.testSendMessage7bitUmts(SendTestBroadcastActivity.this,
238                             getMessageId(), getCategory());
239                 }
240             }
241         });
242 
243         /* Send a GSM 7-bit no padding broadcast message to app. */
244         Button gsm7bitNoPaddingButton = (Button) findViewById(R.id.button_gsm_7bit_nopadding_type);
245         gsm7bitNoPaddingButton.setOnClickListener(new OnClickListener() {
246             public void onClick(View v) {
247                 if (mDelayBeforeSending && v != null) {
248                     Message msg = mDelayHandler.obtainMessage(0, this);
249                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
250                 } else {
251                     SendTestMessages.testSendMessage7bitNoPadding(SendTestBroadcastActivity.this,
252                             getMessageId(), getCategory());
253                 }
254             }
255         });
256 
257         /* Send a UMTS 7-bit no padding broadcast message to app. */
258         Button gsm7bitNoPaddingUmtsTypeButton =
259                 (Button) findViewById(R.id.button_gsm_7bit_nopadding_umts_type);
260         gsm7bitNoPaddingUmtsTypeButton.setOnClickListener(new OnClickListener() {
261             public void onClick(View v) {
262                 if (mDelayBeforeSending && v != null) {
263                     Message msg = mDelayHandler.obtainMessage(0, this);
264                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
265                 } else {
266                     SendTestMessages.testSendMessage7bitNoPaddingUmts(
267                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
268                 }
269             }
270         });
271 
272         /* Send a UMTS 7-bit multi-page broadcast message to app. */
273         Button gsm7bitMultipageButton =
274                 (Button) findViewById(R.id.button_gsm_7bit_multipage_type);
275         gsm7bitMultipageButton.setOnClickListener(new OnClickListener() {
276             public void onClick(View v) {
277                 if (mDelayBeforeSending && v != null) {
278                     Message msg = mDelayHandler.obtainMessage(0, this);
279                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
280                 } else {
281                     SendTestMessages.testSendMessage7bitMultipageGsm(SendTestBroadcastActivity.this,
282                             getMessageId(), getCategory());
283                 }
284             }
285         });
286 
287         /* Send a UMTS 7-bit multi-page broadcast message to app. */
288         Button gsm7bitMultipageUmtsButton =
289                 (Button) findViewById(R.id.button_gsm_7bit_multipage_umts_type);
290         gsm7bitMultipageUmtsButton.setOnClickListener(new OnClickListener() {
291             public void onClick(View v) {
292                 if (mDelayBeforeSending && v != null) {
293                     Message msg = mDelayHandler.obtainMessage(0, this);
294                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
295                 } else {
296                     SendTestMessages.testSendMessage7bitMultipageUmts(
297                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
298                 }
299             }
300         });
301 
302         /* Send a GSM 7-bit broadcast message with language to app. */
303         Button gsm7bitWithLanguageButton =
304                 (Button) findViewById(R.id.button_gsm_7bit_with_language_type);
305         gsm7bitWithLanguageButton.setOnClickListener(new OnClickListener() {
306             public void onClick(View v) {
307                 if (mDelayBeforeSending && v != null) {
308                     Message msg = mDelayHandler.obtainMessage(0, this);
309                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
310                 } else {
311                     SendTestMessages.testSendMessage7bitWithLanguage(SendTestBroadcastActivity.this,
312                             getMessageId(), getCategory());
313                 }
314             }
315         });
316 
317         /* Send a GSM 7-bit broadcast message with language to app. */
318         Button gsm7bitWithLanguageInBodyButton =
319                 (Button) findViewById(R.id.button_gsm_7bit_with_language_body_gsm_type);
320         gsm7bitWithLanguageInBodyButton.setOnClickListener(new OnClickListener() {
321             public void onClick(View v) {
322                 if (mDelayBeforeSending && v != null) {
323                     Message msg = mDelayHandler.obtainMessage(0, this);
324                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
325                 } else {
326                     SendTestMessages.testSendMessage7bitWithLanguageInBody(
327                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
328                 }
329             }
330         });
331 
332         /* Send a UMTS 7-bit broadcast message with language to app. */
333         Button gsm7bitWithLanguageUmtsButton =
334                 (Button) findViewById(R.id.button_gsm_7bit_with_language_body_umts_type);
335         gsm7bitWithLanguageUmtsButton.setOnClickListener(new OnClickListener() {
336             public void onClick(View v) {
337                 if (mDelayBeforeSending && v != null) {
338                     Message msg = mDelayHandler.obtainMessage(0, this);
339                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
340                 } else {
341                     SendTestMessages.testSendMessage7bitWithLanguageInBodyUmts(
342                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
343                 }
344             }
345         });
346 
347         /* Send a GSM UCS-2 broadcast message to app. */
348         Button gsmUcs2TypeButton = (Button) findViewById(R.id.button_gsm_ucs2_type);
349         gsmUcs2TypeButton.setOnClickListener(new OnClickListener() {
350             public void onClick(View v) {
351                 if (mDelayBeforeSending && v != null) {
352                     Message msg = mDelayHandler.obtainMessage(0, this);
353                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
354                 } else {
355                     SendTestMessages.testSendMessageUcs2(SendTestBroadcastActivity.this,
356                             getMessageId(), getCategory());
357                 }
358             }
359         });
360 
361         /* Send a UMTS UCS-2 broadcast message to app. */
362         Button gsmUcs2UmtsTypeButton = (Button) findViewById(R.id.button_gsm_ucs2_umts_type);
363         gsmUcs2UmtsTypeButton.setOnClickListener(new OnClickListener() {
364             public void onClick(View v) {
365                 if (mDelayBeforeSending && v != null) {
366                     Message msg = mDelayHandler.obtainMessage(0, this);
367                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
368                 } else {
369                     SendTestMessages.testSendMessageUcs2Umts(SendTestBroadcastActivity.this,
370                             getMessageId(), getCategory());
371                 }
372             }
373         });
374 
375         /* Send a UMTS UCS-2 multipage broadcast message to app. */
376         Button gsmUcs2MultipageUmtsTypeButton =
377                 (Button) findViewById(R.id.button_gsm_ucs2_multipage_umts_type);
378         gsmUcs2MultipageUmtsTypeButton.setOnClickListener(new OnClickListener() {
379             public void onClick(View v) {
380                 if (mDelayBeforeSending && v != null) {
381                     Message msg = mDelayHandler.obtainMessage(0, this);
382                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
383                 } else {
384                     SendTestMessages.testSendMessageUcs2MultipageUmts(
385                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
386                 }
387             }
388         });
389 
390         /* Send a GSM UCS-2 broadcast message with language to app. */
391         Button gsmUcs2WithLanguageTypeButton =
392                 (Button) findViewById(R.id.button_gsm_ucs2_with_language_type);
393         gsmUcs2WithLanguageTypeButton.setOnClickListener(new OnClickListener() {
394             public void onClick(View v) {
395                 if (mDelayBeforeSending && v != null) {
396                     Message msg = mDelayHandler.obtainMessage(0, this);
397                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
398                 } else {
399                     SendTestMessages.testSendMessageUcs2WithLanguageInBody(
400                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
401                 }
402             }
403         });
404 
405         /* Send a UMTS UCS-2 broadcast message with language to app. */
406         Button gsmUcs2WithLanguageUmtsTypeButton =
407                 (Button) findViewById(R.id.button_gsm_ucs2_with_language_umts_type);
408         gsmUcs2WithLanguageUmtsTypeButton.setOnClickListener(new OnClickListener() {
409             public void onClick(View v) {
410                 if (mDelayBeforeSending && v != null) {
411                     Message msg = mDelayHandler.obtainMessage(0, this);
412                     mDelayHandler.sendMessageDelayed(msg, DELAY_BEFORE_SENDING_MSEC);
413                 } else {
414                     SendTestMessages.testSendMessageUcs2WithLanguageUmts(
415                             SendTestBroadcastActivity.this, getMessageId(), getCategory());
416                 }
417             }
418         });
419 
420         /* Update boolean to delay before sending when box is checked. */
421         final CheckBox delayCheckbox = (CheckBox) findViewById(R.id.button_delay_broadcast);
422         delayCheckbox.setOnClickListener(new OnClickListener() {
423             public void onClick(View v) {
424                 mDelayBeforeSending = delayCheckbox.isChecked();
425             }
426         });
427     }
428 }
429