/**
* 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 .
*/
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 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();
}
}
}