InterceptSendSms.java :  » android-platform-apps » Mms » src » com » android » mms » Android Open Source

Android Open Source » android platform apps » Mms 
Mms » src » com » android » mms » InterceptSendSms.java
/*
 * 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 src.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);
        }
    }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.