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 17 package com.android.contacts.detail; 18 19 import android.content.ContentValues; 20 import android.content.Intent; 21 import android.net.Uri; 22 import android.provider.ContactsContract.CommonDataKinds.Email; 23 import android.provider.ContactsContract.CommonDataKinds.Im; 24 import android.test.AndroidTestCase; 25 import android.test.suitebuilder.annotation.SmallTest; 26 27 import com.android.contacts.detail.ContactDetailFragment.DetailViewEntry; 28 import com.android.contacts.model.dataitem.DataItem; 29 import com.android.contacts.model.dataitem.EmailDataItem; 30 import com.android.contacts.model.dataitem.ImDataItem; 31 32 /** 33 * Tests for {@link ContactDetailFragment}. 34 */ 35 @SmallTest 36 public class ContactDetailFragmentTests extends AndroidTestCase { 37 private static final String TEST_ADDRESS = "user@example.org"; 38 private static final String TEST_PROTOCOL = "prot%col"; 39 testImIntent()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(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 testImIntentWithAudio()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(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 testImIntentWithVideo()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(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 testImIntentCustom()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(values); 106 107 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 108 final Intent imIntent = 109 ContactDetailFragment.getCustomIMIntent(im, Im.PROTOCOL_CUSTOM); 110 assertEquals(Intent.ACTION_SENDTO, imIntent.getAction()); 111 112 final Uri data = imIntent.getData(); 113 assertEquals("imto", data.getScheme()); 114 assertEquals(TEST_PROTOCOL, data.getAuthority()); 115 assertEquals(TEST_ADDRESS, data.getPathSegments().get(0)); 116 117 assertNull(entry.secondaryIntent); 118 } 119 testImEmailIntent()120 public void testImEmailIntent() throws Exception { 121 // Email addresses are treated as Google Talk entries 122 // This test only tests the VIDEO+CAMERA case. The other cases have been addressed by the 123 // Im tests 124 final ContentValues values = new ContentValues(); 125 values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE); 126 values.put(Email.TYPE, Email.TYPE_HOME); 127 values.put(Email.DATA, TEST_ADDRESS); 128 values.put(Email.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO | 129 Im.CAPABILITY_HAS_VOICE); 130 ImDataItem im = ImDataItem.createFromEmail( 131 (EmailDataItem) DataItem.createFrom(values)); 132 133 DetailViewEntry entry = new ContactDetailFragment.DetailViewEntry(); 134 ContactDetailFragment.buildImActions(mContext, entry, im); 135 assertEquals(Intent.ACTION_SENDTO, entry.intent.getAction()); 136 assertEquals("xmpp:" + TEST_ADDRESS + "?message", entry.intent.getData().toString()); 137 138 assertEquals(Intent.ACTION_SENDTO, entry.secondaryIntent.getAction()); 139 assertEquals("xmpp:" + TEST_ADDRESS + "?call", entry.secondaryIntent.getData().toString()); 140 } 141 } 142