Initial removal of dialer features.

- Moved main activities and classes out including all necessary dependencies
for a first working version.
- There are still dialer dependencies in contacts after this check-in. Further
separation coming.

Bug: 6993891
Change-Id: I1761b554fe5daf29acddbb43532f571191db2eaf
diff --git a/tests/Android.mk b/tests/Android.mk
index ef11c5e..241ff5e 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -6,6 +6,7 @@
 LOCAL_CERTIFICATE := shared
 
 LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_STATIC_JAVA_LIBRARIES := com.android.contacts.common.test
 
 # Include all test java files.
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index d80a35d..a3dacbe 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -76,16 +76,6 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".calllog.FillCallLogTestActivity"
-            android:label="@string/fillCallLogTest"
-            >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".streamitems.StreamItemPopulatorActivity"
             android:label="@string/streamItemPopulator"
             >
@@ -139,9 +129,4 @@
         android:label="Contacts launch performance">
     </instrumentation>
 
-    <instrumentation android:name="com.android.contacts.DialerLaunchPerformance"
-        android:targetPackage="com.android.contacts"
-        android:label="Dialer launch performance">
-    </instrumentation>
-
 </manifest>
diff --git a/tests/src/com/android/contacts/CallDetailActivityTest.java b/tests/src/com/android/contacts/CallDetailActivityTest.java
deleted file mode 100644
index ae28929..0000000
--- a/tests/src/com/android/contacts/CallDetailActivityTest.java
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts;
-
-import static com.android.contacts.CallDetailActivity.Tasks.UPDATE_PHONE_CALL_DETAILS;
-import static com.android.contacts.voicemail.VoicemailPlaybackPresenter.Tasks.CHECK_FOR_CONTENT;
-import static com.android.contacts.voicemail.VoicemailPlaybackPresenter.Tasks.PREPARE_MEDIA_PLAYER;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Intent;
-import android.content.res.AssetManager;
-import android.net.Uri;
-import android.provider.CallLog;
-import android.provider.VoicemailContract;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import android.view.Menu;
-import android.widget.TextView;
-
-import com.android.contacts.util.AsyncTaskExecutors;
-import com.android.contacts.util.FakeAsyncTaskExecutor;
-import com.android.contacts.util.IntegrationTestUtils;
-import com.android.contacts.util.LocaleTestUtils;
-import com.android.internal.view.menu.ContextMenuBuilder;
-import com.google.common.io.Closeables;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Unit tests for the {@link CallDetailActivity}.
- */
-@LargeTest
-public class CallDetailActivityTest extends ActivityInstrumentationTestCase2<CallDetailActivity> {
-    private static final String TEST_ASSET_NAME = "quick_test_recording.mp3";
-    private static final String MIME_TYPE = "audio/mp3";
-    private static final String CONTACT_NUMBER = "+1412555555";
-    private static final String VOICEMAIL_FILE_LOCATION = "/sdcard/sadlfj893w4j23o9sfu.mp3";
-
-    private Uri mCallLogUri;
-    private Uri mVoicemailUri;
-    private IntegrationTestUtils mTestUtils;
-    private LocaleTestUtils mLocaleTestUtils;
-    private FakeAsyncTaskExecutor mFakeAsyncTaskExecutor;
-    private CallDetailActivity mActivityUnderTest;
-
-    public CallDetailActivityTest() {
-        super(CallDetailActivity.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mFakeAsyncTaskExecutor = new FakeAsyncTaskExecutor(getInstrumentation());
-        AsyncTaskExecutors.setFactoryForTest(mFakeAsyncTaskExecutor.getFactory());
-        // I don't like the default of focus-mode for tests, the green focus border makes the
-        // screenshots look weak.
-        setActivityInitialTouchMode(true);
-        mTestUtils = new IntegrationTestUtils(getInstrumentation());
-        // Some of the tests rely on the text that appears on screen - safest to force a
-        // specific locale.
-        mLocaleTestUtils = new LocaleTestUtils(getInstrumentation().getTargetContext());
-        mLocaleTestUtils.setLocale(Locale.US);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mLocaleTestUtils.restoreLocale();
-        mLocaleTestUtils = null;
-        cleanUpUri();
-        mTestUtils = null;
-        AsyncTaskExecutors.setFactoryForTest(null);
-        super.tearDown();
-    }
-
-    public void testInitialActivityStartsWithFetchingVoicemail() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        // When the activity first starts, we will show "Fetching voicemail" on the screen.
-        // The duration should not be visible.
-        assertHasOneTextViewContaining("Fetching voicemail");
-        assertZeroTextViewsContaining("00:00");
-    }
-
-    public void testWhenCheckForContentCompletes_UiShowsBuffering() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        // There is a background check that is testing to see if we have the content available.
-        // Once that task completes, we shouldn't be showing the fetching message, we should
-        // be showing "Buffering".
-        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
-        assertHasOneTextViewContaining("Buffering");
-        assertZeroTextViewsContaining("Fetching voicemail");
-    }
-
-    public void testInvalidVoicemailShowsErrorMessage() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
-        // There should be exactly one background task ready to prepare the media player.
-        // Preparing the media player will have thrown an IOException since the file doesn't exist.
-        // This should have put a failed to play message on screen, buffering is gone.
-        mFakeAsyncTaskExecutor.runTask(PREPARE_MEDIA_PLAYER);
-        assertHasOneTextViewContaining("Couldn't play voicemail");
-        assertZeroTextViewsContaining("Buffering");
-    }
-
-    public void testOnResumeDoesNotCreateManyFragments() throws Throwable {
-        // There was a bug where every time the activity was resumed, a new fragment was created.
-        // Before the fix, this was failing reproducibly with at least 3 "Buffering" views.
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
-        getInstrumentation().runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                getInstrumentation().callActivityOnPause(mActivityUnderTest);
-                getInstrumentation().callActivityOnResume(mActivityUnderTest);
-                getInstrumentation().callActivityOnPause(mActivityUnderTest);
-                getInstrumentation().callActivityOnResume(mActivityUnderTest);
-            }
-        });
-        assertHasOneTextViewContaining("Buffering");
-    }
-
-    /**
-     * Test for bug where increase rate button with invalid voicemail causes a crash.
-     * <p>
-     * The repro steps for this crash were to open a voicemail that does not have an attachment,
-     * then click the play button (which just reported an error), then after that try to adjust the
-     * rate.  See http://b/5047879.
-     */
-    public void testClickIncreaseRateButtonWithInvalidVoicemailDoesNotCrash() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        mTestUtils.clickButton(mActivityUnderTest, R.id.playback_start_stop);
-        mTestUtils.clickButton(mActivityUnderTest, R.id.rate_increase_button);
-    }
-
-    /** Test for bug where missing Extras on intent used to start Activity causes NPE. */
-    public void testCallLogUriWithMissingExtrasShouldNotCauseNPE() throws Throwable {
-        setActivityIntentForTestCallEntry();
-        startActivityUnderTest();
-    }
-
-    /**
-     * Test for bug where voicemails should not have remove-from-call-log entry.
-     * <p>
-     * See http://b/5054103.
-     */
-    public void testVoicemailDoesNotHaveRemoveFromCallLog() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        Menu menu = new ContextMenuBuilder(mActivityUnderTest);
-        mActivityUnderTest.onCreateOptionsMenu(menu);
-        mActivityUnderTest.onPrepareOptionsMenu(menu);
-        assertFalse(menu.findItem(R.id.menu_remove_from_call_log).isVisible());
-    }
-
-    /** Test to check that I haven't broken the remove-from-call-log entry from regular calls. */
-    public void testRegularCallDoesHaveRemoveFromCallLog() throws Throwable {
-        setActivityIntentForTestCallEntry();
-        startActivityUnderTest();
-        Menu menu = new ContextMenuBuilder(mActivityUnderTest);
-        mActivityUnderTest.onCreateOptionsMenu(menu);
-        mActivityUnderTest.onPrepareOptionsMenu(menu);
-        assertTrue(menu.findItem(R.id.menu_remove_from_call_log).isVisible());
-    }
-
-    /**
-     * Test to show that we are correctly displaying playback rate on the ui.
-     * <p>
-     * See bug http://b/5044075.
-     */
-    @Suppress
-    public void testVoicemailPlaybackRateDisplayedOnUi() throws Throwable {
-        setActivityIntentForTestVoicemailEntry();
-        startActivityUnderTest();
-        // Find the TextView containing the duration.  It should be initially displaying "00:00".
-        List<TextView> views = mTestUtils.getTextViewsWithString(mActivityUnderTest, "00:00");
-        assertEquals(1, views.size());
-        TextView timeDisplay = views.get(0);
-        // Hit the plus button.  At this point we should be displaying "fast speed".
-        mTestUtils.clickButton(mActivityUnderTest, R.id.rate_increase_button);
-        assertEquals("fast speed", mTestUtils.getText(timeDisplay));
-        // Hit the minus button.  We should be back to "normal" speed.
-        mTestUtils.clickButton(mActivityUnderTest, R.id.rate_decrease_button);
-        assertEquals("normal speed", mTestUtils.getText(timeDisplay));
-        // Wait for one and a half seconds.  The timer will be back.
-        Thread.sleep(1500);
-        assertEquals("00:00", mTestUtils.getText(timeDisplay));
-    }
-
-    @Suppress
-    public void testClickingCallStopsPlayback() throws Throwable {
-        setActivityIntentForRealFileVoicemailEntry();
-        startActivityUnderTest();
-        mFakeAsyncTaskExecutor.runTask(CHECK_FOR_CONTENT);
-        mFakeAsyncTaskExecutor.runTask(PREPARE_MEDIA_PLAYER);
-        mTestUtils.clickButton(mActivityUnderTest, R.id.playback_speakerphone);
-        mTestUtils.clickButton(mActivityUnderTest, R.id.playback_start_stop);
-        mTestUtils.clickButton(mActivityUnderTest, R.id.call_and_sms_main_action);
-        Thread.sleep(2000);
-        // TODO: Suppressed the test for now, because I'm looking for an easy way to say "the audio
-        // is not playing at this point", and I can't find it without doing dirty things.
-    }
-
-    private void setActivityIntentForTestCallEntry() {
-        assertNull(mCallLogUri);
-        ContentResolver contentResolver = getContentResolver();
-        ContentValues values = new ContentValues();
-        values.put(CallLog.Calls.NUMBER, CONTACT_NUMBER);
-        values.put(CallLog.Calls.TYPE, CallLog.Calls.INCOMING_TYPE);
-        mCallLogUri = contentResolver.insert(CallLog.Calls.CONTENT_URI, values);
-        setActivityIntent(new Intent(Intent.ACTION_VIEW, mCallLogUri));
-    }
-
-    private void setActivityIntentForTestVoicemailEntry() {
-        assertNull(mVoicemailUri);
-        ContentResolver contentResolver = getContentResolver();
-        ContentValues values = new ContentValues();
-        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
-        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-        values.put(VoicemailContract.Voicemails._DATA, VOICEMAIL_FILE_LOCATION);
-        mVoicemailUri = contentResolver.insert(VoicemailContract.Voicemails.CONTENT_URI, values);
-        Uri callLogUri = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL,
-                ContentUris.parseId(mVoicemailUri));
-        Intent intent = new Intent(Intent.ACTION_VIEW, callLogUri);
-        intent.putExtra(CallDetailActivity.EXTRA_VOICEMAIL_URI, mVoicemailUri);
-        setActivityIntent(intent);
-    }
-
-    private void setActivityIntentForRealFileVoicemailEntry() throws IOException {
-        assertNull(mVoicemailUri);
-        ContentValues values = new ContentValues();
-        values.put(VoicemailContract.Voicemails.DATE, String.valueOf(System.currentTimeMillis()));
-        values.put(VoicemailContract.Voicemails.NUMBER, CONTACT_NUMBER);
-        values.put(VoicemailContract.Voicemails.MIME_TYPE, MIME_TYPE);
-        values.put(VoicemailContract.Voicemails.HAS_CONTENT, 1);
-        String packageName = getInstrumentation().getTargetContext().getPackageName();
-        mVoicemailUri = getContentResolver().insert(
-                VoicemailContract.Voicemails.buildSourceUri(packageName), values);
-        AssetManager assets = getAssets();
-        OutputStream outputStream = null;
-        InputStream inputStream = null;
-        try {
-            inputStream = assets.open(TEST_ASSET_NAME);
-            outputStream = getContentResolver().openOutputStream(mVoicemailUri);
-            copyBetweenStreams(inputStream, outputStream);
-        } finally {
-            Closeables.closeQuietly(outputStream);
-            Closeables.closeQuietly(inputStream);
-        }
-        Uri callLogUri = ContentUris.withAppendedId(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL,
-                ContentUris.parseId(mVoicemailUri));
-        Intent intent = new Intent(Intent.ACTION_VIEW, callLogUri);
-        intent.putExtra(CallDetailActivity.EXTRA_VOICEMAIL_URI, mVoicemailUri);
-        setActivityIntent(intent);
-    }
-
-    public void copyBetweenStreams(InputStream in, OutputStream out) throws IOException {
-        byte[] buffer = new byte[1024];
-        int bytesRead;
-        int total = 0;
-        while ((bytesRead = in.read(buffer)) != -1) {
-            total += bytesRead;
-            out.write(buffer, 0, bytesRead);
-        }
-    }
-
-    private void cleanUpUri() {
-        if (mVoicemailUri != null) {
-            getContentResolver().delete(VoicemailContract.Voicemails.CONTENT_URI,
-                    "_ID = ?", new String[] { String.valueOf(ContentUris.parseId(mVoicemailUri)) });
-            mVoicemailUri = null;
-        }
-        if (mCallLogUri != null) {
-            getContentResolver().delete(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL,
-                    "_ID = ?", new String[] { String.valueOf(ContentUris.parseId(mCallLogUri)) });
-            mCallLogUri = null;
-        }
-    }
-
-    private ContentResolver getContentResolver() {
-        return getInstrumentation().getTargetContext().getContentResolver();
-    }
-
-    private TextView assertHasOneTextViewContaining(String text) throws Throwable {
-        assertNotNull(mActivityUnderTest);
-        List<TextView> views = mTestUtils.getTextViewsWithString(mActivityUnderTest, text);
-        assertEquals("There should have been one TextView with text '" + text + "' but found "
-                + views, 1, views.size());
-        return views.get(0);
-    }
-
-    private void assertZeroTextViewsContaining(String text) throws Throwable {
-        assertNotNull(mActivityUnderTest);
-        List<TextView> views = mTestUtils.getTextViewsWithString(mActivityUnderTest, text);
-        assertEquals("There should have been no TextViews with text '" + text + "' but found "
-                + views, 0,  views.size());
-    }
-
-    private void startActivityUnderTest() throws Throwable {
-        assertNull(mActivityUnderTest);
-        mActivityUnderTest = getActivity();
-        assertNotNull("activity should not be null", mActivityUnderTest);
-        // We have to run all tasks, not just one.
-        // This is because it seems that we can have onResume, onPause, onResume during the course
-        // of a single unit test.
-        mFakeAsyncTaskExecutor.runAllTasks(UPDATE_PHONE_CALL_DETAILS);
-    }
-
-    private AssetManager getAssets() {
-        return getInstrumentation().getContext().getAssets();
-    }
-}
diff --git a/tests/src/com/android/contacts/DialerLaunchPerformance.java b/tests/src/com/android/contacts/DialerLaunchPerformance.java
deleted file mode 100644
index 0803c6b..0000000
--- a/tests/src/com/android/contacts/DialerLaunchPerformance.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2007 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 com.android.contacts;
-
-import android.app.Activity;
-import android.content.ComponentName;
-import android.content.Intent;
-import android.os.Bundle;
-import android.test.LaunchPerformanceBase;
-
-/**
- * Instrumentation class for Address Book launch performance testing.
- */
-public class DialerLaunchPerformance extends LaunchPerformanceBase {
-
-    @Override
-    public void onCreate(Bundle arguments) {
-        mIntent.setAction(Intent.ACTION_MAIN);
-        mIntent.addCategory(Intent.CATEGORY_LAUNCHER);
-        mIntent.setComponent(new ComponentName("com.android.contacts",
-                "com.android.contacts.activities.DialtactsActivity"));
-
-        start();
-    }
-
-    /**
-     * Calls LaunchApp and finish.
-     */
-    @Override
-    public void onStart() {
-        super.onStart();
-        LaunchApp();
-        finish(Activity.RESULT_OK, mResults);
-    }
-}
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
deleted file mode 100644
index b852b58..0000000
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * Copyright (C) 2010 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 com.android.contacts;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.CallLog.Calls;
-import android.test.AndroidTestCase;
-import android.text.Html;
-import android.text.Spanned;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.contacts.calllog.CallTypeHelper;
-import com.android.contacts.calllog.PhoneNumberHelper;
-import com.android.contacts.calllog.TestPhoneNumberHelper;
-import com.android.contacts.util.LocaleTestUtils;
-import com.android.internal.telephony.CallerInfo;
-
-import java.util.GregorianCalendar;
-import java.util.Locale;
-
-/**
- * Unit tests for {@link PhoneCallDetailsHelper}.
- */
-public class PhoneCallDetailsHelperTest extends AndroidTestCase {
-    /** The number to be used to access the voicemail. */
-    private static final String TEST_VOICEMAIL_NUMBER = "125";
-    /** The date of the call log entry. */
-    private static final long TEST_DATE =
-        new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis();
-    /** A test duration value for phone calls. */
-    private static final long TEST_DURATION = 62300;
-    /** The number of the caller/callee in the log entry. */
-    private static final String TEST_NUMBER = "14125555555";
-    /** The formatted version of {@link #TEST_NUMBER}. */
-    private static final String TEST_FORMATTED_NUMBER = "1-412-255-5555";
-    /** The country ISO name used in the tests. */
-    private static final String TEST_COUNTRY_ISO = "US";
-    /** The geocoded location used in the tests. */
-    private static final String TEST_GEOCODE = "United States";
-
-    /** The object under test. */
-    private PhoneCallDetailsHelper mHelper;
-    /** The views to fill. */
-    private PhoneCallDetailsViews mViews;
-    private TextView mNameView;
-    private PhoneNumberHelper mPhoneNumberHelper;
-    private LocaleTestUtils mLocaleTestUtils;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        Context context = getContext();
-        Resources resources = context.getResources();
-        CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
-        mPhoneNumberHelper = new TestPhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
-        mHelper = new PhoneCallDetailsHelper(resources, callTypeHelper, mPhoneNumberHelper);
-        mHelper.setCurrentTimeForTest(
-                new GregorianCalendar(2011, 5, 4, 13, 0, 0).getTimeInMillis());
-        mViews = PhoneCallDetailsViews.createForTest(context);
-        mNameView = new TextView(context);
-        mLocaleTestUtils = new LocaleTestUtils(getContext());
-        mLocaleTestUtils.setLocale(Locale.US);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mLocaleTestUtils.restoreLocale();
-        mNameView = null;
-        mViews = null;
-        mHelper = null;
-        mPhoneNumberHelper = null;
-        super.tearDown();
-    }
-
-    public void testSetPhoneCallDetails_Unknown() {
-        setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER);
-        assertNameEqualsResource(R.string.unknown);
-    }
-
-    public void testSetPhoneCallDetails_Private() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, CallerInfo.PRIVATE_NUMBER);
-        assertNameEqualsResource(R.string.private_num);
-    }
-
-    public void testSetPhoneCallDetails_Payphone() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, CallerInfo.PAYPHONE_NUMBER);
-        assertNameEqualsResource(R.string.payphone);
-    }
-
-    public void testSetPhoneCallDetails_Voicemail() {
-        setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, TEST_VOICEMAIL_NUMBER);
-        assertNameEqualsResource(R.string.voicemail);
-    }
-
-    public void testSetPhoneCallDetails_Normal() {
-        setPhoneCallDetailsWithNumber("14125551212", "1-412-555-1212");
-        assertEquals("yesterday", mViews.callTypeAndDate.getText().toString());
-        assertEqualsHtml("<font color='#33b5e5'><b>yesterday</b></font>",
-                mViews.callTypeAndDate.getText());
-    }
-
-    /** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */
-    private void assertEqualsHtml(String expectedHtml, CharSequence actualText) {
-        // In order to contain HTML, the text should actually be a Spanned.
-        assertTrue(actualText instanceof Spanned);
-        Spanned actualSpanned = (Spanned) actualText;
-        // Convert from and to HTML to take care of alternative formatting of HTML.
-        assertEquals(Html.toHtml(Html.fromHtml(expectedHtml)), Html.toHtml(actualSpanned));
-
-    }
-
-    public void testSetPhoneCallDetails_Date() {
-        mHelper.setCurrentTimeForTest(
-                new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis());
-
-        setPhoneCallDetailsWithDate(
-                new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("0 mins ago");
-
-        setPhoneCallDetailsWithDate(
-                new GregorianCalendar(2011, 5, 3, 12, 0, 0).getTimeInMillis());
-        assertDateEquals("1 hour ago");
-
-        setPhoneCallDetailsWithDate(
-                new GregorianCalendar(2011, 5, 2, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("yesterday");
-
-        setPhoneCallDetailsWithDate(
-                new GregorianCalendar(2011, 5, 1, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("2 days ago");
-    }
-
-    public void testSetPhoneCallDetails_CallTypeIcons() {
-        setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE);
-        assertCallTypeIconsEquals(Calls.INCOMING_TYPE);
-
-        setPhoneCallDetailsWithCallTypeIcons(Calls.OUTGOING_TYPE);
-        assertCallTypeIconsEquals(Calls.OUTGOING_TYPE);
-
-        setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE);
-        assertCallTypeIconsEquals(Calls.MISSED_TYPE);
-
-        setPhoneCallDetailsWithCallTypeIcons(Calls.VOICEMAIL_TYPE);
-        assertCallTypeIconsEquals(Calls.VOICEMAIL_TYPE);
-    }
-
-    public void testSetPhoneCallDetails_MultipleCallTypeIcons() {
-        setPhoneCallDetailsWithCallTypeIcons(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallTypeIconsEquals(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-
-        setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-        assertCallTypeIconsEquals(Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-    }
-
-    public void testSetPhoneCallDetails_MultipleCallTypeIconsLastOneDropped() {
-        setPhoneCallDetailsWithCallTypeIcons(Calls.MISSED_TYPE, Calls.MISSED_TYPE,
-                Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallTypeIconsEqualsPlusOverflow("(4)",
-                Calls.MISSED_TYPE, Calls.MISSED_TYPE, Calls.INCOMING_TYPE);
-    }
-
-    public void testSetPhoneCallDetails_Geocode() {
-        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "Pennsylvania");
-        assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertNumberEquals("Pennsylvania");  // The geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_NoGeocode() {
-        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", null);
-        assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertNumberEquals("-");  // The empty geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_EmptyGeocode() {
-        setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "");
-        assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertNumberEquals("-");  // The empty geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_NoGeocodeForVoicemail() {
-        setPhoneCallDetailsWithNumberAndGeocode(TEST_VOICEMAIL_NUMBER, "", "United States");
-        assertNumberEquals("-");  // The empty geocode is shown as the number.
-    }
-
-    public void testSetPhoneCallDetails_Highlighted() {
-        setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, "");
-    }
-
-    public void testSetCallDetailsHeader_NumberOnly() {
-        setCallDetailsHeaderWithNumberOnly(TEST_NUMBER);
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("Add to contacts", mNameView.getText().toString());
-    }
-
-    public void testSetCallDetailsHeader_UnknownNumber() {
-        setCallDetailsHeaderWithNumberOnly(CallerInfo.UNKNOWN_NUMBER);
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("Unknown", mNameView.getText().toString());
-    }
-
-    public void testSetCallDetailsHeader_PrivateNumber() {
-        setCallDetailsHeaderWithNumberOnly(CallerInfo.PRIVATE_NUMBER);
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("Private number", mNameView.getText().toString());
-    }
-
-    public void testSetCallDetailsHeader_PayphoneNumber() {
-        setCallDetailsHeaderWithNumberOnly(CallerInfo.PAYPHONE_NUMBER);
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("Pay phone", mNameView.getText().toString());
-    }
-
-    public void testSetCallDetailsHeader_VoicemailNumber() {
-        setCallDetailsHeaderWithNumberOnly(TEST_VOICEMAIL_NUMBER);
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("Voicemail", mNameView.getText().toString());
-    }
-
-    public void testSetCallDetailsHeader() {
-        setCallDetailsHeader("John Doe");
-        assertEquals(View.VISIBLE, mNameView.getVisibility());
-        assertEquals("John Doe", mNameView.getText().toString());
-    }
-
-    /** Asserts that the name text field contains the value of the given string resource. */
-    private void assertNameEqualsResource(int resId) {
-        assertNameEquals(getContext().getString(resId));
-    }
-
-    /** Asserts that the name text field contains the given string value. */
-    private void assertNameEquals(String text) {
-        assertEquals(text, mViews.nameView.getText().toString());
-    }
-
-    /** Asserts that the number text field contains the given string value. */
-    private void assertNumberEquals(String text) {
-        assertEquals(text, mViews.numberView.getText().toString());
-    }
-
-    /** Asserts that the date text field contains the given string value. */
-    private void assertDateEquals(String text) {
-        assertEquals(text, mViews.callTypeAndDate.getText().toString());
-    }
-
-    /** Asserts that the call type contains the images with the given drawables. */
-    private void assertCallTypeIconsEquals(int... ids) {
-        assertEquals(ids.length, mViews.callTypeIcons.getCount());
-        for (int index = 0; index < ids.length; ++index) {
-            int id = ids[index];
-            assertEquals(id, mViews.callTypeIcons.getCallType(index));
-        }
-        assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
-        assertEquals("yesterday", mViews.callTypeAndDate.getText().toString());
-    }
-
-    /**
-     * Asserts that the call type contains the images with the given drawables and shows the given
-     * text next to the icons.
-     */
-    private void assertCallTypeIconsEqualsPlusOverflow(String overflowText, int... ids) {
-        assertEquals(ids.length, mViews.callTypeIcons.getCount());
-        for (int index = 0; index < ids.length; ++index) {
-            int id = ids[index];
-            assertEquals(id, mViews.callTypeIcons.getCallType(index));
-        }
-        assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
-        assertEquals(overflowText + " yesterday", mViews.callTypeAndDate.getText().toString());
-    }
-
-    /** Sets the phone call details with default values and the given number. */
-    private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
-        setPhoneCallDetailsWithNumberAndGeocode(number, formattedNumber, TEST_GEOCODE);
-    }
-
-    /** Sets the phone call details with default values and the given number. */
-    private void setPhoneCallDetailsWithNumberAndGeocode(String number, String formattedNumber,
-            String geocodedLocation) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
-                        new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
-                true);
-    }
-
-    /** Sets the phone call details with default values and the given date. */
-    private void setPhoneCallDetailsWithDate(long date) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION),
-                false);
-    }
-
-    /** Sets the phone call details with default values and the given call types using icons. */
-    private void setPhoneCallDetailsWithCallTypeIcons(int... callTypes) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, callTypes, TEST_DATE, TEST_DURATION),
-                false);
-    }
-
-    private void setCallDetailsHeaderWithNumberOnly(String number) {
-        mHelper.setCallDetailsHeader(mNameView,
-                new PhoneCallDetails(number, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION));
-    }
-
-    private void setCallDetailsHeader(String name) {
-        mHelper.setCallDetailsHeader(mNameView,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, new int[]{ Calls.INCOMING_TYPE }, TEST_DATE, TEST_DURATION,
-                        name, 0, "", null, null));
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java b/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java
deleted file mode 100644
index 5bc31f9..0000000
--- a/tests/src/com/android/contacts/calllog/CallLogAdapterTest.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.calllog;
-
-import android.content.Context;
-import android.database.MatrixCursor;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.view.View;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-/**
- * Unit tests for {@link CallLogAdapter}.
- */
-@SmallTest
-public class CallLogAdapterTest extends AndroidTestCase {
-    private static final String TEST_NUMBER = "12345678";
-    private static final String TEST_NAME = "name";
-    private static final String TEST_NUMBER_LABEL = "label";
-    private static final int TEST_NUMBER_TYPE = 1;
-    private static final String TEST_COUNTRY_ISO = "US";
-
-    /** The object under test. */
-    private TestCallLogAdapter mAdapter;
-
-    private MatrixCursor mCursor;
-    private View mView;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        // Use a call fetcher that does not do anything.
-        CallLogAdapter.CallFetcher fakeCallFetcher = new CallLogAdapter.CallFetcher() {
-            @Override
-            public void fetchCalls() {}
-        };
-
-        ContactInfoHelper fakeContactInfoHelper =
-                new ContactInfoHelper(getContext(), TEST_COUNTRY_ISO) {
-                    @Override
-                    public ContactInfo lookupNumber(String number, String countryIso) {
-                        ContactInfo info = new ContactInfo();
-                        info.number = number;
-                        info.formattedNumber = number;
-                        return info;
-                    }
-                };
-
-        mAdapter = new TestCallLogAdapter(getContext(), fakeCallFetcher, fakeContactInfoHelper);
-        // The cursor used in the tests to store the entries to display.
-        mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);
-        mCursor.moveToFirst();
-        // The views into which to store the data.
-        mView = new View(getContext());
-        mView.setTag(CallLogListItemViews.createForTest(getContext()));
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mAdapter = null;
-        mCursor = null;
-        mView = null;
-        super.tearDown();
-    }
-
-    public void testBindView_NoCallLogCacheNorMemoryCache_EnqueueRequest() {
-        mCursor.addRow(createCallLogEntry());
-
-        // Bind the views of a single row.
-        mAdapter.bindStandAloneView(mView, getContext(), mCursor);
-
-        // There is one request for contact details.
-        assertEquals(1, mAdapter.requests.size());
-
-        TestCallLogAdapter.Request request = mAdapter.requests.get(0);
-        // It is for the number we need to show.
-        assertEquals(TEST_NUMBER, request.number);
-        // It has the right country.
-        assertEquals(TEST_COUNTRY_ISO, request.countryIso);
-        // Since there is nothing in the cache, it is an immediate request.
-        assertTrue("should be immediate", request.immediate);
-    }
-
-    public void testBindView_CallLogCacheButNoMemoryCache_EnqueueRequest() {
-        mCursor.addRow(createCallLogEntryWithCachedValues());
-
-        // Bind the views of a single row.
-        mAdapter.bindStandAloneView(mView, getContext(), mCursor);
-
-        // There is one request for contact details.
-        assertEquals(1, mAdapter.requests.size());
-
-        TestCallLogAdapter.Request request = mAdapter.requests.get(0);
-        // The values passed to the request, match the ones in the call log cache.
-        assertEquals(TEST_NAME, request.callLogInfo.name);
-        assertEquals(1, request.callLogInfo.type);
-        assertEquals(TEST_NUMBER_LABEL, request.callLogInfo.label);
-    }
-
-
-    public void testBindView_NoCallLogButMemoryCache_EnqueueRequest() {
-        mCursor.addRow(createCallLogEntry());
-        mAdapter.injectContactInfoForTest(TEST_NUMBER, TEST_COUNTRY_ISO, createContactInfo());
-
-        // Bind the views of a single row.
-        mAdapter.bindStandAloneView(mView, getContext(), mCursor);
-
-        // There is one request for contact details.
-        assertEquals(1, mAdapter.requests.size());
-
-        TestCallLogAdapter.Request request = mAdapter.requests.get(0);
-        // Since there is something in the cache, it is not an immediate request.
-        assertFalse("should not be immediate", request.immediate);
-    }
-
-    public void testBindView_BothCallLogAndMemoryCache_NoEnqueueRequest() {
-        mCursor.addRow(createCallLogEntryWithCachedValues());
-        mAdapter.injectContactInfoForTest(TEST_NUMBER, TEST_COUNTRY_ISO, createContactInfo());
-
-        // Bind the views of a single row.
-        mAdapter.bindStandAloneView(mView, getContext(), mCursor);
-
-        // Cache and call log are up-to-date: no need to request update.
-        assertEquals(0, mAdapter.requests.size());
-    }
-
-    public void testBindView_MismatchBetwenCallLogAndMemoryCache_EnqueueRequest() {
-        mCursor.addRow(createCallLogEntryWithCachedValues());
-
-        // Contact info contains a different name.
-        ContactInfo info = createContactInfo();
-        info.name = "new name";
-        mAdapter.injectContactInfoForTest(TEST_NUMBER, TEST_COUNTRY_ISO, info);
-
-        // Bind the views of a single row.
-        mAdapter.bindStandAloneView(mView, getContext(), mCursor);
-
-        // There is one request for contact details.
-        assertEquals(1, mAdapter.requests.size());
-
-        TestCallLogAdapter.Request request = mAdapter.requests.get(0);
-        // Since there is something in the cache, it is not an immediate request.
-        assertFalse("should not be immediate", request.immediate);
-    }
-
-    /** Returns a contact info with default values. */
-    private ContactInfo createContactInfo() {
-        ContactInfo info = new ContactInfo();
-        info.number = TEST_NUMBER;
-        info.name = TEST_NAME;
-        info.type = TEST_NUMBER_TYPE;
-        info.label = TEST_NUMBER_LABEL;
-        return info;
-    }
-
-    /** Returns a call log entry without cached values. */
-    private Object[] createCallLogEntry() {
-        Object[] values = CallLogQueryTestUtils.createTestExtendedValues();
-        values[CallLogQuery.NUMBER] = TEST_NUMBER;
-        values[CallLogQuery.COUNTRY_ISO] = TEST_COUNTRY_ISO;
-        return values;
-    }
-
-    /** Returns a call log entry with a cached values. */
-    private Object[] createCallLogEntryWithCachedValues() {
-        Object[] values = createCallLogEntry();
-        values[CallLogQuery.CACHED_NAME] = TEST_NAME;
-        values[CallLogQuery.CACHED_NUMBER_TYPE] = TEST_NUMBER_TYPE;
-        values[CallLogQuery.CACHED_NUMBER_LABEL] = TEST_NUMBER_LABEL;
-        return values;
-    }
-
-    /**
-     * Subclass of {@link CallLogAdapter} used in tests to intercept certain calls.
-     */
-    // TODO: This would be better done by splitting the contact lookup into a collaborator class
-    // instead.
-    private static final class TestCallLogAdapter extends CallLogAdapter {
-        public static class Request {
-            public final String number;
-            public final String countryIso;
-            public final ContactInfo callLogInfo;
-            public final boolean immediate;
-
-            public Request(String number, String countryIso, ContactInfo callLogInfo,
-                    boolean immediate) {
-                this.number = number;
-                this.countryIso = countryIso;
-                this.callLogInfo = callLogInfo;
-                this.immediate = immediate;
-            }
-        }
-
-        public final List<Request> requests = Lists.newArrayList();
-
-        public TestCallLogAdapter(Context context, CallFetcher callFetcher,
-                ContactInfoHelper contactInfoHelper) {
-            super(context, callFetcher, contactInfoHelper);
-        }
-
-        @Override
-        void enqueueRequest(String number, String countryIso, ContactInfo callLogInfo,
-                boolean immediate) {
-            requests.add(new Request(number, countryIso, callLogInfo, immediate));
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java b/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
deleted file mode 100644
index 0eaca60..0000000
--- a/tests/src/com/android/contacts/calllog/CallLogFragmentTest.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * 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 com.android.contacts.calllog;
-
-import android.app.FragmentManager;
-import android.app.FragmentTransaction;
-import android.content.ComponentName;
-import android.content.ContentUris;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.MatrixCursor;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.net.Uri;
-import android.provider.CallLog.Calls;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.VoicemailContract;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import com.android.contacts.CallDetailActivity;
-import com.android.contacts.R;
-import com.android.contacts.test.FragmentTestActivity;
-import com.android.internal.telephony.CallerInfo;
-
-import java.util.Date;
-import java.util.Formatter;
-import java.util.HashMap;
-import java.util.Random;
-
-/**
- * Tests for the contact call list activity.
- *
- * Running all tests:
- *
- *   runtest contacts
- * or
- *   adb shell am instrument \
- *     -w com.android.contacts.tests/android.test.InstrumentationTestRunner
- */
-@LargeTest
-public class CallLogFragmentTest extends ActivityInstrumentationTestCase2<FragmentTestActivity> {
-    private static final int RAND_DURATION = -1;
-    private static final long NOW = -1L;
-
-    /** A test value for the URI of a contact. */
-    private static final Uri TEST_LOOKUP_URI = Uri.parse("content://contacts/2");
-    /** A test value for the country ISO of the phone number in the call log. */
-    private static final String TEST_COUNTRY_ISO = "US";
-    /** A phone number to be used in tests. */
-    private static final String TEST_NUMBER = "12125551000";
-    /** The formatted version of {@link #TEST_NUMBER}. */
-    private static final String TEST_FORMATTED_NUMBER = "1 212-555-1000";
-
-    /** The activity in which we are hosting the fragment. */
-    private FragmentTestActivity mActivity;
-    private CallLogFragment mFragment;
-    private FrameLayout mParentView;
-    /**
-     * The adapter used by the fragment to build the rows in the call log. We use it with our own in
-     * memory database.
-     */
-    private CallLogAdapter mAdapter;
-    private String mVoicemail;
-
-    // In memory array to hold the rows corresponding to the 'calls' table.
-    private MatrixCursor mCursor;
-    private int mIndex;  // Of the next row.
-
-    private Random mRnd;
-
-    // References to the icons bitmaps used to build the list are stored in a
-    // map mIcons. The keys to retrieve the icons are:
-    // Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE and Calls.MISSED_TYPE.
-    private HashMap<Integer, Bitmap> mCallTypeIcons;
-
-    // An item in the call list. All the methods performing checks use it.
-    private CallLogListItemViews mItem;
-    // The list of views representing the data in the DB. View are in
-    // reverse order compare to the DB.
-    private View[] mList;
-
-    public CallLogFragmentTest() {
-        super("com.android.contacts", FragmentTestActivity.class);
-        mIndex = 1;
-        mRnd = new Random();
-    }
-
-    @Override
-    public void setUp() {
-        mActivity = getActivity();
-        // Needed by the CallLogFragment.
-        mActivity.setTheme(R.style.DialtactsTheme);
-
-        // Create the fragment and load it into the activity.
-        mFragment = new CallLogFragment();
-        FragmentManager fragmentManager = mActivity.getFragmentManager();
-        FragmentTransaction transaction = fragmentManager.beginTransaction();
-        transaction.add(R.id.fragment, mFragment);
-        transaction.commit();
-        // Wait for the fragment to be loaded.
-        getInstrumentation().waitForIdleSync();
-
-        mVoicemail = TelephonyManager.getDefault().getVoiceMailNumber();
-        mAdapter = mFragment.getAdapter();
-        // Do not process requests for details during tests. This would start a background thread,
-        // which makes the tests flaky.
-        mAdapter.disableRequestProcessingForTest();
-        mAdapter.stopRequestProcessing();
-        mParentView = new FrameLayout(mActivity);
-        mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);
-        buildIconMap();
-    }
-
-    /**
-     * Checks that the call icon is not visible for private and
-     * unknown numbers.
-     * Use 2 passes, one where new views are created and one where
-     * half of the total views are updated and the other half created.
-     */
-    @MediumTest
-    public void testCallViewIsNotVisibleForPrivateAndUnknownNumbers() {
-        final int SIZE = 100;
-        mList = new View[SIZE];
-
-        // Insert the first batch of entries.
-        mCursor.moveToFirst();
-        insertRandomEntries(SIZE / 2);
-        int startOfSecondBatch = mCursor.getPosition();
-
-        buildViewListFromDb();
-        checkCallStatus();
-
-        // Append the rest of the entries. We keep the first set of
-        // views around so they get updated and not built from
-        // scratch, this exposes some bugs that are not there when the
-        // call log is launched for the 1st time but show up when the
-        // call log gets updated afterwards.
-        mCursor.move(startOfSecondBatch);
-        insertRandomEntries(SIZE / 2);
-
-        buildViewListFromDb();
-        checkCallStatus();
-    }
-
-    @MediumTest
-    public void testCallAndGroupViews_GroupView() {
-        mCursor.moveToFirst();
-        insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newGroupView(getActivity(), mParentView);
-        mAdapter.bindGroupView(view, getActivity(), mCursor, 3, false);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
-    }
-
-    @MediumTest
-    public void testCallAndGroupViews_StandAloneView() {
-        mCursor.moveToFirst();
-        insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
-    }
-
-    @MediumTest
-    public void testCallAndGroupViews_ChildView() {
-        mCursor.moveToFirst();
-        insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newChildView(getActivity(), mParentView);
-        mAdapter.bindChildView(view, getActivity(), mCursor);
-        assertNotNull(view.findViewById(R.id.secondary_action_icon));
-    }
-
-    @MediumTest
-    public void testBindView_NumberOnlyNoCache() {
-        mCursor.moveToFirst();
-        insert(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, TEST_NUMBER);
-    }
-
-    @MediumTest
-    public void testBindView_NumberOnlyDbCachedFormattedNumber() {
-        mCursor.moveToFirst();
-        Object[] values = getValuesToInsert(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        values[CallLogQuery.CACHED_FORMATTED_NUMBER] = TEST_FORMATTED_NUMBER;
-        insertValues(values);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, TEST_FORMATTED_NUMBER);
-    }
-
-    @MediumTest
-    public void testBindView_WithCachedName() {
-        mCursor.moveToFirst();
-        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_HOME, "");
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, "John Doe");
-        assertNumberAndLabelAre(views, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_HOME));
-    }
-
-    @MediumTest
-    public void testBindView_UriNumber() {
-        mCursor.moveToFirst();
-        insertWithCachedValues("sip:johndoe@gmail.com", NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_HOME, "");
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, "John Doe");
-        assertNumberAndLabelAre(views, "sip:johndoe@gmail.com", null);
-    }
-
-    @MediumTest
-    public void testBindView_HomeLabel() {
-        mCursor.moveToFirst();
-        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_HOME, "");
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, "John Doe");
-        assertNumberAndLabelAre(views, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_HOME));
-    }
-
-    @MediumTest
-    public void testBindView_WorkLabel() {
-        mCursor.moveToFirst();
-        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_WORK, "");
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, "John Doe");
-        assertNumberAndLabelAre(views, TEST_FORMATTED_NUMBER, getTypeLabel(Phone.TYPE_WORK));
-    }
-
-    @MediumTest
-    public void testBindView_CustomLabel() {
-        mCursor.moveToFirst();
-        String numberLabel = "My label";
-        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_CUSTOM, numberLabel);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertNameIs(views, "John Doe");
-        assertNumberAndLabelAre(views, TEST_FORMATTED_NUMBER, numberLabel);
-    }
-
-    @MediumTest
-    public void testBindView_WithQuickContactBadge() {
-        mCursor.moveToFirst();
-        insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
-                "John Doe", Phone.TYPE_HOME, "");
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertTrue(views.quickContactView.isEnabled());
-    }
-
-    @MediumTest
-    public void testBindView_WithoutQuickContactBadge() {
-        mCursor.moveToFirst();
-        insert(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        assertFalse(views.quickContactView.isEnabled());
-    }
-
-    @MediumTest
-    public void testBindView_CallButton() {
-        mCursor.moveToFirst();
-        insert(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
-        Intent intent = intentProvider.getIntent(mActivity);
-        // Starts a call.
-        assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
-        // To the entry's number.
-        assertEquals(Uri.parse("tel:" + TEST_NUMBER), intent.getData());
-    }
-
-    @MediumTest
-    public void testBindView_PlayButton() {
-        mCursor.moveToFirst();
-        insertVoicemail(TEST_NUMBER, NOW, 0);
-        View view = mAdapter.newStandAloneView(getActivity(), mParentView);
-        mAdapter.bindStandAloneView(view, getActivity(), mCursor);
-
-        CallLogListItemViews views = (CallLogListItemViews) view.getTag();
-        IntentProvider intentProvider = (IntentProvider) views.secondaryActionView.getTag();
-        Intent intent = intentProvider.getIntent(mActivity);
-        // Starts the call detail activity.
-        assertEquals(new ComponentName(mActivity, CallDetailActivity.class),
-                intent.getComponent());
-        // With the given entry.
-        assertEquals(ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, 1),
-                intent.getData());
-        // With the URI of the voicemail.
-        assertEquals(
-                ContentUris.withAppendedId(VoicemailContract.Voicemails.CONTENT_URI, 1),
-                intent.getParcelableExtra(CallDetailActivity.EXTRA_VOICEMAIL_URI));
-        // And starts playback.
-        assertTrue(
-                intent.getBooleanExtra(CallDetailActivity.EXTRA_VOICEMAIL_START_PLAYBACK, false));
-    }
-
-    /** Returns the label associated with a given phone type. */
-    private CharSequence getTypeLabel(int phoneType) {
-        return Phone.getTypeLabel(getActivity().getResources(), phoneType, "");
-    }
-
-    //
-    // HELPERS to check conditions on the DB/views
-    //
-    /**
-     * Go over all the views in the list and check that the Call
-     * icon's visibility matches the nature of the number.
-     */
-    private void checkCallStatus() {
-        for (int i = 0; i < mList.length; i++) {
-            if (null == mList[i]) {
-                break;
-            }
-            mItem = (CallLogListItemViews) mList[i].getTag();
-            String number = getPhoneNumberForListEntry(i);
-            if (CallerInfo.PRIVATE_NUMBER.equals(number) ||
-                CallerInfo.UNKNOWN_NUMBER.equals(number)) {
-                assertFalse(View.VISIBLE == mItem.secondaryActionView.getVisibility());
-            } else {
-                assertEquals(View.VISIBLE, mItem.secondaryActionView.getVisibility());
-            }
-        }
-    }
-
-
-    //
-    // HELPERS to setup the tests.
-    //
-
-    /**
-     * Get the Bitmap from the icons in the contacts package.
-     */
-    private Bitmap getBitmap(String resName) {
-        Resources r = mActivity.getResources();
-        int resid = r.getIdentifier(resName, "drawable", "com.android.contacts");
-        BitmapDrawable d = (BitmapDrawable) r.getDrawable(resid);
-        assertNotNull(d);
-        return d.getBitmap();
-    }
-
-    /**
-     * Fetch all the icons we need in tests from the contacts app and store them in a map.
-     */
-    private void buildIconMap() {
-        mCallTypeIcons = new HashMap<Integer, Bitmap>(3);
-
-        mCallTypeIcons.put(Calls.INCOMING_TYPE, getBitmap("ic_call_incoming_holo_dark"));
-        mCallTypeIcons.put(Calls.MISSED_TYPE, getBitmap("ic_call_missed_holo_dark"));
-        mCallTypeIcons.put(Calls.OUTGOING_TYPE, getBitmap("ic_call_outgoing_holo_dark"));
-    }
-
-    //
-    // HELPERS to build/update the call entries (views) from the DB.
-    //
-
-    /**
-     * Read the DB and foreach call either update the existing view if
-     * one exists already otherwise create one.
-     * The list is build from a DESC view of the DB (last inserted entry is first).
-     */
-    private void buildViewListFromDb() {
-        int i = 0;
-        mCursor.moveToLast();
-        while(!mCursor.isBeforeFirst()) {
-            if (null == mList[i]) {
-                mList[i] = mAdapter.newStandAloneView(mActivity, mParentView);
-            }
-            mAdapter.bindStandAloneView(mList[i], mActivity, mCursor);
-            mCursor.moveToPrevious();
-            i++;
-        }
-    }
-
-    /** Returns the number associated with the given entry in {{@link #mList}. */
-    private String getPhoneNumberForListEntry(int index) {
-        // The entries are added backward, so count from the end of the cursor.
-        mCursor.moveToPosition(mCursor.getCount() - index - 1);
-        return mCursor.getString(CallLogQuery.NUMBER);
-    }
-
-    //
-    // HELPERS to insert numbers in the call log DB.
-    //
-
-    /**
-     * Insert a certain number of random numbers in the DB. Makes sure
-     * there is at least one private and one unknown number in the DB.
-     * @param num Of entries to be inserted.
-     */
-    private void insertRandomEntries(int num) {
-        if (num < 10) {
-            throw new IllegalArgumentException("num should be >= 10");
-        }
-        boolean privateOrUnknownOrVm[];
-        privateOrUnknownOrVm = insertRandomRange(0, num - 2);
-
-        if (privateOrUnknownOrVm[0] && privateOrUnknownOrVm[1]) {
-            insertRandomRange(num - 2, num);
-        } else {
-            insertPrivate(NOW, RAND_DURATION);
-            insertUnknown(NOW, RAND_DURATION);
-        }
-    }
-
-    /**
-     * Insert a new call entry in the test DB.
-     *
-     * It includes the values for the cached contact associated with the number.
-     *
-     * @param number The phone number. For unknown and private numbers,
-     *               use CallerInfo.UNKNOWN_NUMBER or CallerInfo.PRIVATE_NUMBER.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     * @param type Either Call.OUTGOING_TYPE or Call.INCOMING_TYPE or Call.MISSED_TYPE.
-     * @param cachedName the name of the contact with this number
-     * @param cachedNumberType the type of the number, from the contact with this number
-     * @param cachedNumberLabel the label of the number, from the contact with this number
-     */
-    private void insertWithCachedValues(String number, long date, int duration, int type,
-            String cachedName, int cachedNumberType, String cachedNumberLabel) {
-        insert(number, date, duration, type);
-        ContactInfo contactInfo = new ContactInfo();
-        contactInfo.lookupUri = TEST_LOOKUP_URI;
-        contactInfo.name = cachedName;
-        contactInfo.type = cachedNumberType;
-        contactInfo.label = cachedNumberLabel;
-        String formattedNumber = PhoneNumberUtils.formatNumber(number, TEST_COUNTRY_ISO);
-        if (formattedNumber == null) {
-            formattedNumber = number;
-        }
-        contactInfo.formattedNumber = formattedNumber;
-        contactInfo.normalizedNumber = number;
-        contactInfo.photoId = 0;
-        mAdapter.injectContactInfoForTest(number, TEST_COUNTRY_ISO, contactInfo);
-    }
-
-    /**
-     * Insert a new call entry in the test DB.
-     * @param number The phone number. For unknown and private numbers,
-     *               use CallerInfo.UNKNOWN_NUMBER or CallerInfo.PRIVATE_NUMBER.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     * @param type Either Call.OUTGOING_TYPE or Call.INCOMING_TYPE or Call.MISSED_TYPE.
-     */
-    private void insert(String number, long date, int duration, int type) {
-        insertValues(getValuesToInsert(number, date, duration, type));
-    }
-
-    /** Inserts the given values in the cursor. */
-    private void insertValues(Object[] values) {
-        mCursor.addRow(values);
-        ++mIndex;
-    }
-
-    /**
-     * Returns the values for a new call entry.
-     *
-     * @param number The phone number. For unknown and private numbers,
-     *               use CallerInfo.UNKNOWN_NUMBER or CallerInfo.PRIVATE_NUMBER.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     * @param type Either Call.OUTGOING_TYPE or Call.INCOMING_TYPE or Call.MISSED_TYPE.
-     */
-    private Object[] getValuesToInsert(String number, long date, int duration, int type) {
-        Object[] values = CallLogQueryTestUtils.createTestExtendedValues();
-        values[CallLogQuery.ID] = mIndex;
-        values[CallLogQuery.NUMBER] = number;
-        values[CallLogQuery.DATE] = date == NOW ? new Date().getTime() : date;
-        values[CallLogQuery.DURATION] = duration < 0 ? mRnd.nextInt(10 * 60) : duration;
-        if (mVoicemail != null && mVoicemail.equals(number)) {
-            assertEquals(Calls.OUTGOING_TYPE, type);
-        }
-        values[CallLogQuery.CALL_TYPE] = type;
-        values[CallLogQuery.COUNTRY_ISO] = TEST_COUNTRY_ISO;
-        values[CallLogQuery.SECTION] = CallLogQuery.SECTION_OLD_ITEM;
-        return values;
-    }
-
-    /**
-     * Insert a new voicemail entry in the test DB.
-     * @param number The phone number. For unknown and private numbers,
-     *               use CallerInfo.UNKNOWN_NUMBER or CallerInfo.PRIVATE_NUMBER.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     */
-    private void insertVoicemail(String number, long date, int duration) {
-        Object[] values = getValuesToInsert(number, date, duration, Calls.VOICEMAIL_TYPE);
-        // Must have the same index as the row.
-        values[CallLogQuery.VOICEMAIL_URI] =
-                ContentUris.withAppendedId(VoicemailContract.Voicemails.CONTENT_URI, mIndex);
-        insertValues(values);
-    }
-
-    /**
-     * Insert a new private call entry in the test DB.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     */
-    private void insertPrivate(long date, int duration) {
-        insert(CallerInfo.PRIVATE_NUMBER, date, duration, Calls.INCOMING_TYPE);
-    }
-
-    /**
-     * Insert a new unknown call entry in the test DB.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     */
-    private void insertUnknown(long date, int duration) {
-        insert(CallerInfo.UNKNOWN_NUMBER, date, duration, Calls.INCOMING_TYPE);
-    }
-
-    /**
-     * Insert a new call to voicemail entry in the test DB.
-     * @param date In millisec since epoch. Use NOW to use the current time.
-     * @param duration In seconds of the call. Use RAND_DURATION to pick a random one.
-     */
-    private void insertCalltoVoicemail(long date, int duration) {
-        // mVoicemail may be null
-        if (mVoicemail != null) {
-            insert(mVoicemail, date, duration, Calls.OUTGOING_TYPE);
-        }
-    }
-
-    /**
-     * Insert a range [start, end) of random numbers in the DB. For
-     * each row, there is a 1/10 probability that the number will be
-     * marked as PRIVATE or UNKNOWN or VOICEMAIL. For regular numbers, a number is
-     * inserted, its last 4 digits will be the number of the iteration
-     * in the range.
-     * @param start Of the range.
-     * @param end Of the range (excluded).
-     * @return An array with 2 booleans [0 = private number, 1 =
-     * unknown number, 2 = voicemail] to indicate if at least one
-     * private or unknown or voicemail number has been inserted. Since
-     * the numbers are random some tests may want to enforce the
-     * insertion of such numbers.
-     */
-    // TODO: Should insert numbers with contact entries too.
-    private boolean[] insertRandomRange(int start, int end) {
-        boolean[] privateOrUnknownOrVm = new boolean[] {false, false, false};
-
-        for (int i = start; i < end; i++ ) {
-            int type = mRnd.nextInt(10);
-
-            if (0 == type) {
-                insertPrivate(NOW, RAND_DURATION);
-                privateOrUnknownOrVm[0] = true;
-            } else if (1 == type) {
-                insertUnknown(NOW, RAND_DURATION);
-                privateOrUnknownOrVm[1] = true;
-            } else if (2 == type) {
-                insertCalltoVoicemail(NOW, RAND_DURATION);
-                privateOrUnknownOrVm[2] = true;
-            } else {
-                int inout = mRnd.nextBoolean() ? Calls.OUTGOING_TYPE :  Calls.INCOMING_TYPE;
-                String number = new Formatter().format("1800123%04d", i).toString();
-                insert(number, NOW, RAND_DURATION, inout);
-            }
-        }
-        return privateOrUnknownOrVm;
-    }
-
-    /** Asserts that the name text view is shown and contains the given text. */
-    private void assertNameIs(CallLogListItemViews views, String name) {
-        assertEquals(View.VISIBLE, views.phoneCallDetailsViews.nameView.getVisibility());
-        assertEquals(name, views.phoneCallDetailsViews.nameView.getText());
-    }
-
-    /** Asserts that the number and label text view contains the given text. */
-    private void assertNumberAndLabelAre(CallLogListItemViews views, CharSequence number,
-            CharSequence label) {
-        assertEquals(View.VISIBLE, views.phoneCallDetailsViews.numberView.getVisibility());
-        assertEquals(number, views.phoneCallDetailsViews.numberView.getText().toString());
-
-        assertEquals(label == null ? View.GONE : View.VISIBLE,
-                views.phoneCallDetailsViews.labelView.getVisibility());
-        if (label != null) {
-            assertEquals(label, views.phoneCallDetailsViews.labelView.getText().toString());
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
deleted file mode 100644
index 1fced0b..0000000
--- a/tests/src/com/android/contacts/calllog/CallLogGroupBuilderTest.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.calllog;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import android.database.MatrixCursor;
-import android.provider.CallLog.Calls;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import java.util.List;
-
-/**
- * Unit tests for {@link CallLogGroupBuilder}
- */
-@SmallTest
-public class CallLogGroupBuilderTest extends AndroidTestCase {
-    /** A phone number for testing. */
-    private static final String TEST_NUMBER1 = "14125551234";
-    /** A phone number for testing. */
-    private static final String TEST_NUMBER2 = "14125555555";
-
-    /** The object under test. */
-    private CallLogGroupBuilder mBuilder;
-    /** Records the created groups. */
-    private FakeGroupCreator mFakeGroupCreator;
-    /** Cursor to store the values. */
-    private MatrixCursor mCursor;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mFakeGroupCreator = new FakeGroupCreator();
-        mBuilder = new CallLogGroupBuilder(mFakeGroupCreator);
-        createCursor();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mCursor = null;
-        mBuilder = null;
-        mFakeGroupCreator = null;
-        super.tearDown();
-    }
-
-    public void testAddGroups_NoCalls() {
-        mBuilder.addGroups(mCursor);
-        assertEquals(0, mFakeGroupCreator.groups.size());
-    }
-
-    public void testAddGroups_OneCall() {
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(0, mFakeGroupCreator.groups.size());
-    }
-
-    public void testAddGroups_TwoCallsNotMatching() {
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER2, Calls.INCOMING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(0, mFakeGroupCreator.groups.size());
-    }
-
-    public void testAddGroups_ThreeCallsMatching() {
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(1, mFakeGroupCreator.groups.size());
-        assertGroupIs(0, 3, false, mFakeGroupCreator.groups.get(0));
-    }
-
-    public void testAddGroups_MatchingIncomingAndOutgoing() {
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER1, Calls.OUTGOING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(1, mFakeGroupCreator.groups.size());
-        assertGroupIs(0, 3, false, mFakeGroupCreator.groups.get(0));
-    }
-
-    public void testAddGroups_HeaderSplitsGroups() {
-        addNewCallLogHeader();
-        addNewCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addNewCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogHeader();
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        addOldCallLogEntry(TEST_NUMBER1, Calls.INCOMING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(2, mFakeGroupCreator.groups.size());
-        assertGroupIs(1, 2, false, mFakeGroupCreator.groups.get(0));
-        assertGroupIs(4, 2, false, mFakeGroupCreator.groups.get(1));
-    }
-
-    public void testAddGroups_Voicemail() {
-        // Does not group with other types of calls, include voicemail themselves.
-        assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE);
-        //assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-        assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.VOICEMAIL_TYPE);
-        assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreNotGrouped(Calls.VOICEMAIL_TYPE, Calls.OUTGOING_TYPE);
-    }
-
-    public void testAddGroups_Missed() {
-        // Groups with one or more missed calls.
-        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.MISSED_TYPE, Calls.MISSED_TYPE);
-        // Does not group with other types of calls.
-        assertCallsAreNotGrouped(Calls.MISSED_TYPE, Calls.VOICEMAIL_TYPE);
-        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreGrouped(Calls.MISSED_TYPE, Calls.OUTGOING_TYPE);
-    }
-
-    public void testAddGroups_Incoming() {
-        // Groups with one or more incoming or outgoing.
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
-        // Does not group with voicemail and missed calls.
-        assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.VOICEMAIL_TYPE);
-    }
-
-    public void testAddGroups_Outgoing() {
-        // Groups with one or more incoming or outgoing.
-        assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE);
-        assertCallsAreGrouped(Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE, Calls.INCOMING_TYPE);
-        assertCallsAreGrouped(Calls.INCOMING_TYPE, Calls.MISSED_TYPE);
-        // Does not group with voicemail and missed calls.
-        assertCallsAreNotGrouped(Calls.INCOMING_TYPE, Calls.VOICEMAIL_TYPE);
-    }
-
-    public void testAddGroups_Mixed() {
-        addMultipleOldCallLogEntries(TEST_NUMBER1,
-                Calls.VOICEMAIL_TYPE,  // Stand-alone
-                Calls.INCOMING_TYPE,  // Group 1: 1-4
-                Calls.OUTGOING_TYPE,
-                Calls.MISSED_TYPE,
-                Calls.MISSED_TYPE,
-                Calls.VOICEMAIL_TYPE,  // Stand-alone
-                Calls.INCOMING_TYPE,  // Stand-alone
-                Calls.VOICEMAIL_TYPE,  // Stand-alone
-                Calls.MISSED_TYPE, // Group 2: 8-10
-                Calls.MISSED_TYPE,
-                Calls.OUTGOING_TYPE);
-        mBuilder.addGroups(mCursor);
-        assertEquals(2, mFakeGroupCreator.groups.size());
-        assertGroupIs(1, 4, false, mFakeGroupCreator.groups.get(0));
-        assertGroupIs(8, 3, false, mFakeGroupCreator.groups.get(1));
-    }
-
-    public void testEqualPhoneNumbers() {
-        // Identical.
-        assertTrue(mBuilder.equalNumbers("6505555555", "6505555555"));
-        assertTrue(mBuilder.equalNumbers("650 555 5555", "650 555 5555"));
-        // Formatting.
-        assertTrue(mBuilder.equalNumbers("6505555555", "650 555 5555"));
-        assertTrue(mBuilder.equalNumbers("6505555555", "(650) 555-5555"));
-        assertTrue(mBuilder.equalNumbers("650 555 5555", "(650) 555-5555"));
-        // Short codes.
-        assertTrue(mBuilder.equalNumbers("55555", "55555"));
-        assertTrue(mBuilder.equalNumbers("55555", "555 55"));
-        // Different numbers.
-        assertFalse(mBuilder.equalNumbers("6505555555", "650555555"));
-        assertFalse(mBuilder.equalNumbers("6505555555", "6505555551"));
-        assertFalse(mBuilder.equalNumbers("650 555 5555", "650 555 555"));
-        assertFalse(mBuilder.equalNumbers("650 555 5555", "650 555 5551"));
-        assertFalse(mBuilder.equalNumbers("55555", "5555"));
-        assertFalse(mBuilder.equalNumbers("55555", "55551"));
-        // SIP addresses.
-        assertTrue(mBuilder.equalNumbers("6505555555@host.com", "6505555555@host.com"));
-        assertTrue(mBuilder.equalNumbers("6505555555@host.com", "6505555555@HOST.COM"));
-        assertTrue(mBuilder.equalNumbers("user@host.com", "user@host.com"));
-        assertTrue(mBuilder.equalNumbers("user@host.com", "user@HOST.COM"));
-        assertFalse(mBuilder.equalNumbers("USER@host.com", "user@host.com"));
-        assertFalse(mBuilder.equalNumbers("user@host.com", "user@host1.com"));
-        // SIP address vs phone number.
-        assertFalse(mBuilder.equalNumbers("6505555555@host.com", "6505555555"));
-        assertFalse(mBuilder.equalNumbers("6505555555", "6505555555@host.com"));
-        assertFalse(mBuilder.equalNumbers("user@host.com", "6505555555"));
-        assertFalse(mBuilder.equalNumbers("6505555555", "user@host.com"));
-        // Nulls.
-        assertTrue(mBuilder.equalNumbers(null, null));
-        assertFalse(mBuilder.equalNumbers(null, "6505555555"));
-        assertFalse(mBuilder.equalNumbers("6505555555", null));
-        assertFalse(mBuilder.equalNumbers(null, "6505555555@host.com"));
-        assertFalse(mBuilder.equalNumbers("6505555555@host.com", null));
-    }
-
-    public void testCompareSipAddresses() {
-        // Identical.
-        assertTrue(mBuilder.compareSipAddresses("6505555555@host.com", "6505555555@host.com"));
-        assertTrue(mBuilder.compareSipAddresses("user@host.com", "user@host.com"));
-        // Host is case insensitive.
-        assertTrue(mBuilder.compareSipAddresses("6505555555@host.com", "6505555555@HOST.COM"));
-        assertTrue(mBuilder.compareSipAddresses("user@host.com", "user@HOST.COM"));
-        // Userinfo is case sensitive.
-        assertFalse(mBuilder.compareSipAddresses("USER@host.com", "user@host.com"));
-        // Different hosts.
-        assertFalse(mBuilder.compareSipAddresses("user@host.com", "user@host1.com"));
-        // Different users.
-        assertFalse(mBuilder.compareSipAddresses("user1@host.com", "user@host.com"));
-        // Nulls.
-        assertTrue(mBuilder.compareSipAddresses(null, null));
-        assertFalse(mBuilder.compareSipAddresses(null, "6505555555@host.com"));
-        assertFalse(mBuilder.compareSipAddresses("6505555555@host.com", null));
-    }
-
-    /** Creates (or recreates) the cursor used to store the call log content for the tests. */
-    private void createCursor() {
-        mCursor = new MatrixCursor(CallLogQuery.EXTENDED_PROJECTION);
-    }
-
-    /** Clears the content of the {@link FakeGroupCreator} used in the tests. */
-    private void clearFakeGroupCreator() {
-        mFakeGroupCreator.groups.clear();
-    }
-
-    /** Asserts that calls of the given types are grouped together into a single group. */
-    private void assertCallsAreGrouped(int... types) {
-        createCursor();
-        clearFakeGroupCreator();
-        addMultipleOldCallLogEntries(TEST_NUMBER1, types);
-        mBuilder.addGroups(mCursor);
-        assertEquals(1, mFakeGroupCreator.groups.size());
-        assertGroupIs(0, types.length, false, mFakeGroupCreator.groups.get(0));
-
-    }
-
-    /** Asserts that calls of the given types are not grouped together at all. */
-    private void assertCallsAreNotGrouped(int... types) {
-        createCursor();
-        clearFakeGroupCreator();
-        addMultipleOldCallLogEntries(TEST_NUMBER1, types);
-        mBuilder.addGroups(mCursor);
-        assertEquals(0, mFakeGroupCreator.groups.size());
-    }
-
-    /** Adds a set of calls with the given types, all from the same number, in the old section. */
-    private void addMultipleOldCallLogEntries(String number, int... types) {
-        for (int type : types) {
-            addOldCallLogEntry(number, type);
-        }
-    }
-
-    /** Adds a call with the given number and type to the old section of the call log. */
-    private void addOldCallLogEntry(String number, int type) {
-        addCallLogEntry(number, type, CallLogQuery.SECTION_OLD_ITEM);
-    }
-
-    /** Adds a call with the given number and type to the new section of the call log. */
-    private void addNewCallLogEntry(String number, int type) {
-        addCallLogEntry(number, type, CallLogQuery.SECTION_NEW_ITEM);
-    }
-
-    /** Adds a call log entry with the given number and type to the cursor. */
-    private void addCallLogEntry(String number, int type, int section) {
-        if (section != CallLogQuery.SECTION_NEW_ITEM
-                && section != CallLogQuery.SECTION_OLD_ITEM) {
-            throw new IllegalArgumentException("not an item section: " + section);
-        }
-        mCursor.moveToNext();
-        Object[] values = CallLogQueryTestUtils.createTestExtendedValues();
-        values[CallLogQuery.ID] = mCursor.getPosition();
-        values[CallLogQuery.NUMBER] = number;
-        values[CallLogQuery.CALL_TYPE] = type;
-        values[CallLogQuery.SECTION] = section;
-        mCursor.addRow(values);
-    }
-
-    /** Adds the old section header to the call log. */
-    private void addOldCallLogHeader() {
-        addCallLogHeader(CallLogQuery.SECTION_OLD_HEADER);
-    }
-
-    /** Adds the new section header to the call log. */
-    private void addNewCallLogHeader() {
-        addCallLogHeader(CallLogQuery.SECTION_NEW_HEADER);
-    }
-
-    /** Adds a call log entry with a header to the cursor. */
-    private void addCallLogHeader(int section) {
-        if (section != CallLogQuery.SECTION_NEW_HEADER
-                && section != CallLogQuery.SECTION_OLD_HEADER) {
-            throw new IllegalArgumentException("not a header section: " + section);
-        }
-        mCursor.moveToNext();
-        Object[] values = CallLogQueryTestUtils.createTestExtendedValues();
-        values[CallLogQuery.ID] = mCursor.getPosition();
-        values[CallLogQuery.SECTION] = section;
-        mCursor.addRow(values);
-    }
-
-    /** Asserts that the group matches the given values. */
-    private void assertGroupIs(int cursorPosition, int size, boolean expanded, GroupSpec group) {
-        assertEquals(cursorPosition, group.cursorPosition);
-        assertEquals(size, group.size);
-        assertEquals(expanded, group.expanded);
-    }
-
-    /** Defines an added group. Used by the {@link FakeGroupCreator}. */
-    private static class GroupSpec {
-        /** The starting position of the group. */
-        public final int cursorPosition;
-        /** The number of elements in the group. */
-        public final int size;
-        /** Whether the group should be initially expanded. */
-        public final boolean expanded;
-
-        public GroupSpec(int cursorPosition, int size, boolean expanded) {
-            this.cursorPosition = cursorPosition;
-            this.size = size;
-            this.expanded = expanded;
-        }
-    }
-
-    /** Fake implementation of a GroupCreator which stores the created groups in a member field. */
-    private static class FakeGroupCreator implements CallLogGroupBuilder.GroupCreator {
-        /** The list of created groups. */
-        public final List<GroupSpec> groups = newArrayList();
-
-        @Override
-        public void addGroup(int cursorPosition, int size, boolean expanded) {
-            groups.add(new GroupSpec(cursorPosition, size, expanded));
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
deleted file mode 100644
index a184f75..0000000
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.calllog;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.CallLog.Calls;
-import android.test.AndroidTestCase;
-import android.view.View;
-
-import com.android.contacts.PhoneCallDetails;
-import com.android.contacts.PhoneCallDetailsHelper;
-import com.android.internal.telephony.CallerInfo;
-
-/**
- * Unit tests for {@link CallLogListItemHelper}.
- */
-public class CallLogListItemHelperTest extends AndroidTestCase {
-    /** A test phone number for phone calls. */
-    private static final String TEST_NUMBER = "14125555555";
-    /** The formatted version of {@link #TEST_NUMBER}. */
-    private static final String TEST_FORMATTED_NUMBER = "1-412-255-5555";
-    /** A test date value for phone calls. */
-    private static final long TEST_DATE = 1300000000;
-    /** A test duration value for phone calls. */
-    private static final long TEST_DURATION = 62300;
-    /** A test voicemail number. */
-    private static final String TEST_VOICEMAIL_NUMBER = "123";
-    /** The country ISO name used in the tests. */
-    private static final String TEST_COUNTRY_ISO = "US";
-    /** The geocoded location used in the tests. */
-    private static final String TEST_GEOCODE = "United States";
-
-    /** The object under test. */
-    private CallLogListItemHelper mHelper;
-
-    /** The views used in the tests. */
-    private CallLogListItemViews mViews;
-    private PhoneNumberHelper mPhoneNumberHelper;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        Context context = getContext();
-        Resources resources = context.getResources();
-        CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
-        mPhoneNumberHelper = new TestPhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
-        PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
-                resources, callTypeHelper, mPhoneNumberHelper);
-        mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, mPhoneNumberHelper, resources);
-        mViews = CallLogListItemViews.createForTest(context);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mHelper = null;
-        mViews = null;
-        super.tearDown();
-    }
-
-    public void testSetPhoneCallDetails() {
-        setPhoneCallDetailsWithNumber("12125551234", "1-212-555-1234");
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    public void testSetPhoneCallDetails_Unknown() {
-        setPhoneCallDetailsWithNumber(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER);
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetails_Private() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PRIVATE_NUMBER, CallerInfo.PRIVATE_NUMBER);
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetails_Payphone() {
-        setPhoneCallDetailsWithNumber(CallerInfo.PAYPHONE_NUMBER, CallerInfo.PAYPHONE_NUMBER);
-        assertNoCallButton();
-    }
-
-    public void testSetPhoneCallDetails_VoicemailNumber() {
-        setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER, TEST_VOICEMAIL_NUMBER);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    public void testSetPhoneCallDetails_ReadVoicemail() {
-        setPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    public void testSetPhoneCallDetails_UnreadVoicemail() {
-        setUnreadPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    public void testSetPhoneCallDetails_VoicemailFromUnknown() {
-        setPhoneCallDetailsWithNumberAndType(CallerInfo.UNKNOWN_NUMBER, CallerInfo.UNKNOWN_NUMBER,
-                Calls.VOICEMAIL_TYPE);
-        assertEquals(View.VISIBLE, mViews.secondaryActionView.getVisibility());
-    }
-
-    /** Asserts that the whole call area is gone. */
-    private void assertNoCallButton() {
-        assertEquals(View.GONE, mViews.secondaryActionView.getVisibility());
-        assertEquals(View.GONE, mViews.dividerView.getVisibility());
-    }
-
-    /** Sets the details of a phone call using the specified phone number. */
-    private void setPhoneCallDetailsWithNumber(String number, String formattedNumber) {
-        setPhoneCallDetailsWithNumberAndType(number, formattedNumber, Calls.INCOMING_TYPE);
-    }
-
-    /** Sets the details of a phone call using the specified phone number. */
-    private void setPhoneCallDetailsWithNumberAndType(String number, String formattedNumber,
-            int callType) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(number, formattedNumber, TEST_COUNTRY_ISO, TEST_GEOCODE,
-                        new int[]{ callType }, TEST_DATE, TEST_DURATION),
-                false);
-    }
-
-    /** Sets the details of a phone call using the specified call type. */
-    private void setPhoneCallDetailsWithTypes(int... types) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, types, TEST_DATE, TEST_DURATION),
-                false);
-    }
-
-    /** Sets the details of a phone call using the specified call type. */
-    private void setUnreadPhoneCallDetailsWithTypes(int... types) {
-        mHelper.setPhoneCallDetails(mViews,
-                new PhoneCallDetails(TEST_NUMBER, TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO,
-                        TEST_GEOCODE, types, TEST_DATE, TEST_DURATION),
-                true);
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/CallLogQueryTestUtils.java b/tests/src/com/android/contacts/calllog/CallLogQueryTestUtils.java
deleted file mode 100644
index a88bf4f..0000000
--- a/tests/src/com/android/contacts/calllog/CallLogQueryTestUtils.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.calllog;
-
-import static junit.framework.Assert.assertEquals;
-
-import android.provider.CallLog.Calls;
-
-import junit.framework.Assert;
-
-/**
- * Helper class to create test values for {@link CallLogQuery}.
- */
-public class CallLogQueryTestUtils {
-    public static Object[] createTestValues() {
-        Object[] values = new Object[]{
-                0L, "", 0L, 0L, Calls.INCOMING_TYPE, "", "", "", null, 0, null, null, null, null,
-                0L, null, 0,
-        };
-        assertEquals(CallLogQuery._PROJECTION.length, values.length);
-        return values;
-    }
-
-    public static Object[] createTestExtendedValues() {
-        Object[] values = new Object[]{
-                0L, "", 0L, 0L, Calls.INCOMING_TYPE, "", "", "", null, 0, null, null, null, null,
-                0L, null, 1, CallLogQuery.SECTION_OLD_ITEM
-        };
-        Assert.assertEquals(CallLogQuery.EXTENDED_PROJECTION.length, values.length);
-        return values;
-    }
-}
diff --git a/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java b/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java
deleted file mode 100644
index 2bbd978..0000000
--- a/tests/src/com/android/contacts/calllog/TestPhoneNumberHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.calllog;
-
-import android.content.res.Resources;
-
-/**
- * Modified version of {@link PhoneNumberHelper} to be used in tests that allows injecting the
- * voicemail number.
- */
-public final class TestPhoneNumberHelper extends PhoneNumberHelper {
-    private CharSequence mVoicemailNumber;
-
-    public TestPhoneNumberHelper(Resources resources, CharSequence voicemailNumber) {
-        super(resources);
-        mVoicemailNumber = voicemailNumber;
-    }
-
-    @Override
-    public boolean isVoicemailNumber(CharSequence number) {
-        return mVoicemailNumber.equals(number);
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index fcbd83d..3b856ea 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -29,13 +29,13 @@
 import com.android.contacts.model.AccountTypeManager;
 import com.android.contacts.model.account.AccountType;
 import com.android.contacts.model.account.BaseAccountType;
-import com.android.contacts.test.FragmentTestActivity;
+import com.android.contacts.common.test.FragmentTestActivity;
 import com.android.contacts.test.InjectedServices;
 import com.android.contacts.tests.mocks.ContactsMockContext;
 import com.android.contacts.tests.mocks.MockAccountTypeManager;
 import com.android.contacts.tests.mocks.MockContentProvider;
 import com.android.contacts.tests.mocks.MockContentProvider.Query;
-import com.android.contacts.util.IntegrationTestUtils;
+import com.android.contacts.common.test.IntegrationTestUtils;
 
 /**
  * Tests for {@link ContactDeletionInteraction}.
diff --git a/tests/src/com/android/contacts/list/ContactListItemViewTest.java b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
index 748876f..d05e8cf 100644
--- a/tests/src/com/android/contacts/list/ContactListItemViewTest.java
+++ b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
@@ -25,7 +25,7 @@
 
 import com.android.contacts.activities.PeopleActivity;
 import com.android.contacts.format.SpannedTestUtils;
-import com.android.contacts.util.IntegrationTestUtils;
+import com.android.contacts.common.test.IntegrationTestUtils;
 
 /**
  * Unit tests for {@link ContactListItemView}.
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 519dc5c..d7ea5bf 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -512,7 +512,7 @@
                 }
                 final Intent intent = new Intent("android.intent.action.VIEW");
                 intent.setData(uri);
-                bindIntentToClass(intent, "com.android.contacts.CallDetailActivity");
+                bindIntentToClass(intent, "com.android.dialer.CallDetailActivity");
                 startActivity(intent);
                 break;
             }
diff --git a/tests/src/com/android/contacts/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/contacts/tests/calllog/FillCallLogTestActivity.java
deleted file mode 100644
index d04d978..0000000
--- a/tests/src/com/android/contacts/tests/calllog/FillCallLogTestActivity.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.tests.calllog;
-
-import android.app.Activity;
-import android.app.LoaderManager;
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.content.CursorLoader;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.provider.CallLog.Calls;
-import android.util.Log;
-import android.view.View;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.contacts.tests.R;
-
-import java.util.Random;
-
-/**
- * Activity to add entries to the call log for testing.
- */
-public class FillCallLogTestActivity extends Activity {
-    private static final String TAG = "FillCallLogTestActivity";
-    /** Identifier of the loader for querying the call log. */
-    private static final int CALLLOG_LOADER_ID = 1;
-
-    private static final Random RNG = new Random();
-    private static final int[] CALL_TYPES = new int[] {
-        Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE, Calls.MISSED_TYPE,
-    };
-
-    private TextView mNumberTextView;
-    private Button mAddButton;
-    private ProgressBar mProgressBar;
-    private CheckBox mUseRandomNumbers;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.fill_call_log_test);
-        mNumberTextView = (TextView) findViewById(R.id.number);
-        mAddButton = (Button) findViewById(R.id.add);
-        mProgressBar = (ProgressBar) findViewById(R.id.progress);
-        mUseRandomNumbers = (CheckBox) findViewById(R.id.use_random_numbers);
-
-        mAddButton.setOnClickListener(new View.OnClickListener(){
-            @Override
-            public void onClick(View v) {
-                int count;
-                try {
-                    count = Integer.parseInt(mNumberTextView.getText().toString());
-                    if (count > 100) {
-                        throw new RuntimeException("Number too large.  Max=100");
-                    }
-                } catch (RuntimeException e) {
-                    Toast.makeText(FillCallLogTestActivity.this, e.toString(), Toast.LENGTH_LONG)
-                            .show();
-                    return;
-                }
-                addEntriesToCallLog(count, mUseRandomNumbers.isChecked());
-                mNumberTextView.setEnabled(false);
-                mAddButton.setEnabled(false);
-                mProgressBar.setProgress(0);
-                mProgressBar.setMax(count);
-                mProgressBar.setVisibility(View.VISIBLE);
-            }
-        });
-    }
-
-    /**
-     * Adds a number of entries to the call log. The content of the entries is based on existing
-     * entries.
-     *
-     * @param count the number of entries to add
-     */
-    private void addEntriesToCallLog(final int count, boolean useRandomNumbers) {
-        if (useRandomNumbers) {
-            addRandomNumbers(count);
-        } else {
-            getLoaderManager().initLoader(CALLLOG_LOADER_ID, null,
-                    new CallLogLoaderListener(count));
-        }
-    }
-
-    /**
-     * Calls when the insertion has completed.
-     *
-     * @param message the message to show in a toast to the user
-     */
-    private void insertCompleted(String message) {
-        // Hide the progress bar.
-        mProgressBar.setVisibility(View.GONE);
-        // Re-enable the add button.
-        mNumberTextView.setEnabled(true);
-        mAddButton.setEnabled(true);
-        mNumberTextView.setText("");
-        Toast.makeText(this, message, Toast.LENGTH_LONG).show();
-    }
-
-
-    /**
-     * Creates a {@link ContentValues} object containing values corresponding to the given cursor.
-     *
-     * @param cursor the cursor from which to get the values
-     * @return a newly created content values object
-     */
-    private ContentValues createContentValuesFromCursor(Cursor cursor) {
-        ContentValues values = new ContentValues();
-        for (int column = 0; column < cursor.getColumnCount();
-                ++column) {
-            String name = cursor.getColumnName(column);
-            switch (cursor.getType(column)) {
-                case Cursor.FIELD_TYPE_STRING:
-                    values.put(name, cursor.getString(column));
-                    break;
-                case Cursor.FIELD_TYPE_INTEGER:
-                    values.put(name, cursor.getLong(column));
-                    break;
-                case Cursor.FIELD_TYPE_FLOAT:
-                    values.put(name, cursor.getDouble(column));
-                    break;
-                case Cursor.FIELD_TYPE_BLOB:
-                    values.put(name, cursor.getBlob(column));
-                    break;
-                case Cursor.FIELD_TYPE_NULL:
-                    values.putNull(name);
-                    break;
-                default:
-                    Log.d(TAG, "Invalid value in cursor: " + cursor.getType(column));
-                    break;
-            }
-        }
-        return values;
-    }
-
-    private void addRandomNumbers(int count) {
-        ContentValues[] values = new ContentValues[count];
-        for (int i = 0; i < count; i++) {
-            values[i] = new ContentValues();
-            values[i].put(Calls.NUMBER, generateRandomNumber());
-            values[i].put(Calls.DATE, System.currentTimeMillis()); // Will be randomized later
-            values[i].put(Calls.DURATION, 1); // Will be overwritten later
-        }
-        new AsyncCallLogInserter(values).execute(new Void[0]);
-    }
-
-    private static String generateRandomNumber() {
-        return String.format("5%09d", RNG.nextInt(1000000000));
-    }
-
-    /** Invokes {@link AsyncCallLogInserter} when the call log has loaded. */
-    private final class CallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
-        /** The number of items to insert when done. */
-        private final int mCount;
-
-        private CallLogLoaderListener(int count) {
-            mCount = count;
-        }
-
-        @Override
-        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-            Log.d(TAG, "onCreateLoader");
-            return new CursorLoader(FillCallLogTestActivity.this, Calls.CONTENT_URI,
-                    null, null, null, null);
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            try {
-                Log.d(TAG, "onLoadFinished");
-
-                if (data.getCount() == 0) {
-                    // If there are no entries in the call log, we cannot generate new ones.
-                    insertCompleted(getString(R.string.noLogEntriesToast));
-                    return;
-                }
-
-                data.moveToPosition(-1);
-
-                ContentValues[] values = new ContentValues[mCount];
-                for (int index = 0; index < mCount; ++index) {
-                    if (!data.moveToNext()) {
-                        data.moveToFirst();
-                    }
-                    values[index] = createContentValuesFromCursor(data);
-                }
-                new AsyncCallLogInserter(values).execute(new Void[0]);
-            } finally {
-                // This is a one shot loader.
-                getLoaderManager().destroyLoader(CALLLOG_LOADER_ID);
-            }
-        }
-
-        @Override
-        public void onLoaderReset(Loader<Cursor> loader) {}
-    }
-
-    /** Inserts a given number of entries in the call log based on the values given. */
-    private final class AsyncCallLogInserter extends AsyncTask<Void, Integer, Integer> {
-        /** The number of items to insert. */
-        private final ContentValues[] mValues;
-
-        public AsyncCallLogInserter(ContentValues[] values) {
-            mValues = values;
-        }
-
-        @Override
-        protected Integer doInBackground(Void... params) {
-            Log.d(TAG, "doInBackground");
-            return insertIntoCallLog();
-        }
-
-        @Override
-        protected void onProgressUpdate(Integer... values) {
-            Log.d(TAG, "onProgressUpdate");
-            updateCount(values[0]);
-        }
-
-        @Override
-        protected void onPostExecute(Integer count) {
-            Log.d(TAG, "onPostExecute");
-            insertCompleted(getString(R.string.addedLogEntriesToast, count));
-        }
-
-        /**
-         * Inserts a number of entries in the call log based on the given templates.
-         *
-         * @return the number of inserted entries
-         */
-        private Integer insertIntoCallLog() {
-            int inserted = 0;
-
-            for (int index = 0; index < mValues.length; ++index) {
-                ContentValues values = mValues[index];
-                // These should not be set.
-                values.putNull(Calls._ID);
-                // Add some randomness to the date. For each new entry being added, add an extra
-                // day to the maximum possible offset from the original.
-                values.put(Calls.DATE,
-                        values.getAsLong(Calls.DATE)
-                        - RNG.nextInt(24 * 60 * 60 * (index + 1)) * 1000L);
-                // Add some randomness to the duration.
-                if (values.getAsLong(Calls.DURATION) > 0) {
-                    values.put(Calls.DURATION, RNG.nextInt(30 * 60 * 60 * 1000));
-                }
-
-                // Overwrite type.
-                values.put(Calls.TYPE, CALL_TYPES[RNG.nextInt(CALL_TYPES.length)]);
-
-                // Clear cached columns.
-                values.putNull(Calls.CACHED_FORMATTED_NUMBER);
-                values.putNull(Calls.CACHED_LOOKUP_URI);
-                values.putNull(Calls.CACHED_MATCHED_NUMBER);
-                values.putNull(Calls.CACHED_NAME);
-                values.putNull(Calls.CACHED_NORMALIZED_NUMBER);
-                values.putNull(Calls.CACHED_NUMBER_LABEL);
-                values.putNull(Calls.CACHED_NUMBER_TYPE);
-                values.putNull(Calls.CACHED_PHOTO_ID);
-
-                // Insert into the call log the newly generated entry.
-                ContentProviderClient contentProvider =
-                        getContentResolver().acquireContentProviderClient(
-                                Calls.CONTENT_URI);
-                try {
-                    Log.d(TAG, "adding entry to call log");
-                    contentProvider.insert(Calls.CONTENT_URI, values);
-                    ++inserted;
-                    this.publishProgress(inserted);
-                } catch (RemoteException e) {
-                    Log.d(TAG, "insert failed", e);
-                }
-            }
-            return inserted;
-        }
-    }
-
-    /**
-     * Updates the count shown to the user corresponding to the number of entries added.
-     *
-     * @param count the number of entries inserted so far
-     */
-    public void updateCount(Integer count) {
-        mProgressBar.setProgress(count);
-    }
-}
diff --git a/tests/src/com/android/contacts/util/ExpirableCacheTest.java b/tests/src/com/android/contacts/util/ExpirableCacheTest.java
deleted file mode 100644
index 33e176e..0000000
--- a/tests/src/com/android/contacts/util/ExpirableCacheTest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.util;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.LruCache;
-
-import com.android.contacts.util.ExpirableCache.CachedValue;
-
-/**
- * Unit tests for {@link ExpirableCache}.
- */
-@SmallTest
-public class ExpirableCacheTest extends AndroidTestCase {
-    /** The object under test. */
-    private ExpirableCache<String, Integer> mCache;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        LruCache<String, CachedValue<Integer>> lruCache =
-            new LruCache<String, ExpirableCache.CachedValue<Integer>>(20);
-        mCache = ExpirableCache.create(lruCache);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mCache = null;
-        super.tearDown();
-    }
-
-    public void testPut() {
-        mCache.put("a", 1);
-        mCache.put("b", 2);
-        assertEquals(1, mCache.getPossiblyExpired("a").intValue());
-        assertEquals(2, mCache.getPossiblyExpired("b").intValue());
-        mCache.put("a", 3);
-        assertEquals(3, mCache.getPossiblyExpired("a").intValue());
-    }
-
-    public void testGet_NotExisting() {
-        assertNull(mCache.getPossiblyExpired("a"));
-        mCache.put("b", 1);
-        assertNull(mCache.getPossiblyExpired("a"));
-    }
-
-    public void testGet_Expired() {
-        mCache.put("a", 1);
-        assertEquals(1, mCache.getPossiblyExpired("a").intValue());
-        mCache.expireAll();
-        assertEquals(1, mCache.getPossiblyExpired("a").intValue());
-    }
-
-    public void testGetNotExpired_NotExisting() {
-        assertNull(mCache.get("a"));
-        mCache.put("b", 1);
-        assertNull(mCache.get("a"));
-    }
-
-    public void testGetNotExpired_Expired() {
-        mCache.put("a", 1);
-        assertEquals(1, mCache.get("a").intValue());
-        mCache.expireAll();
-        assertNull(mCache.get("a"));
-    }
-
-    public void testGetCachedValue_NotExisting() {
-        assertNull(mCache.getCachedValue("a"));
-        mCache.put("b", 1);
-        assertNull(mCache.getCachedValue("a"));
-    }
-
-    public void testGetCachedValue_Expired() {
-        mCache.put("a", 1);
-        assertFalse("Should not be expired", mCache.getCachedValue("a").isExpired());
-        mCache.expireAll();
-        assertTrue("Should be expired", mCache.getCachedValue("a").isExpired());
-    }
-
-    public void testGetChangedValue_PutAfterExpired() {
-        mCache.put("a", 1);
-        mCache.expireAll();
-        mCache.put("a", 1);
-        assertFalse("Should not be expired", mCache.getCachedValue("a").isExpired());
-    }
-
-    public void testComputingCache() {
-        // Creates a cache in which all unknown values default to zero.
-        mCache = ExpirableCache.create(
-                new LruCache<String, ExpirableCache.CachedValue<Integer>>(10) {
-                    @Override
-                    protected CachedValue<Integer> create(String key) {
-                        return mCache.newCachedValue(0);
-                    }
-                });
-
-        // The first time we request a new value, we add it to the cache.
-        CachedValue<Integer> cachedValue = mCache.getCachedValue("a");
-        assertNotNull("Should have been created implicitly", cachedValue);
-        assertEquals(0, cachedValue.getValue().intValue());
-        assertFalse("Should not be expired", cachedValue.isExpired());
-
-        // If we expire all the values, the implicitly created value will also be marked as expired.
-        mCache.expireAll();
-        CachedValue<Integer> expiredCachedValue = mCache.getCachedValue("a");
-        assertNotNull("Should have been created implicitly", expiredCachedValue);
-        assertEquals(0, expiredCachedValue.getValue().intValue());
-        assertTrue("Should be expired", expiredCachedValue.isExpired());
-    }
-}
diff --git a/tests/src/com/android/contacts/util/FakeAsyncTaskExecutor.java b/tests/src/com/android/contacts/util/FakeAsyncTaskExecutor.java
deleted file mode 100644
index 8c97f21..0000000
--- a/tests/src/com/android/contacts/util/FakeAsyncTaskExecutor.java
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.util;
-
-import android.app.Instrumentation;
-import android.os.AsyncTask;
-
-import com.google.common.collect.Lists;
-
-import junit.framework.Assert;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Executor;
-import java.util.concurrent.TimeUnit;
-
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
-
-/**
- * Test implementation of AsyncTaskExecutor.
- * <p>
- * This class is thread-safe. As per the contract of the AsyncTaskExecutor, the submit methods must
- * be called from the main ui thread, however the other public methods may be called from any thread
- * (most commonly the test thread).
- * <p>
- * Tasks submitted to this executor will not be run immediately. Rather they will be stored in a
- * list of submitted tasks, where they can be examined. They can also be run on-demand using the run
- * methods, so that different ordering of AsyncTask execution can be simulated.
- * <p>
- * The onPreExecute method of the submitted AsyncTask will be called synchronously during the
- * call to {@link #submit(Object, AsyncTask, Object...)}.
- */
-@ThreadSafe
-public class FakeAsyncTaskExecutor implements AsyncTaskExecutor {
-    private static final long DEFAULT_TIMEOUT_MS = 10000;
-
-    /** The maximum length of time in ms to wait for tasks to execute during tests. */
-    private final long mTimeoutMs = DEFAULT_TIMEOUT_MS;
-
-    private final Object mLock = new Object();
-    @GuardedBy("mLock") private final List<SubmittedTask> mSubmittedTasks = Lists.newArrayList();
-
-    private final DelayedExecutor mBlockingExecutor = new DelayedExecutor();
-    private final Instrumentation mInstrumentation;
-
-    /** Create a fake AsyncTaskExecutor for use in unit tests. */
-    public FakeAsyncTaskExecutor(Instrumentation instrumentation) {
-        Assert.assertNotNull(instrumentation);
-        mInstrumentation = instrumentation;
-    }
-
-    /** Encapsulates an async task with the params and identifier it was submitted with. */
-    public interface SubmittedTask {
-        Runnable getRunnable();
-        Object getIdentifier();
-        AsyncTask<?, ?, ?> getAsyncTask();
-    }
-
-    private static final class SubmittedTaskImpl implements SubmittedTask {
-        private final Object mIdentifier;
-        private final Runnable mRunnable;
-        private final AsyncTask<?, ?, ?> mAsyncTask;
-
-        public SubmittedTaskImpl(Object identifier, Runnable runnable,
-                AsyncTask<?, ?, ?> asyncTask) {
-            mIdentifier = identifier;
-            mRunnable = runnable;
-            mAsyncTask = asyncTask;
-        }
-
-        @Override
-        public Object getIdentifier() {
-            return mIdentifier;
-        }
-
-        @Override
-        public Runnable getRunnable() {
-            return mRunnable;
-        }
-
-        @Override
-        public AsyncTask<?, ?, ?> getAsyncTask() {
-            return mAsyncTask;
-        }
-
-        @Override
-        public String toString() {
-            return "SubmittedTaskImpl [mIdentifier=" + mIdentifier + "]";
-        }
-    }
-
-    private class DelayedExecutor implements Executor {
-        private final Object mNextLock = new Object();
-        @GuardedBy("mNextLock") private Object mNextIdentifier;
-        @GuardedBy("mNextLock") private AsyncTask<?, ?, ?> mNextTask;
-
-        @Override
-        public void execute(Runnable command) {
-            synchronized (mNextLock) {
-                Assert.assertNotNull(mNextTask);
-                mSubmittedTasks.add(new SubmittedTaskImpl(mNextIdentifier,
-                        command, mNextTask));
-                mNextIdentifier = null;
-                mNextTask = null;
-            }
-        }
-
-        public <T> AsyncTask<T, ?, ?> submit(Object identifier,
-                AsyncTask<T, ?, ?> task, T... params) {
-            synchronized (mNextLock) {
-                Assert.assertNull(mNextIdentifier);
-                Assert.assertNull(mNextTask);
-                mNextIdentifier = identifier;
-                Assert.assertNotNull("Already had a valid task.\n"
-                        + "Are you calling AsyncTaskExecutor.submit(...) from within the "
-                        + "onPreExecute() method of another task being submitted?\n"
-                        + "Sorry!  Not that's not supported.", task);
-                mNextTask = task;
-            }
-            return task.executeOnExecutor(this, params);
-        }
-    }
-
-    @Override
-    public <T> AsyncTask<T, ?, ?> submit(Object identifier, AsyncTask<T, ?, ?> task, T... params) {
-        AsyncTaskExecutors.checkCalledFromUiThread();
-        return mBlockingExecutor.submit(identifier, task, params);
-    }
-
-    /**
-     * Runs a single task matching the given identifier.
-     * <p>
-     * Removes the matching task from the list of submitted tasks, then runs it. The executor used
-     * to execute this async task will be a same-thread executor.
-     * <p>
-     * Fails if there was not exactly one task matching the given identifier.
-     * <p>
-     * This method blocks until the AsyncTask has completely finished executing.
-     */
-    public void runTask(Object identifier) throws InterruptedException {
-        List<SubmittedTask> tasks = getSubmittedTasksByIdentifier(identifier, true);
-        Assert.assertEquals("Expected one task " + identifier + ", got " + tasks, 1, tasks.size());
-        runTask(tasks.get(0));
-    }
-
-    /**
-     * Runs all tasks whose identifier matches the given identifier.
-     * <p>
-     * Removes all matching tasks from the list of submitted tasks, and runs them. The executor used
-     * to execute these async tasks will be a same-thread executor.
-     * <p>
-     * Fails if there were no tasks matching the given identifier.
-     * <p>
-     * This method blocks until the AsyncTask objects have completely finished executing.
-     */
-    public void runAllTasks(Object identifier) throws InterruptedException {
-        List<SubmittedTask> tasks = getSubmittedTasksByIdentifier(identifier, true);
-        Assert.assertTrue("There were no tasks with identifier " + identifier, tasks.size() > 0);
-        for (SubmittedTask task : tasks) {
-            runTask(task);
-        }
-    }
-
-    /**
-     * Executes a single {@link SubmittedTask}.
-     * <p>
-     * Blocks until the task has completed running.
-     */
-    private <T> void runTask(final SubmittedTask submittedTask) throws InterruptedException {
-        submittedTask.getRunnable().run();
-        // Block until the onPostExecute or onCancelled has finished.
-        // Unfortunately we can't be sure when the AsyncTask will have posted its result handling
-        // code to the main ui thread, the best we can do is wait for the Status to be FINISHED.
-        final CountDownLatch latch = new CountDownLatch(1);
-        class AsyncTaskHasFinishedRunnable implements Runnable {
-            @Override
-            public void run() {
-                if (submittedTask.getAsyncTask().getStatus() == AsyncTask.Status.FINISHED) {
-                    latch.countDown();
-                } else {
-                    mInstrumentation.waitForIdle(this);
-                }
-            }
-        }
-        mInstrumentation.waitForIdle(new AsyncTaskHasFinishedRunnable());
-        Assert.assertTrue(latch.await(mTimeoutMs, TimeUnit.MILLISECONDS));
-    }
-
-    private List<SubmittedTask> getSubmittedTasksByIdentifier(
-            Object identifier, boolean remove) {
-        Assert.assertNotNull(identifier);
-        List<SubmittedTask> results = Lists.newArrayList();
-        synchronized (mLock) {
-            Iterator<SubmittedTask> iter = mSubmittedTasks.iterator();
-            while (iter.hasNext()) {
-                SubmittedTask task = iter.next();
-                if (identifier.equals(task.getIdentifier())) {
-                    results.add(task);
-                    iter.remove();
-                }
-            }
-        }
-        return results;
-    }
-
-    /** Get a factory that will return this instance - useful for testing. */
-    public AsyncTaskExecutors.AsyncTaskExecutorFactory getFactory() {
-        return new AsyncTaskExecutors.AsyncTaskExecutorFactory() {
-            @Override
-            public AsyncTaskExecutor createAsyncTaskExeuctor() {
-                return FakeAsyncTaskExecutor.this;
-            }
-        };
-    }
-}
diff --git a/tests/src/com/android/contacts/util/IntegrationTestUtils.java b/tests/src/com/android/contacts/util/IntegrationTestUtils.java
deleted file mode 100644
index 8c9dd6c..0000000
--- a/tests/src/com/android/contacts/util/IntegrationTestUtils.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.util;
-
-import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;
-import static android.os.PowerManager.FULL_WAKE_LOCK;
-import static android.os.PowerManager.ON_AFTER_RELEASE;
-
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.content.Context;
-import android.os.PowerManager;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.google.common.base.Preconditions;
-
-import junit.framework.Assert;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.FutureTask;
-
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
-
-/** Some utility methods for making integration testing smoother. */
-@ThreadSafe
-public class IntegrationTestUtils {
-    private static final String TAG = "IntegrationTestUtils";
-
-    private final Instrumentation mInstrumentation;
-    private final Object mLock = new Object();
-    @GuardedBy("mLock") private PowerManager.WakeLock mWakeLock;
-
-    public IntegrationTestUtils(Instrumentation instrumentation) {
-        mInstrumentation = instrumentation;
-    }
-
-    /**
-     * Find a view by a given resource id, from the given activity, and click it, iff it is
-     * enabled according to {@link View#isEnabled()}.
-     */
-    public void clickButton(final Activity activity, final int buttonResourceId) throws Throwable {
-        runOnUiThreadAndGetTheResult(new Callable<Void>() {
-            @Override
-            public Void call() throws Exception {
-                View view = activity.findViewById(buttonResourceId);
-                Assert.assertNotNull(view);
-                if (view.isEnabled()) {
-                    view.performClick();
-                }
-                return null;
-            }
-        });
-    }
-
-    /** Returns the result of running {@link TextView#getText()} on the ui thread. */
-    public CharSequence getText(final TextView view) throws Throwable {
-        return runOnUiThreadAndGetTheResult(new Callable<CharSequence>() {
-            @Override
-            public CharSequence call() {
-                return view.getText();
-            }
-        });
-    }
-
-    // TODO: Move this class and the appropriate documentation into a test library, having checked
-    // first to see if exactly this code already exists or not.
-    /**
-     * Execute a callable on the ui thread, returning its result synchronously.
-     * <p>
-     * Waits for an idle sync on the main thread (see {@link Instrumentation#waitForIdle(Runnable)})
-     * before executing this callable.
-     */
-    public <T> T runOnUiThreadAndGetTheResult(Callable<T> callable) throws Throwable {
-        FutureTask<T> future = new FutureTask<T>(callable);
-        mInstrumentation.waitForIdle(future);
-        try {
-            return future.get();
-        } catch (ExecutionException e) {
-            // Unwrap the cause of the exception and re-throw it.
-            throw e.getCause();
-        }
-    }
-
-    /**
-     * Wake up the screen, useful in tests that want or need the screen to be on.
-     * <p>
-     * This is usually called from setUp() for tests that require it.  After calling this method,
-     * {@link #releaseScreenWakeLock()} must be called, this is usually done from tearDown().
-     */
-    public void acquireScreenWakeLock(Context context) {
-        synchronized (mLock) {
-            Preconditions.checkState(mWakeLock == null, "mWakeLock was already held");
-            mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
-                    .newWakeLock(ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE | FULL_WAKE_LOCK, TAG);
-            mWakeLock.acquire();
-        }
-    }
-
-    /** Release the wake lock previously acquired with {@link #acquireScreenWakeLock(Context)}. */
-    public void releaseScreenWakeLock() {
-        synchronized (mLock) {
-            // We don't use Preconditions to force you to have acquired before release.
-            // This is because we don't want unnecessary exceptions in tearDown() since they'll
-            // typically mask the actual exception that happened during the test.
-            // The other reason is that this method is most likely to be called from tearDown(),
-            // which is invoked within a finally block, so it's not infrequently the case that
-            // the setUp() method fails before getting the lock, at which point we don't want
-            // to fail in tearDown().
-            if (mWakeLock != null) {
-                mWakeLock.release();
-                mWakeLock = null;
-            }
-        }
-    }
-
-    /**
-     * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
-     * a substring.
-     */
-    public List<TextView> getTextViewsWithString(final Activity activity, final String text)
-            throws Throwable {
-        return runOnUiThreadAndGetTheResult(new Callable<List<TextView>>() {
-            @Override
-            public List<TextView> call() throws Exception {
-                List<TextView> matchingViews = new ArrayList<TextView>();
-                for (TextView textView : getAllViews(TextView.class, getRootView(activity))) {
-                    if (textView.getText().toString().contains(text)) {
-                        matchingViews.add(textView);
-                    }
-                }
-                return matchingViews;
-            }
-        });
-    }
-
-    /** Find the root view for a given activity. */
-    public static View getRootView(Activity activity) {
-        return activity.findViewById(android.R.id.content).getRootView();
-    }
-
-    /**
-     * Gets a list of all views of a given type, rooted at the given parent.
-     * <p>
-     * This method will recurse down through all {@link ViewGroup} instances looking for
-     * {@link View} instances of the supplied class type. Specifically it will use the
-     * {@link Class#isAssignableFrom(Class)} method as the test for which views to add to the list,
-     * so if you provide {@code View.class} as your type, you will get every view. The parent itself
-     * will be included also, should it be of the right type.
-     * <p>
-     * This call manipulates the ui, and as such should only be called from the application's main
-     * thread.
-     */
-    private static <T extends View> List<T> getAllViews(final Class<T> clazz, final View parent) {
-        List<T> results = new ArrayList<T>();
-        if (parent.getClass().equals(clazz)) {
-            results.add(clazz.cast(parent));
-        }
-        if (parent instanceof ViewGroup) {
-            ViewGroup viewGroup = (ViewGroup) parent;
-            for (int i = 0; i < viewGroup.getChildCount(); ++i) {
-                results.addAll(getAllViews(clazz, viewGroup.getChildAt(i)));
-            }
-        }
-        return results;
-    }
-}
diff --git a/tests/src/com/android/contacts/util/LocaleTestUtils.java b/tests/src/com/android/contacts/util/LocaleTestUtils.java
deleted file mode 100644
index e0a8670..0000000
--- a/tests/src/com/android/contacts/util/LocaleTestUtils.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.util;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-
-import java.util.Locale;
-
-/**
- * Utility class to save and restore the locale of the system.
- * <p>
- * This can be used for tests that assume to be run in a certain locale, e.g., because they
- * check against strings in a particular language or require an assumption on how the system
- * will behave in a specific locale.
- * <p>
- * In your test, you can change the locale with the following code:
- * <pre>
- * public class CanadaFrenchTest extends AndroidTestCase {
- *     private LocaleTestUtils mLocaleTestUtils;
- *
- *     &#64;Override
- *     public void setUp() throws Exception {
- *         super.setUp();
- *         mLocaleTestUtils = new LocaleTestUtils(getContext());
- *         mLocaleTestUtils.setLocale(Locale.CANADA_FRENCH);
- *     }
- *
- *     &#64;Override
- *     public void tearDown() throws Exception {
- *         mLocaleTestUtils.restoreLocale();
- *         mLocaleTestUtils = null;
- *         super.tearDown();
- *     }
- *
- *     ...
- * }
- * </pre>
- * Note that one should not call {@link #setLocale(Locale)} more than once without calling
- * {@link #restoreLocale()} first.
- * <p>
- * This class is not thread-safe. Usually its methods should be invoked only from the test thread.
- */
-public class LocaleTestUtils {
-    private final Context mContext;
-    private boolean mSaved;
-    private Locale mSavedContextLocale;
-    private Locale mSavedSystemLocale;
-
-    /**
-     * Create a new instance that can be used to set and reset the locale for the given context.
-     *
-     * @param context the context on which to alter the locale
-     */
-    public LocaleTestUtils(Context context) {
-        mContext = context;
-        mSaved = false;
-    }
-
-    /**
-     * Set the locale to the given value and saves the previous value.
-     *
-     * @param locale the value to which the locale should be set
-     * @throws IllegalStateException if the locale was already set
-     */
-    public void setLocale(Locale locale) {
-        if (mSaved) {
-            throw new IllegalStateException(
-                    "call restoreLocale() before calling setLocale() again");
-        }
-        mSavedContextLocale = setResourcesLocale(mContext.getResources(), locale);
-        mSavedSystemLocale = setResourcesLocale(Resources.getSystem(), locale);
-        mSaved = true;
-    }
-
-    /**
-     * Restores the previously set locale.
-     *
-     * @throws IllegalStateException if the locale was not set using {@link #setLocale(Locale)}
-     */
-    public void restoreLocale() {
-        if (!mSaved) {
-            throw new IllegalStateException("call setLocale() before calling restoreLocale()");
-        }
-        setResourcesLocale(mContext.getResources(), mSavedContextLocale);
-        setResourcesLocale(Resources.getSystem(), mSavedSystemLocale);
-        mSaved = false;
-    }
-
-    /**
-     * Sets the locale for the given resources and returns the previous locale.
-     *
-     * @param resources the resources on which to set the locale
-     * @param locale the value to which to set the locale
-     * @return the previous value of the locale for the resources
-     */
-    private Locale setResourcesLocale(Resources resources, Locale locale) {
-        Configuration contextConfiguration = new Configuration(resources.getConfiguration());
-        Locale savedLocale = contextConfiguration.locale;
-        contextConfiguration.locale = locale;
-        resources.updateConfiguration(contextConfiguration, null);
-        return savedLocale;
-    }
-}
\ No newline at end of file
diff --git a/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java b/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java
deleted file mode 100644
index 801c162..0000000
--- a/tests/src/com/android/contacts/voicemail/VoicemailStatusHelperImplTest.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2011 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 com.android.contacts.voicemail;
-
-import static android.provider.VoicemailContract.Status.CONFIGURATION_STATE;
-import static android.provider.VoicemailContract.Status.CONFIGURATION_STATE_CAN_BE_CONFIGURED;
-import static android.provider.VoicemailContract.Status.CONFIGURATION_STATE_NOT_CONFIGURED;
-import static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE;
-import static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE_NO_CONNECTION;
-import static android.provider.VoicemailContract.Status.DATA_CHANNEL_STATE_OK;
-import static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE;
-import static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING;
-import static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_NO_CONNECTION;
-import static android.provider.VoicemailContract.Status.NOTIFICATION_CHANNEL_STATE_OK;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.VoicemailContract.Status;
-import android.test.AndroidTestCase;
-
-import com.android.contacts.R;
-import com.android.contacts.voicemail.VoicemailStatusHelper.StatusMessage;
-
-import java.util.List;
-
-/**
- * Unit tests for {@link VoicemailStatusHelperImpl}.
- */
-public class VoicemailStatusHelperImplTest extends AndroidTestCase {
-    private static final String[] TEST_PACKAGES = new String[] {
-        "com.test.package1",
-        "com.test.package2"
-    };
-
-    private static final Uri TEST_SETTINGS_URI = Uri.parse("http://www.visual.voicemail.setup");
-    private static final Uri TEST_VOICEMAIL_URI = Uri.parse("tel:901");
-
-    private static final int ACTION_MSG_CALL_VOICEMAIL =
-            R.string.voicemail_status_action_call_server;
-    private static final int ACTION_MSG_CONFIGURE = R.string.voicemail_status_action_configure;
-
-    private static final int STATUS_MSG_NONE = -1;
-    private static final int STATUS_MSG_VOICEMAIL_NOT_AVAILABLE =
-            R.string.voicemail_status_voicemail_not_available;
-    private static final int STATUS_MSG_AUDIO_NOT_AVAIALABLE =
-            R.string.voicemail_status_audio_not_available;
-    private static final int STATUS_MSG_MESSAGE_WAITING = R.string.voicemail_status_messages_waiting;
-    private static final int STATUS_MSG_INVITE_FOR_CONFIGURATION =
-            R.string.voicemail_status_configure_voicemail;
-
-    // Object under test.
-    private VoicemailStatusHelper mStatusHelper;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mStatusHelper = new VoicemailStatusHelperImpl();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        for (String sourcePackage : TEST_PACKAGES) {
-            deleteEntryForPackage(sourcePackage);
-        }
-        // Set member variables to null so that they are garbage collected across different runs
-        // of the tests.
-        mStatusHelper = null;
-        super.tearDown();
-    }
-
-
-    public void testNoStatusEntries() {
-        assertEquals(0, getStatusMessages().size());
-    }
-
-    public void testAllOK() {
-        insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
-        insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
-        assertEquals(0, getStatusMessages().size());
-    }
-
-    public void testNotAllOKForOnePackage() {
-        insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
-        insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
-
-        ContentValues values = new ContentValues();
-        // Good data channel + no notification
-        // action: call voicemail
-        // msg: voicemail not available in call log page & none in call details page.
-        values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
-        values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
-                STATUS_MSG_NONE, ACTION_MSG_CALL_VOICEMAIL);
-
-        // Message waiting + good data channel - no action.
-        values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
-        values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkNoMessages(TEST_PACKAGES[1], values);
-
-        // No data channel + no notification
-        // action: call voicemail
-        // msg: voicemail not available in call log page & audio not available in call details page.
-        values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_OK);
-        values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
-                STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
-
-        // No data channel + Notification OK
-        // action: call voicemail
-        // msg: voicemail not available in call log page & audio not available in call details page.
-        values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
-        values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_VOICEMAIL_NOT_AVAILABLE,
-                STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
-
-        // No data channel + Notification OK
-        // action: call voicemail
-        // msg: message waiting in call log page & audio not available in call details page.
-        values.put(NOTIFICATION_CHANNEL_STATE, NOTIFICATION_CHANNEL_STATE_MESSAGE_WAITING);
-        values.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_MESSAGE_WAITING,
-                STATUS_MSG_AUDIO_NOT_AVAIALABLE, ACTION_MSG_CALL_VOICEMAIL);
-
-        // Not configured. No user action, so no message.
-        values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_NOT_CONFIGURED);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkNoMessages(TEST_PACKAGES[1], values);
-
-        // Can be configured - invite user for configure voicemail.
-        values.put(CONFIGURATION_STATE, CONFIGURATION_STATE_CAN_BE_CONFIGURED);
-        updateEntryForPackage(TEST_PACKAGES[1], values);
-        checkExpectedMessage(TEST_PACKAGES[1], values, STATUS_MSG_INVITE_FOR_CONFIGURATION,
-                STATUS_MSG_NONE, ACTION_MSG_CONFIGURE, TEST_SETTINGS_URI);
-    }
-
-    // Test that priority of messages are handled well.
-    public void testMessageOrdering() {
-        insertEntryForPackage(TEST_PACKAGES[0], getAllOkStatusValues());
-        insertEntryForPackage(TEST_PACKAGES[1], getAllOkStatusValues());
-
-        final ContentValues valuesNoNotificationGoodDataChannel = new ContentValues();
-        valuesNoNotificationGoodDataChannel.put(NOTIFICATION_CHANNEL_STATE,
-                NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
-        valuesNoNotificationGoodDataChannel.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_OK);
-
-        final ContentValues valuesNoNotificationNoDataChannel = new ContentValues();
-        valuesNoNotificationNoDataChannel.put(NOTIFICATION_CHANNEL_STATE,
-                NOTIFICATION_CHANNEL_STATE_NO_CONNECTION);
-        valuesNoNotificationNoDataChannel.put(DATA_CHANNEL_STATE, DATA_CHANNEL_STATE_NO_CONNECTION);
-
-        // Package1 with valuesNoNotificationGoodDataChannel and
-        // package2 with  valuesNoNotificationNoDataChannel. Package2 should be above.
-        updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationGoodDataChannel);
-        updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationNoDataChannel);
-        List<StatusMessage> messages = getStatusMessages();
-        assertEquals(2, messages.size());
-        assertEquals(TEST_PACKAGES[0], messages.get(1).sourcePackage);
-        assertEquals(TEST_PACKAGES[1], messages.get(0).sourcePackage);
-
-        // Now reverse the values - ordering should be reversed as well.
-        updateEntryForPackage(TEST_PACKAGES[0], valuesNoNotificationNoDataChannel);
-        updateEntryForPackage(TEST_PACKAGES[1], valuesNoNotificationGoodDataChannel);
-        messages = getStatusMessages();
-        assertEquals(2, messages.size());
-        assertEquals(TEST_PACKAGES[0], messages.get(0).sourcePackage);
-        assertEquals(TEST_PACKAGES[1], messages.get(1).sourcePackage);
-    }
-
-    /** Checks that the expected source status message is returned by VoicemailStatusHelper. */
-    private void checkExpectedMessage(String sourcePackage, ContentValues values,
-            int expectedCallLogMsg, int expectedCallDetailsMsg, int expectedActionMsg,
-            Uri expectedUri) {
-        List<StatusMessage> messages = getStatusMessages();
-        assertEquals(1, messages.size());
-        checkMessageMatches(messages.get(0), sourcePackage, expectedCallLogMsg,
-                expectedCallDetailsMsg, expectedActionMsg, expectedUri);
-    }
-
-    private void checkExpectedMessage(String sourcePackage, ContentValues values,
-            int expectedCallLogMsg, int expectedCallDetailsMessage, int expectedActionMsg) {
-        checkExpectedMessage(sourcePackage, values, expectedCallLogMsg, expectedCallDetailsMessage,
-                expectedActionMsg, TEST_VOICEMAIL_URI);
-    }
-
-    private void checkMessageMatches(StatusMessage message, String expectedSourcePackage,
-            int expectedCallLogMsg, int expectedCallDetailsMsg, int expectedActionMsg,
-            Uri expectedUri) {
-        assertEquals(expectedSourcePackage, message.sourcePackage);
-        assertEquals(expectedCallLogMsg, message.callLogMessageId);
-        assertEquals(expectedCallDetailsMsg, message.callDetailsMessageId);
-        assertEquals(expectedActionMsg, message.actionMessageId);
-        if (expectedUri == null) {
-            assertNull(message.actionUri);
-        } else {
-            assertEquals(expectedUri, message.actionUri);
-        }
-    }
-
-    private void checkNoMessages(String sourcePackage, ContentValues values) {
-        assertEquals(1, updateEntryForPackage(sourcePackage, values));
-        List<StatusMessage> messages = getStatusMessages();
-        assertEquals(0, messages.size());
-    }
-
-    private ContentValues getAllOkStatusValues() {
-        ContentValues values = new ContentValues();
-        values.put(Status.SETTINGS_URI, TEST_SETTINGS_URI.toString());
-        values.put(Status.VOICEMAIL_ACCESS_URI, TEST_VOICEMAIL_URI.toString());
-        values.put(Status.CONFIGURATION_STATE, Status.CONFIGURATION_STATE_OK);
-        values.put(Status.DATA_CHANNEL_STATE, Status.DATA_CHANNEL_STATE_OK);
-        values.put(Status.NOTIFICATION_CHANNEL_STATE, Status.NOTIFICATION_CHANNEL_STATE_OK);
-        return values;
-    }
-
-    private void insertEntryForPackage(String sourcePackage, ContentValues values) {
-        // If insertion fails then try update as the record might already exist.
-        if (getContentResolver().insert(Status.buildSourceUri(sourcePackage), values) == null) {
-            updateEntryForPackage(sourcePackage, values);
-        }
-    }
-
-    private void deleteEntryForPackage(String sourcePackage) {
-        getContentResolver().delete(Status.buildSourceUri(sourcePackage), null, null);
-    }
-
-    private int updateEntryForPackage(String sourcePackage, ContentValues values) {
-        return getContentResolver().update(
-                Status.buildSourceUri(sourcePackage), values, null, null);
-    }
-
-    private List<StatusMessage> getStatusMessages() {
-        // Restrict the cursor to only the the test packages to eliminate any side effects if there
-        // are other status messages already stored on the device.
-        Cursor cursor = getContentResolver().query(Status.CONTENT_URI,
-                VoicemailStatusHelperImpl.PROJECTION, getTestPackageSelection(), null, null);
-        return mStatusHelper.getStatusMessages(cursor);
-    }
-
-    private String getTestPackageSelection() {
-        StringBuilder sb = new StringBuilder();
-        for (String sourcePackage : TEST_PACKAGES) {
-            if (sb.length() > 0) {
-                sb.append(" OR ");
-            }
-            sb.append(String.format("(source_package='%s')", sourcePackage));
-        }
-        return sb.toString();
-    }
-
-    private ContentResolver getContentResolver() {
-        return getContext().getContentResolver();
-    }
-}