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