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
		
	
| 
								 
											11 years ago
										 
									 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 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();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |