| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| |
| package com.android.mms; |
| |
| import com.android.mms.LogTag; |
| import com.android.mms.R; |
| import com.android.mms.data.WorkingMessage; |
| import com.android.mms.ui.ComposeMessageActivity; |
| |
| import android.app.Activity; |
| import android.app.Instrumentation; |
| import android.content.BroadcastReceiver; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.IntentFilter; |
| |
| import android.test.suitebuilder.annotation.LargeTest; |
| import android.test.ActivityInstrumentationTestCase2; |
| |
| import android.util.Log; |
| import android.view.KeyEvent; |
| import android.widget.Button; |
| import android.widget.EditText; |
| import android.widget.TextView; |
| |
| /** |
| * |
| * Junit / Instrumentation test case for testing intercepting the send sms intent just |
| * like a 3rd party might want to do. |
| * |
| */ |
| |
| public class InterceptSendSms extends ActivityInstrumentationTestCase2 <ComposeMessageActivity> { |
| private static String TAG = "InterceptSendSms"; |
| private static int WAIT_TIME = 4000; //Set the short wait time for 4 sec. |
| private static String RECIPIENTS = "4258365497,4258365496"; |
| private static String MESSAGE = "This is a test message of intercepting a SMS"; |
| |
| private InterceptSmsReceiver mInterceptReceiver; |
| private TextView mRecipientsView; |
| private EditText mTextEditor; |
| private boolean mInterceptedSend; |
| |
| public InterceptSendSms() { |
| super("com.android.mms", ComposeMessageActivity.class); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| Activity activity = getActivity(); |
| super.setUp(); |
| mRecipientsView = (TextView)activity.findViewById(R.id.recipients_editor); |
| mTextEditor = (EditText)activity.findViewById(R.id.embedded_text_editor); |
| |
| // Setup our receiver to listen for SMS's about to be sent. |
| mInterceptReceiver = new InterceptSmsReceiver(); |
| IntentFilter filter = new IntentFilter(WorkingMessage.ACTION_SENDING_SMS); |
| activity.registerReceiver(mInterceptReceiver, filter); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| getActivity().unregisterReceiver(mInterceptReceiver); |
| |
| super.tearDown(); |
| } |
| |
| // Create the object with the run() method |
| Runnable runnable = new sendMms(); |
| |
| class sendMms implements Runnable { |
| // This method is called when the thread runs |
| public void run() { |
| Instrumentation inst = getInstrumentation(); |
| |
| mRecipientsView.setText(RECIPIENTS); |
| mTextEditor.setText(MESSAGE); |
| |
| Button mSendButton = (Button) getActivity().getWindow().findViewById(R.id.send_button); |
| mSendButton.performClick(); |
| |
| Log.v(TAG, "sendMms hitting send now"); |
| boolean messageSend = mSendButton.performClick(); |
| if (!messageSend) { |
| assertTrue("Fails to send mms", false); |
| Log.v(TAG, "messageSend is true"); |
| } |
| } |
| } |
| |
| // Send sms and see if we get a chance to handle the send in our receiver. |
| @LargeTest |
| public void testInterceptSendSms(){ |
| try{ |
| Instrumentation inst = getInstrumentation(); |
| |
| // Send the sms message |
| inst.runOnMainSync(runnable); |
| Thread.sleep(WAIT_TIME); |
| assertTrue("Intercepted send SMS", mInterceptedSend); |
| } catch (Exception e){ |
| assertTrue("Failed to send sms", false); |
| Log.v(TAG, e.toString()); |
| } |
| } |
| |
| /** |
| * InterceptSmsReceiver catches the NEW_SENDING_SMS broadcast from the messaging |
| * app when the app is about to send a SMS message. We pretend to be an app that |
| * takes over and does the sending ourself. We set the result code RESULT_OK so |
| * the message app doesn't actually send the message. |
| */ |
| public class InterceptSmsReceiver extends BroadcastReceiver { |
| public void onReceive(Context context, Intent intent) { |
| Log.v(TAG, "doReceive: " + intent); |
| mInterceptedSend = true; |
| |
| final String msgText = intent.getStringExtra(WorkingMessage.EXTRA_SMS_MESSAGE); |
| final String semiSepRecipients = |
| intent.getStringExtra(WorkingMessage.EXTRA_SMS_RECIPIENTS); |
| final long threadId = intent.getLongExtra(WorkingMessage.EXTRA_SMS_THREAD_ID, 0); |
| |
| assertEquals(msgText, MESSAGE); |
| assertEquals(semiSepRecipients, RECIPIENTS.replace(',', ';')); |
| assertTrue(threadId > 0); |
| |
| // Mark that we're handling the sending of the sms. |
| setResultCode(android.app.Activity.RESULT_OK); |
| } |
| } |
| |
| } |