19c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng/*
29c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * Copyright (C) 2010 The Android Open Source Project
39c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *
49c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * Licensed under the Apache License, Version 2.0 (the "License");
59c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * you may not use this file except in compliance with the License.
69c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * You may obtain a copy of the License at
79c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *
89c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *      http://www.apache.org/licenses/LICENSE-2.0
99c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *
109c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * Unless required by applicable law or agreed to in writing, software
119c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * distributed under the License is distributed on an "AS IS" BASIS,
129c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * See the License for the specific language governing permissions and
149c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * limitations under the License.
159c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng */
169c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
179c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengpackage com.android.dialer.interactions;
189c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
199c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.content.ContentUris;
209c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.content.Context;
219c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.content.DialogInterface.OnDismissListener;
229c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.content.Intent;
239c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.net.Uri;
249c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.os.AsyncTask;
259c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.Phone;
269c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.provider.ContactsContract.CommonDataKinds.SipAddress;
279c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.provider.ContactsContract.Contacts;
289c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.provider.ContactsContract.Data;
299c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.provider.ContactsContract.RawContacts;
309c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.test.InstrumentationTestCase;
319c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport android.test.suitebuilder.annotation.SmallTest;
329c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
339c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport com.android.contacts.common.test.mocks.ContactsMockContext;
349c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport com.android.contacts.common.test.mocks.MockContentProvider;
359c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport com.android.contacts.common.test.mocks.MockContentProvider.Query;
369c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport com.android.contacts.common.util.ContactDisplayUtils;
379c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport com.android.dialer.interactions.PhoneNumberInteraction.PhoneItem;
389c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
399c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport java.util.ArrayList;
409c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengimport java.util.List;
419c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
429c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng/**
439c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * Tests for {@link com.android.contacts.common.interactions.PhoneNumberInteraction}.
449c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *
459c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *   adb shell am instrument \
46d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos *     -w com.android.dialer.tests/android.test.InstrumentationTestRunner
479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng */
489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng@SmallTest
499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengpublic class PhoneNumberInteractionTest extends InstrumentationTestCase {
509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
519c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    static {
529c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        // AsyncTask class needs to be initialized on the main thread.
539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        AsyncTask.init();
549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private final static class TestPhoneNumberInteraction extends PhoneNumberInteraction {
579c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        private ArrayList<PhoneItem> mPhoneList;
589c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
599c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        public TestPhoneNumberInteraction(Context context, int interactionType,
609c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                OnDismissListener dismissListener) {
619c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            super(context, interactionType, dismissListener);
629c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
639c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
649c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        @Override
659c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        void showDisambiguationDialog(ArrayList<PhoneItem> phoneList) {
669c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            this.mPhoneList = phoneList;
679c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
689c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
699c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
709c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private ContactsMockContext mContext;
719c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private MockContentProvider mContactsProvider;
729c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
739c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    @Override
749c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    protected void setUp() throws Exception {
759c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        super.setUp();
769c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
779c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContactsProvider = mContext.getContactsProvider();
789c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
799c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
809c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    @Override
819c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    protected void tearDown() throws Exception {
829c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContactsProvider.verify();
839c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        super.tearDown();
849c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
859c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
869c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenOnlyOneNumberAvailable() {
879c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
889c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
899c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
903671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13);
919c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
929c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
939c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
949c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
959c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
969c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
979c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
989c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
999c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1009c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1019c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1029c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:123", intent.getDataString());
1039c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1049c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1059c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenDataIdIsProvided() {
1069c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, 1);
1079c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(dataUri, true /* isDataUri */ )
1089c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "987", 0, null, null, Phone.TYPE_HOME, null,
1093671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 1);
1109c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1119c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1129c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
1139c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1149c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(dataUri);
1159c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1169c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1179c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1189c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1199c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1209c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1219c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:987", intent.getDataString());
1229c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1239c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1249c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenThereIsPrimaryNumber() {
1259c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1269c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1273671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
1283671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13)
1293671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                .returnRow(2, "456", 1, null, null, Phone.TYPE_HOME, null,
1303671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13);
1319c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1329c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1339c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
1349c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1359c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1369c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1379c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1389c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1399c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1409c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1419c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1429c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:456", intent.getDataString());
1439c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1449c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
145d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos    public void testShouldCollapseWith() {
1469c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneNumberInteraction.PhoneItem phoneItem1 = new PhoneNumberInteraction.PhoneItem();
1479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneNumberInteraction.PhoneItem phoneItem2 = new PhoneNumberInteraction.PhoneItem();
1489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123";
1509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "123";
1519c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
152d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos        assertTrue(phoneItem1.shouldCollapseWith(phoneItem2, mContext));
1539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123";
1559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "456";
1569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
157d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos        assertFalse(phoneItem1.shouldCollapseWith(phoneItem2, mContext));
1589c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1599c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123#,123";
1609c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "123#,456";
1619c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
162d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos        assertFalse(phoneItem1.shouldCollapseWith(phoneItem2, mContext));
163d71afa85cb21bcfa379249990ba0d430bbba9545Paul Soulos    }
1649c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1659c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testCallNumberWhenThereAreDuplicates() {
1669c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1679c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1689c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
1693671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13)
1709c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(2, "123", 0, null, null, Phone.TYPE_WORK, null,
1713671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13);
1729c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1739c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1749c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
1759c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1769c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1779c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1789c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1799c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1809c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1819c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1829c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
1839c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("tel:123", intent.getDataString());
1849c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1859c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1869c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testCallWithSip() {
1879c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1889c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1899c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "example@example.com", 0, null, null, Phone.TYPE_HOME, null,
1903671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        SipAddress.CONTENT_ITEM_TYPE, 13);
1919c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1929c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
1939c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1949c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1959c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1969c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1979c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1989c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1999c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2009c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
2019c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sip:example%40example.com", intent.getDataString());
2029c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2039c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2049c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testShowDisambigDialogForCalling() {
2059c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
2069c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
2079c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, "account", null, Phone.TYPE_HOME, "label",
2083671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13)
2099c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(2, "456", 0, null, null, Phone.TYPE_WORK, null,
2103671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTENT_ITEM_TYPE, 13);
2119c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2129c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
2139c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
2149c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2159c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
2169c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
2179c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2189c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        List<PhoneItem> items = interaction.mPhoneList;
2199c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(items);
2209c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(2, items.size());
2219c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2229c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneItem item = items.get(0);
2239c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(1, item.id);
2249c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("123", item.phoneNumber);
2259c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("account", item.accountType);
2269c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Phone.TYPE_HOME, item.type);
2279c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("label", item.label);
2289c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2299c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2309c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private Query expectQuery(Uri contactUri) {
2319c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        return expectQuery(contactUri, false);
2329c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2339c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2349c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private Query expectQuery(Uri uri, boolean isDataUri) {
2359c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        final Uri dataUri;
2369c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        if (isDataUri) {
2379c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            dataUri = uri;
2389c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        } else {
2399c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            dataUri = Uri.withAppendedPath(uri, Contacts.Data.CONTENT_DIRECTORY);
2409c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
2419c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        return mContactsProvider
2429c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .expectQuery(dataUri)
2439c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .withProjection(
2449c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone._ID,
2459c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.NUMBER,
2469c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.IS_SUPER_PRIMARY,
2479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        RawContacts.ACCOUNT_TYPE,
2489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        RawContacts.DATA_SET,
2499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.TYPE,
2509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.LABEL,
2513671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.MIMETYPE,
2523671725b58a9768016e141c77424dedb5fd2c55aYorke Lee                        Phone.CONTACT_ID)
2539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .withSelection("mimetype IN ('vnd.android.cursor.item/phone_v2',"
2549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        + " 'vnd.android.cursor.item/sip_address') AND data1 NOT NULL");
2559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng}
257