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.mms.apptests;
     18 
     19 import android.app.Activity;
     20 import android.content.Context;
     21 import android.content.Intent;
     22 import android.net.Uri;
     23 import android.os.Bundle;
     24 import android.telephony.TelephonyManager;
     25 import android.text.TextUtils;
     26 import android.view.Menu;
     27 import android.view.MenuItem;
     28 import android.view.View;
     29 import android.view.View.OnClickListener;
     30 import android.widget.Button;
     31 import android.widget.EditText;
     32 import android.widget.Toast;
     33 
     34 import com.android.mms.apptests.R;
     35 
     36 // This is a manual test application for testing the Messaging app's ability to send Sms messages
     37 // without the user having to confirm or press a send button. This app uses the intent:
     38 //   com.android.mms.intent.action.SENDTO_NO_CONFIRMATION
     39 // to tell the messaging app to send a message. This app tests that the required permissions
     40 // are checked. It also has buttons for testing sending a long (i.e. greater than 140 char) message
     41 // and for sending a number of messages in rapid fire succession.
     42 
     43 public class SmsSendIntentTestActivity extends Activity {
     44     /** Tag string for our debug logs */
     45     private static final String TAG = "SmsSendIntentTestActivity";
     46     private EditText mRecipient;
     47     private EditText mMessage;
     48 
     49     private final int NOTIFICATION_MENU = 100;
     50     private final int NOTIFICATIONS_REQUEST_CODE = 101;
     51 
     52     @Override
     53     protected void onCreate(Bundle savedInstanceState) {
     54         super.onCreate(savedInstanceState);
     55 
     56         setContentView(R.layout.sms_send_intent_test);
     57 
     58         mRecipient = (EditText)findViewById(R.id.sms_recipient);
     59         mMessage = (EditText)findViewById(R.id.sms_content);
     60 
     61         String line1Number = ((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE))
     62                 .getLine1Number();
     63         mRecipient.setText(line1Number); // use this to prime a number
     64 
     65         Button sendButton = (Button) findViewById(R.id.sms_send_message);
     66         sendButton.setOnClickListener(new OnClickListener() {
     67             public void onClick(View v) {
     68                 sendMessage(1, 1);
     69             }
     70         });
     71 
     72         Button sendUnlockButton = (Button) findViewById(R.id.sms_send_message_unlock_screen);
     73         sendUnlockButton.setOnClickListener(new OnClickListener() {
     74             public void onClick(View v) {
     75                 sendMessageUnlockScreen();
     76             }
     77         });
     78 
     79         Button sendMultiButton = (Button) findViewById(R.id.sms_send_multi_message);
     80         sendMultiButton.setOnClickListener(new OnClickListener() {
     81             public void onClick(View v) {
     82                 sendMessage(5, 1);
     83             }
     84         });
     85 
     86         Button sendLongButton = (Button) findViewById(R.id.sms_send_long_message);
     87         sendLongButton.setOnClickListener(new OnClickListener() {
     88             public void onClick(View v) {
     89                 sendMessage(1, 10);
     90             }
     91         });
     92 
     93         Button primeButton = (Button) findViewById(R.id.sms_prime_message);
     94         primeButton.setOnClickListener(new OnClickListener() {
     95             public void onClick(View v) {
     96                 mMessage.setText(R.string.sms_long_message);
     97             }
     98         });
     99 
    100         Button notificationsButton = (Button) findViewById(R.id.turn_off_notification_message);
    101         notificationsButton.setOnClickListener(new OnClickListener() {
    102             public void onClick(View v) {
    103                 Intent intent =
    104                     new Intent("com.android.mms.intent.action.MESSAGING_APP_NOTIFICATIONS");
    105                 startActivityForResult(intent, NOTIFICATIONS_REQUEST_CODE);
    106             }
    107         });
    108     }
    109 
    110     private void sendMessageUnlockScreen() {
    111         String recipient = mRecipient.getText().toString();
    112         if (TextUtils.isEmpty(recipient)) {
    113             Toast.makeText(SmsSendIntentTestActivity.this, "Please enter a message recipient.",
    114                     Toast.LENGTH_SHORT).show();
    115             return;
    116         }
    117         String message = mMessage.getText().toString();
    118         if (TextUtils.isEmpty(message)) {
    119             Toast.makeText(SmsSendIntentTestActivity.this, "Please enter a message body.",
    120                     Toast.LENGTH_SHORT).show();
    121             return;
    122         }
    123 
    124         Toast.makeText(SmsSendIntentTestActivity.this, "You have five seconds to lock the screen.",
    125                 Toast.LENGTH_SHORT).show();
    126 
    127         try {
    128             Thread.sleep(5000);     // yeah, yeah, it's on the UI thread
    129         } catch (Exception e) {
    130         }
    131 
    132         Uri uri = Uri.fromParts("smsto", recipient, null);
    133         Intent intent = new Intent("com.android.mms.intent.action.SENDTO_NO_CONFIRMATION", uri);
    134         intent.putExtra(Intent.EXTRA_TEXT, message);
    135         intent.putExtra("exit_on_sent", true);
    136         intent.putExtra("showUI", true);
    137         startService(intent);
    138     }
    139 
    140     private void sendMessage(int count, int dupeCount) {
    141         String recipient = mRecipient.getText().toString();
    142         if (TextUtils.isEmpty(recipient)) {
    143             Toast.makeText(SmsSendIntentTestActivity.this, "Please enter a message recipient.",
    144                     Toast.LENGTH_SHORT).show();
    145             return;
    146         }
    147         String message = mMessage.getText().toString();
    148         if (TextUtils.isEmpty(message)) {
    149             Toast.makeText(SmsSendIntentTestActivity.this, "Please enter a message body.",
    150                     Toast.LENGTH_SHORT).show();
    151             return;
    152         }
    153 
    154         if (dupeCount > 1) {
    155             StringBuilder sb = new StringBuilder();
    156             for (int i = 0; i < dupeCount; i++) {
    157                 sb.append(i).append(": ").append(message).append(' ');
    158             }
    159             message = sb.toString();
    160         }
    161         Uri uri = Uri.fromParts("smsto", recipient, null);
    162         for (int i = 0; i < count; i++) {
    163             Intent intent = new Intent("com.android.mms.intent.action.SENDTO_NO_CONFIRMATION", uri);
    164             intent.putExtra(Intent.EXTRA_TEXT, message);
    165             startService(intent);
    166         }
    167     }
    168 
    169     @Override
    170     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    171         if (requestCode == NOTIFICATIONS_REQUEST_CODE) {
    172             String msg = "result: ";
    173             if (resultCode == RESULT_OK) {
    174                 msg += "ok";
    175             } else if (resultCode == RESULT_CANCELED) {
    176                 msg += "canceled";
    177             } else {
    178                 msg += resultCode;
    179             }
    180             Button notificationsButton = (Button) findViewById(R.id.turn_off_notification_message);
    181             notificationsButton.setText(msg);
    182         }
    183     }
    184 
    185     @Override
    186     public boolean onCreateOptionsMenu(Menu menu) {
    187         menu.add(Menu.NONE, NOTIFICATION_MENU, Menu.NONE, R.string.menu_notifications);
    188         return true;
    189     }
    190 
    191     @Override
    192     public boolean onOptionsItemSelected(MenuItem item) {
    193         switch (item.getItemId()) {
    194             case NOTIFICATION_MENU:
    195                 Intent intent =
    196                     new Intent("com.android.mms.intent.action.MESSAGING_APP_NOTIFICATIONS");
    197                 startActivity(intent);
    198                 break;
    199         }
    200         return true;
    201     }
    202 }
    203