You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			120 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Java
		
	
			
		
		
	
	
			120 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Java
		
	
| /**
 | |
|  * Copyright (C) 2015 Open Whisper Systems
 | |
|  *
 | |
|  * This program is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  * GNU General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU General Public License
 | |
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| package org.thoughtcrime.securesms;
 | |
| 
 | |
| import android.app.Activity;
 | |
| import android.app.Instrumentation.ActivityMonitor;
 | |
| import android.content.ContentProviderOperation;
 | |
| import android.content.ContentResolver;
 | |
| import android.content.Context;
 | |
| import android.database.Cursor;
 | |
| import android.net.Uri;
 | |
| import android.provider.ContactsContract;
 | |
| import android.support.test.espresso.NoActivityResumedException;
 | |
| import android.support.test.espresso.ViewInteraction;
 | |
| import android.util.Log;
 | |
| 
 | |
| import java.util.ArrayList;
 | |
| 
 | |
| import static android.support.test.espresso.action.ViewActions.replaceText;
 | |
| import static android.support.test.espresso.action.ViewActions.typeText;
 | |
| import static android.support.test.espresso.Espresso.closeSoftKeyboard;
 | |
| import static android.support.test.espresso.Espresso.pressBack;
 | |
| 
 | |
| public class EspressoUtil {
 | |
|   private final static String TAG = EspressoUtil.class.getSimpleName();
 | |
| 
 | |
|   public static void waitOn(Class<? extends Activity> clazz) {
 | |
|     Log.w(TAG, "waiting for " + clazz.getName());
 | |
|     new ActivityMonitor(clazz.getName(), null, true).waitForActivityWithTimeout(10000);
 | |
|   }
 | |
| 
 | |
|   public static void actuallyCloseSoftKeyboard() throws Exception {
 | |
|     closeSoftKeyboard();
 | |
|     Thread.sleep(800);
 | |
|   }
 | |
| 
 | |
|   public static void typeTextAndCloseKeyboard(ViewInteraction view, String text) throws Exception {
 | |
|     view.perform(typeText(text));
 | |
|     actuallyCloseSoftKeyboard();
 | |
|   }
 | |
| 
 | |
|   public static void replaceTextAndCloseKeyboard(ViewInteraction view, String text) throws Exception {
 | |
|     view.perform(replaceText(text));
 | |
|     actuallyCloseSoftKeyboard();
 | |
|   }
 | |
| 
 | |
|   public static void closeAllActivities() throws Exception {
 | |
|     for (int i = 0; i < 10; i++) {
 | |
|       try {
 | |
| 
 | |
|         pressBack();
 | |
| 
 | |
|       } catch (NoActivityResumedException e) {
 | |
|         Log.d(TAG, "you made me do this, android");
 | |
|         return;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     throw new IllegalStateException("what are you doing with 10 open activities?!");
 | |
|   }
 | |
| 
 | |
|   public static long addContact(Context context, String name, String number) throws Exception {
 | |
|     ArrayList<ContentProviderOperation> operations = new ArrayList<>();
 | |
| 
 | |
|     operations.add(ContentProviderOperation
 | |
|         .newInsert(ContactsContract.RawContacts.CONTENT_URI)
 | |
|         .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
 | |
|         .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
 | |
|         .build());
 | |
| 
 | |
|     operations.add(ContentProviderOperation
 | |
|         .newInsert(ContactsContract.Data.CONTENT_URI)
 | |
|         .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
 | |
|         .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
 | |
|         .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
 | |
|         .build());
 | |
| 
 | |
|       operations.add(ContentProviderOperation.
 | |
|           newInsert(ContactsContract.Data.CONTENT_URI)
 | |
|           .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
 | |
|           .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
 | |
|           .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
 | |
|           .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
 | |
|           .build());
 | |
| 
 | |
|     return context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operations).length;
 | |
|   }
 | |
| 
 | |
|   public static void removeAllContacts(Context context) throws Exception {
 | |
|     ContentResolver contentResolver = context.getContentResolver();
 | |
|     Cursor          cursor          = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
 | |
| 
 | |
|     try {
 | |
| 
 | |
|       while (cursor.moveToNext()) {
 | |
|         String contactKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
 | |
|         Uri    contactUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, contactKey);
 | |
|         contentResolver.delete(contactUri, null, null);
 | |
|       }
 | |
| 
 | |
|     } finally {
 | |
|       cursor.close();
 | |
|     }
 | |
|   }
 | |
| }
 |