1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.contacts.detail; 18 19import android.content.ContentValues; 20import android.content.Intent; 21import android.net.Uri; 22import android.provider.ContactsContract.CommonDataKinds.Email; 23import android.provider.ContactsContract.CommonDataKinds.Im; 24import android.test.AndroidTestCase; 25import android.test.suitebuilder.annotation.SmallTest; 26 27import com.android.contacts.detail.ContactDetailFragment.DetailViewEntry; 28import com.android.contacts.model.dataitem.DataItem; 29import com.android.contacts.model.dataitem.EmailDataItem; 30import com.android.contacts.model.dataitem.ImDataItem; 31 32/** 33 * Tests for {@link ContactDetailFragment}. 34 */ 35@SmallTest 36public class ContactDetailFragmentTests extends AndroidTestCase { 37 private static final String TEST_ADDRESS = "user@example.org"; 38 private static final String TEST_PROTOCOL = "prot%col"; 39 40 public void testImIntent() throws Exception { 41 // Test GTalk XMPP URI. No chat capabilities provided 42 final ContentValues values = new ContentValues(); 43 values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE); 44 values.put(Im.TYPE, Im.TYPE_HOME); 45 values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK); 46 values.put(Im.DATA, TEST_ADDRESS); 47 ImDataItem im = (ImDataItem) DataItem.createFrom(null, values); 48 49 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 50 ContactDetailFragment.buildImActions(mContext, entry, im); 51 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 52 assertEquals("xmpp:" + TEST_ADDRESS + "?message", entry.intent.getData().toString()); 53 54 assertNull(entry.secondaryIntent); 55 } 56 57 public void testImIntentWithAudio() throws Exception { 58 // Test GTalk XMPP URI. Audio chat capabilities provided 59 final ContentValues values = new ContentValues(); 60 values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE); 61 values.put(Im.TYPE, Im.TYPE_HOME); 62 values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK); 63 values.put(Im.DATA, TEST_ADDRESS); 64 values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO); 65 ImDataItem im = (ImDataItem) DataItem.createFrom(null, values); 66 67 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 68 ContactDetailFragment.buildImActions(mContext, entry, im); 69 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 70 assertEquals("xmpp:" + TEST_ADDRESS + "?message", entry.intent.getData().toString()); 71 72 assertEquals(Intent.ACTION_SENDTO, entry.secondaryIntent.getAction()); 73 assertEquals("xmpp:" + TEST_ADDRESS + "?call", entry.secondaryIntent.getData().toString()); 74 } 75 76 public void testImIntentWithVideo() throws Exception { 77 // Test GTalk XMPP URI. Video chat capabilities provided 78 final ContentValues values = new ContentValues(); 79 values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE); 80 values.put(Im.TYPE, Im.TYPE_HOME); 81 values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK); 82 values.put(Im.DATA, TEST_ADDRESS); 83 values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO | 84 Im.CAPABILITY_HAS_VOICE); 85 ImDataItem im = (ImDataItem) DataItem.createFrom(null, values); 86 87 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 88 ContactDetailFragment.buildImActions(mContext, entry, im); 89 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 90 assertEquals("xmpp:" + TEST_ADDRESS + "?message", entry.intent.getData().toString()); 91 92 assertEquals(Intent.ACTION_SENDTO, entry.secondaryIntent.getAction()); 93 assertEquals("xmpp:" + TEST_ADDRESS + "?call", entry.secondaryIntent.getData().toString()); 94 } 95 96 public void testImIntentCustom() throws Exception { 97 // Custom IM types have encoded authority. We send the imto Intent here, because 98 // legacy third party apps might not accept xmpp yet 99 final ContentValues values = new ContentValues(); 100 values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE); 101 values.put(Im.TYPE, Im.TYPE_HOME); 102 values.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM); 103 values.put(Im.CUSTOM_PROTOCOL, TEST_PROTOCOL); 104 values.put(Im.DATA, TEST_ADDRESS); 105 ImDataItem im = (ImDataItem) DataItem.createFrom(null, values); 106 107 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 108 ContactDetailFragment.buildImActions(mContext, entry, im); 109 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 110 111 final Uri data = entry.intent.getData(); 112 assertEquals("imto", data.getScheme()); 113 assertEquals(TEST_PROTOCOL, data.getAuthority()); 114 assertEquals(TEST_ADDRESS, data.getPathSegments().get(0)); 115 116 assertNull(entry.secondaryIntent); 117 } 118 119 public void testImEmailIntent() throws Exception { 120 // Email addresses are treated as Google Talk entries 121 // This test only tests the VIDEO+CAMERA case. The other cases have been addressed by the 122 // Im tests 123 final ContentValues values = new ContentValues(); 124 values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE); 125 values.put(Email.TYPE, Email.TYPE_HOME); 126 values.put(Email.DATA, TEST_ADDRESS); 127 values.put(Email.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO | 128 Im.CAPABILITY_HAS_VOICE); 129 ImDataItem im = ImDataItem.createFromEmail( 130 (EmailDataItem) DataItem.createFrom(null, values)); 131 132 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 133 ContactDetailFragment.buildImActions(mContext, entry, im); 134 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 135 assertEquals("xmpp:" + TEST_ADDRESS + "?message", entry.intent.getData().toString()); 136 137 assertEquals(Intent.ACTION_SENDTO, entry.secondaryIntent.getAction()); 138 assertEquals("xmpp:" + TEST_ADDRESS + "?call", entry.secondaryIntent.getData().toString()); 139 } 140} 141