• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 
18 package com.android.mms;
19 
20 import com.android.mms.LogTag;
21 import com.android.mms.R;
22 import com.android.mms.data.WorkingMessage;
23 import com.android.mms.ui.ComposeMessageActivity;
24 
25 import android.app.Activity;
26 import android.app.Instrumentation;
27 import android.content.BroadcastReceiver;
28 import android.content.Context;
29 import android.content.Intent;
30 import android.content.IntentFilter;
31 
32 import android.test.suitebuilder.annotation.LargeTest;
33 import android.test.ActivityInstrumentationTestCase2;
34 
35 import android.util.Log;
36 import android.view.KeyEvent;
37 import android.widget.Button;
38 import android.widget.EditText;
39 import android.widget.TextView;
40 
41 /**
42  *
43  * Junit / Instrumentation test case for testing intercepting the send sms intent just
44  * like a 3rd party might want to do.
45  *
46  */
47 
48 public class InterceptSendSms extends ActivityInstrumentationTestCase2 <ComposeMessageActivity> {
49     private static String TAG = "InterceptSendSms";
50     private static int WAIT_TIME = 4000; //Set the short wait time for 4 sec.
51     private static String RECIPIENTS = "4258365497,4258365496";
52     private static String MESSAGE = "This is a test message of intercepting a SMS";
53 
54     private InterceptSmsReceiver mInterceptReceiver;
55     private TextView mRecipientsView;
56     private EditText mTextEditor;
57     private boolean mInterceptedSend;
58 
InterceptSendSms()59     public InterceptSendSms() {
60         super("com.android.mms", ComposeMessageActivity.class);
61     }
62 
63     @Override
setUp()64     protected void setUp() throws Exception {
65         Activity activity = getActivity();
66         super.setUp();
67         mRecipientsView = (TextView)activity.findViewById(R.id.recipients_editor);
68         mTextEditor = (EditText)activity.findViewById(R.id.embedded_text_editor);
69 
70         // Setup our receiver to listen for SMS's about to be sent.
71         mInterceptReceiver = new InterceptSmsReceiver();
72         IntentFilter filter = new IntentFilter(WorkingMessage.ACTION_SENDING_SMS);
73         activity.registerReceiver(mInterceptReceiver, filter);
74     }
75 
76     @Override
tearDown()77     protected void tearDown() throws Exception {
78         getActivity().unregisterReceiver(mInterceptReceiver);
79 
80         super.tearDown();
81     }
82 
83  // Create the object with the run() method
84     Runnable runnable = new sendMms();
85 
86     class sendMms implements Runnable {
87         // This method is called when the thread runs
run()88         public void run() {
89             Instrumentation inst = getInstrumentation();
90 
91             mRecipientsView.setText(RECIPIENTS);
92             mTextEditor.setText(MESSAGE);
93 
94             Button mSendButton = (Button) getActivity().getWindow().findViewById(R.id.send_button);
95             mSendButton.performClick();
96 
97             Log.v(TAG, "sendMms hitting send now");
98             boolean messageSend = mSendButton.performClick();
99             if (!messageSend) {
100                 assertTrue("Fails to send mms", false);
101                 Log.v(TAG, "messageSend is true");
102             }
103         }
104     }
105 
106     // Send sms and see if we get a chance to handle the send in our receiver.
107     @LargeTest
testInterceptSendSms()108     public void testInterceptSendSms(){
109         try{
110             Instrumentation inst = getInstrumentation();
111 
112             // Send the sms message
113             inst.runOnMainSync(runnable);
114             Thread.sleep(WAIT_TIME);
115             assertTrue("Intercepted send SMS", mInterceptedSend);
116         } catch (Exception e){
117             assertTrue("Failed to send sms", false);
118             Log.v(TAG, e.toString());
119         }
120     }
121 
122     /**
123      * InterceptSmsReceiver catches the NEW_SENDING_SMS broadcast from the messaging
124      * app when the app is about to send a SMS message. We pretend to be an app that
125      * takes over and does the sending ourself. We set the result code RESULT_OK so
126      * the message app doesn't actually send the message.
127      */
128     public class InterceptSmsReceiver extends BroadcastReceiver {
onReceive(Context context, Intent intent)129         public void onReceive(Context context, Intent intent) {
130             Log.v(TAG, "doReceive: " + intent);
131             mInterceptedSend = true;
132 
133             final String msgText = intent.getStringExtra(WorkingMessage.EXTRA_SMS_MESSAGE);
134             final String semiSepRecipients =
135                 intent.getStringExtra(WorkingMessage.EXTRA_SMS_RECIPIENTS);
136             final long threadId = intent.getLongExtra(WorkingMessage.EXTRA_SMS_THREAD_ID, 0);
137 
138             assertEquals(msgText, MESSAGE);
139             assertEquals(semiSepRecipients, RECIPIENTS.replace(',', ';'));
140             assertTrue(threadId > 0);
141 
142             // Mark that we're handling the sending of the sms.
143             setResultCode(android.app.Activity.RESULT_OK);
144         }
145     }
146 
147 }
148