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 * Running all tests:
469c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *
479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *   runtest contacts
489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng * or
499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *   adb shell am instrument \
509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng *     -w com.android.contacts.tests/android.test.InstrumentationTestRunner
519c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng */
529c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng@SmallTest
539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Chengpublic class PhoneNumberInteractionTest extends InstrumentationTestCase {
549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    static {
569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        // AsyncTask class needs to be initialized on the main thread.
579c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        AsyncTask.init();
589c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
599c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
609c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private final static class TestPhoneNumberInteraction extends PhoneNumberInteraction {
619c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        private ArrayList<PhoneItem> mPhoneList;
629c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
639c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        public TestPhoneNumberInteraction(Context context, int interactionType,
649c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                OnDismissListener dismissListener) {
659c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            super(context, interactionType, dismissListener);
669c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
679c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
689c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        @Override
699c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        void showDisambiguationDialog(ArrayList<PhoneItem> phoneList) {
709c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            this.mPhoneList = phoneList;
719c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
729c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
739c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
749c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private ContactsMockContext mContext;
759c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private MockContentProvider mContactsProvider;
769c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
779c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    @Override
789c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    protected void setUp() throws Exception {
799c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        super.setUp();
809c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContext = new ContactsMockContext(getInstrumentation().getTargetContext());
819c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContactsProvider = mContext.getContactsProvider();
829c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
839c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
849c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    @Override
859c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    protected void tearDown() throws Exception {
869c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        mContactsProvider.verify();
879c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        super.tearDown();
889c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
899c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
909c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenOnlyOneNumberAvailable() {
919c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
929c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
939c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
949c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE);
959c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
969c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
979c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
989c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
999c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1009c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1019c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1029c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1039c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1049c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1059c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1069c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:123", intent.getDataString());
1079c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1089c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1099c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenDataIdIsProvided() {
1109c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, 1);
1119c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(dataUri, true /* isDataUri */ )
1129c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "987", 0, null, null, Phone.TYPE_HOME, null,
1139c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE);
1149c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1159c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1169c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
1179c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1189c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(dataUri);
1199c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1209c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1219c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1229c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1239c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1249c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1259c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:987", intent.getDataString());
1269c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1279c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1289c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testSendSmsWhenThereIsPrimaryNumber() {
1299c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1309c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1319c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(
1329c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        1, "123", 0, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE)
1339c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(
1349c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        2, "456", 1, null, null, Phone.TYPE_HOME, null, Phone.CONTENT_ITEM_TYPE);
1359c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1369c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1379c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_SMS, null);
1389c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1399c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1409c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1419c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1429c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1439c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1449c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1459c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_SENDTO, intent.getAction());
1469c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sms:456", intent.getDataString());
1479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testShouldCollapseWith() {
1509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneNumberInteraction.PhoneItem phoneItem1 = new PhoneNumberInteraction.PhoneItem();
1519c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneNumberInteraction.PhoneItem phoneItem2 = new PhoneNumberInteraction.PhoneItem();
1529c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123";
1549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "123";
1559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertTrue(phoneItem1.shouldCollapseWith(phoneItem2));
1579c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1589c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123";
1599c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "456";
1609c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1619c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertFalse(phoneItem1.shouldCollapseWith(phoneItem2));
1629c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1639c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem1.phoneNumber = "123#,123";
1649c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        phoneItem2.phoneNumber = "123#,456";
1659c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1669c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertFalse(phoneItem1.shouldCollapseWith(phoneItem2));
1679c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1689c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1699c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testCallNumberWhenThereAreDuplicates() {
1709c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1719c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1729c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, null, null, Phone.TYPE_HOME, null,
1739c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE)
1749c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(2, "123", 0, null, null, Phone.TYPE_WORK, null,
1759c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE);
1769c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1779c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1789c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
1799c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1809c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1819c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
1829c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1839c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
1849c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
1859c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1869c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
1879c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("tel:123", intent.getDataString());
1889c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
1899c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1909c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testCallWithSip() {
1919c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
1929c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
1939c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "example@example.com", 0, null, null, Phone.TYPE_HOME, null,
1949c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        SipAddress.CONTENT_ITEM_TYPE);
1959c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
1969c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
1979c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
1989c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
1999c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
2009c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2019c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Intent intent = mContext.getIntentForStartActivity();
2029c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(intent);
2039c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2049c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
2059c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("sip:example%40example.com", intent.getDataString());
2069c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2079c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2089c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    public void testShowDisambigDialogForCalling() {
2099c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, 13);
2109c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        expectQuery(contactUri)
2119c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(1, "123", 0, "account", null, Phone.TYPE_HOME, "label",
2129c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE)
2139c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .returnRow(2, "456", 0, null, null, Phone.TYPE_WORK, null,
2149c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.CONTENT_ITEM_TYPE);
2159c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2169c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        TestPhoneNumberInteraction interaction = new TestPhoneNumberInteraction(
2179c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                mContext, ContactDisplayUtils.INTERACTION_CALL, null);
2189c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2199c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.startInteraction(contactUri);
2209c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        interaction.getLoader().waitForLoader();
2219c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2229c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        List<PhoneItem> items = interaction.mPhoneList;
2239c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertNotNull(items);
2249c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(2, items.size());
2259c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2269c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        PhoneItem item = items.get(0);
2279c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(1, item.id);
2289c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("123", item.phoneNumber);
2299c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("account", item.accountType);
2309c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals(Phone.TYPE_HOME, item.type);
2319c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        assertEquals("label", item.label);
2329c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2339c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2349c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private Query expectQuery(Uri contactUri) {
2359c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        return expectQuery(contactUri, false);
2369c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2379c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng
2389c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    private Query expectQuery(Uri uri, boolean isDataUri) {
2399c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        final Uri dataUri;
2409c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        if (isDataUri) {
2419c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            dataUri = uri;
2429c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        } else {
2439c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng            dataUri = Uri.withAppendedPath(uri, Contacts.Data.CONTENT_DIRECTORY);
2449c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        }
2459c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng        return mContactsProvider
2469c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .expectQuery(dataUri)
2479c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .withProjection(
2489c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone._ID,
2499c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.NUMBER,
2509c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.IS_SUPER_PRIMARY,
2519c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        RawContacts.ACCOUNT_TYPE,
2529c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        RawContacts.DATA_SET,
2539c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.TYPE,
2549c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.LABEL,
2559c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        Phone.MIMETYPE)
2569c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                .withSelection("mimetype IN ('vnd.android.cursor.item/phone_v2',"
2579c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng                        + " 'vnd.android.cursor.item/sip_address') AND data1 NOT NULL");
2589c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng    }
2599c5fe4420bc1a1fe4edcac99e1f73b13bca63fa2Chiao Cheng}
260