11f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang/* 21f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Copyright (C) 2011 The Android Open Source Project 31f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * 41f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Licensed under the Apache License, Version 2.0 (the "License"); 51f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * you may not use this file except in compliance with the License. 61f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * You may obtain a copy of the License at 71f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * 81f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * http://www.apache.org/licenses/LICENSE-2.0 91f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * 101f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Unless required by applicable law or agreed to in writing, software 111f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * distributed under the License is distributed on an "AS IS" BASIS, 121f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * See the License for the specific language governing permissions and 141f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * limitations under the License. 151f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 161f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 171f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangpackage com.android.mms.ui; 181f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 191f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport static com.android.mms.ui.MessageListAdapter.COLUMN_ID; 201f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport static com.android.mms.ui.MessageListAdapter.COLUMN_MSG_TYPE; 211f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 221f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport com.android.mms.R; 231f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport com.android.mms.ui.ComposeMessageActivity; 241f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport com.android.mms.ui.RecipientsEditor; 251f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport com.android.mms.SmsTestRunner; 261f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 271f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.database.Cursor; 281f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.content.Context; 291f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.test.ActivityInstrumentationTestCase2; 301f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.view.View; 311f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.view.ViewStub; 321f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.widget.EditText; 331f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.widget.ImageButton; 341f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport android.util.Log; 351f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 361f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.io.File; 371f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.io.FileInputStream; 381f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.io.BufferedInputStream; 391f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.io.IOException; 401f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.util.List; 411f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangimport java.util.ArrayList; 421f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 431f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang/** 441f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Base class for sms tests. 451f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 461f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wangpublic class SmsTest 471f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang extends ActivityInstrumentationTestCase2<ComposeMessageActivity> { 481f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 491f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang private final static String TAG = "SmsTest"; 501f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected ComposeMessageActivity mActivity; 511f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected RecipientsEditor mRecipientsEditor; 521f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected EditText mTextEditor; 531f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected SmsTestRunner mInst; 541f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected String mRecipient; 551f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected List mRecipientsList = null; 561f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected long mReceiveTimer = 5 * 60 * 1000 ; // 5 minutes 571f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 581f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // default message to sent 591f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected String mMessage = 601f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang "Is this a dagger which I see before me," 611f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" The handle toward my hand? Come, let me clutch thee." 621f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" I have thee not, and yet I see thee still." 631f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" Art thou not, fatal vision, sensible" 641f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" To feeling as to sight? or art thou but" 651f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" A dagger of the mind, a false creation," 661f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" Proceeding from the heat-oppressed brain?" 671f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" I see thee yet, in form as palpable" 681f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang +" As this which now I draw."; 691f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 701f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected Long mThreadId; 711f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 721f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang public SmsTest() { 731f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang super(ComposeMessageActivity.class); 741f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 751f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 761f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang @Override 771f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected void setUp() throws Exception { 781f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang super.setUp(); 791f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 801f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mActivity = getActivity(); 811f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang ViewStub stub = (ViewStub)mActivity.findViewById(R.id.recipients_editor_stub); 821f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (stub != null) { 831f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang View stubView = stub.inflate(); 841f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsEditor = (RecipientsEditor) stubView.findViewById(R.id.recipients_editor); 851f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } else { 861f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsEditor = (RecipientsEditor) mActivity.findViewById(R.id.recipients_editor); 871f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsEditor.setVisibility(View.VISIBLE); 881f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 891f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mTextEditor = (EditText)mActivity.findViewById(R.id.embedded_text_editor); 901f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 911f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // parse input argument 921f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mInst = (SmsTestRunner)getInstrumentation(); 931f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (mInst.mRecipient != null) { 941f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipient = mInst.mRecipient; 951f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } else { 961f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipient = getLocalNumber(); 971f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 981f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (mInst.mReceiveTimer > 0) { 991f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mReceiveTimer = mInst.mReceiveTimer; 1001f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1011f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang loadRecipientsList(); 1021f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang loadMessage(); 10317834025dee14d7d0ecd00cad1c53c9c3d080fa3Xia Wang Log.v(TAG, String.format("mReceiveTimer: %d, mRecipient: %s, mMessage: ", 10417834025dee14d7d0ecd00cad1c53c9c3d080fa3Xia Wang mReceiveTimer, mRecipient, mMessage)); 1051f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1061f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1071f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang @Override 1081f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected void tearDown() throws Exception { 1091f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang super.tearDown(); 1101f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1111f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1121f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang /** 1131f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Load recipients from a file 1141f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 1151f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang private void loadRecipientsList() { 1161f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang String recipientFileName = mInst.mRecipientFileName; 1171f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (recipientFileName == null) { 1181f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return; 1191f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1201f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // Read recipients from a file 1211f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsList = new ArrayList<String>(); 1221f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang StringBuilder sb = new StringBuilder(); 1231f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang try { 1241f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.v(TAG, "Loading recipients"); 1251f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang FileInputStream f = mInst.getTargetContext().openFileInput(recipientFileName); 1261f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang int c; 1271f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang while ((c = f.read()) != -1) { 1281f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (c == '\r' || c == '\n' || c == ',') { 1291f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang String recipient = sb.toString().trim(); 1301f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (recipient.length() > 0) { 1311f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsList.add(recipient); 1321f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1331f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang sb.setLength(0); 1341f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } else { 1351f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang sb.append((char)c); 1361f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1371f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1381f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang f.close(); 1391f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } catch (Exception e) { 1401f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.e(TAG, "can't open recipients file " + recipientFileName); 1411f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return; 1421f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1431f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1441f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1451f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang /** 1461f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * Load messages from a file, save the message in mMessage 1471f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 1481f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang private void loadMessage() { 1491f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang String messageFileName = mInst.mMessageFileName; 1501f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (messageFileName == null) { 1511f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return; 1521f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1531f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1541f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Context targetAppContext = mInst.getTargetContext().getApplicationContext(); 1551f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang String filePath = String.format("%s/%s", targetAppContext.getFilesDir(), messageFileName); 15617834025dee14d7d0ecd00cad1c53c9c3d080fa3Xia Wang Log.v(TAG, "filePath: " + filePath); 1571f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // Read messages from a file 1581f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang byte[] buffer = new byte[(int) new File(filePath).length()]; 1591f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang BufferedInputStream bf = null; 1601f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang int numStrs = 0; 1611f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang try { 1621f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.v(TAG, "Loading messages"); 1631f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang bf = new BufferedInputStream( 1641f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mInst.getTargetContext().openFileInput(messageFileName)); 1651f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang numStrs = bf.read(buffer); 1661f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } catch (Exception e) { 1671f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.e(TAG, "can't open message file at " + 1681f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang targetAppContext.getFileStreamPath(messageFileName)); 1691f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } finally { 1701f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (bf != null) { 1711f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang try { bf.close(); } catch (IOException e) { 1721f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.v(TAG, "failed to close message file: " + 1731f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang targetAppContext.getFileStreamPath(messageFileName)); 1741f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1751f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1761f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1771f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (numStrs > 0) { 1781f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mMessage = new String(buffer); 1791f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1801f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1811f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1821f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang private abstract class MessageRunnable implements Runnable { 1831f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected String mRecipient; 1841f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1851f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang public void setRecipient(String recipient) { 1861f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipient = recipient; 1871f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1881f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1891f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 1901f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang private MessageRunnable mSendSmsMessage = new MessageRunnable() { 1911f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang public void run() { 1921f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // only on the first message will there be a recipients editor 1931f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (mRecipientsEditor.getVisibility() == View.VISIBLE) { 1941f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mRecipientsEditor.setText(mRecipient); 1951f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 1961f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mTextEditor.setText(mMessage); 1971f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang ImageButton send = (ImageButton)mActivity.findViewById(R.id.send_button_sms); 1981f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang send.performClick(); 1991f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2001f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang }; 2011f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 2021f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected void sleep(long sleepTime) { 2031f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang try { 2041f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Thread.sleep(sleepTime); 2051f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } catch (InterruptedException e) {} 2061f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2071f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 2081f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang /** 2091f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @return the local number for this test device 2101f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 2111f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected String getLocalNumber() { 2121f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return MessageUtils.getLocalNumber(); 2131f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2141f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 2151f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang /** 2161f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * send a message and verify the receiption using the local number and default timer 2171f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @return 2181f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 2191f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected boolean sendAndReceiveMessage() throws Throwable { 2201f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return sendAndReceiveMessage(mRecipient, mReceiveTimer); 2211f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2221f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 2231f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang /** 2241f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @param recipientNumber the recipient number for this sms 2251f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @param receiveTimer timer to wait for the received message, if it is null, default timer 2261f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * is used. 2271f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @return true if received message is equal to what sent, otherwise, return false 2281f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang * @throws Throwable 2291f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang */ 2301f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang protected boolean sendAndReceiveMessage(String recipientNumber, long timer) 2311f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang throws Throwable { 2321f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang long receiveTimer = mReceiveTimer; 2331f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (timer > 0) { 2341f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang receiveTimer = timer; 2351f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2361f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang int msgCount = mActivity.mMsgListAdapter.getCount(); 2371f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.v(TAG, "msgCount: " + msgCount); 2381f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mSendSmsMessage.setRecipient(recipientNumber); 2391f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang runTestOnUiThread(mSendSmsMessage); 2401f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang 2411f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // Wait for maximum 5 minutes to send the long message 2421f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // and then receive it. Make sure the sent and received messages are the same. 2431f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang boolean received = false; 2441f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang long startTime = System.currentTimeMillis(); 2451f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang while ((System.currentTimeMillis() - startTime) <= receiveTimer) { 2461f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang sleep( 5 * 1000); // wait 5 seconds between checks 2471f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Log.v(TAG, "Message Count: " + mActivity.mMsgListAdapter.getCount()); 2481f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang if (msgCount + 2 == mActivity.mMsgListAdapter.getCount()) { 2491f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // The "msgCount + 2" is to account for the sent and received message. 2501f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // Other cases: 1) fail to send/receive sms message, test fail 2511f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // 2) another message could be received by the target phone during this time 2521f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang // test will falsely fail 2531f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang Cursor cursor = mActivity.mMsgListAdapter.getCursor(); 2541f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang cursor.moveToLast(); 2551f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang String type = cursor.getString(COLUMN_MSG_TYPE); 2561f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang long msgId = cursor.getLong(COLUMN_ID); 2571f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang MessageItem msgItem = 2581f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mActivity.mMsgListAdapter.getCachedMessageItem(type, msgId, cursor); 2591f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang assertNotNull("got a null last MessageItem", msgItem); 2601f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang assertEquals("The sent and received messages aren't the same", 2611f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang mMessage, 2621f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang msgItem.mBody); 2631f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang received = true; 2641f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang break; 2651f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2661f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2671f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang assertTrue("Never received the sent message", received); 2681f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang return received; 2691f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang } 2701f530d377f9ec84723d9658a9ec8c9a396a32474Xia Wang} 271