Merge "Have a chat icon inside IM tab"
diff --git a/res/drawable-hdpi/sym_action_audiochat_holo_dark.png b/res/drawable-hdpi/sym_action_audiochat_holo_dark.png
new file mode 100644
index 0000000..d4e3329
--- /dev/null
+++ b/res/drawable-hdpi/sym_action_audiochat_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_videochat_holo_dark.png b/res/drawable-hdpi/sym_action_videochat_holo_dark.png
new file mode 100644
index 0000000..821940a
--- /dev/null
+++ b/res/drawable-hdpi/sym_action_videochat_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_audiochat_holo_dark.png b/res/drawable-mdpi/sym_action_audiochat_holo_dark.png
new file mode 100644
index 0000000..848404d
--- /dev/null
+++ b/res/drawable-mdpi/sym_action_audiochat_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_videochat_holo_dark.png b/res/drawable-mdpi/sym_action_videochat_holo_dark.png
new file mode 100644
index 0000000..9112e87
--- /dev/null
+++ b/res/drawable-mdpi/sym_action_videochat_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_audiochat_holo_dark.png b/res/drawable-xhdpi/sym_action_audiochat_holo_dark.png
new file mode 100644
index 0000000..216d34f
--- /dev/null
+++ b/res/drawable-xhdpi/sym_action_audiochat_holo_dark.png
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_videochat_holo_dark.png b/res/drawable-xhdpi/sym_action_videochat_holo_dark.png
new file mode 100644
index 0000000..5011489
--- /dev/null
+++ b/res/drawable-xhdpi/sym_action_videochat_holo_dark.png
Binary files differ
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 6f719af..827016f 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -2,8 +2,9 @@
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.model.DataKind;
import com.android.contacts.model.AccountType.EditType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.DataKind;
import com.android.contacts.util.Constants;
import com.android.contacts.util.PhoneCapabilityTester;
@@ -15,12 +16,12 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.net.WebAddress;
-import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
import android.text.TextUtils;
import android.util.Log;
@@ -142,13 +143,12 @@
mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
}
- } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)
- || Constants.MIME_TYPE_VIDEO_CHAT.equals(mimeType)) {
+ } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(
getAsString(cursor, Data.MIMETYPE));
if (isEmail || isProtocolValid(cursor)) {
final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK :
- getAsInt(cursor, Im.PROTOCOL);
+ getAsInt(cursor, Im.PROTOCOL);
if (isEmail) {
// Use Google Talk string when using Email, and clear data
@@ -165,17 +165,29 @@
host = ContactsUtils.lookupProviderNameFromId(protocol);
}
- if (Constants.MIME_TYPE_VIDEO_CHAT.equals(mimeType)) {
- if (!TextUtils.isEmpty(data)) {
- mIntent = new Intent(Intent.ACTION_SENDTO);
- mIntent.setDataAndType(Uri.parse("xmpp:" + data + "?call"),
- Constants.MIME_TYPE_VIDEO_CHAT);
- }
- } else if (!TextUtils.isEmpty(host) && !TextUtils.isEmpty(data)) {
+ if (!TextUtils.isEmpty(host) && !TextUtils.isEmpty(data)) {
final String authority = host.toLowerCase();
final Uri imUri = new Uri.Builder().scheme(Constants.SCHEME_IMTO).authority(
authority).appendPath(data).build();
mIntent = new Intent(Intent.ACTION_SENDTO, imUri);
+
+ // If the address is also available for a video chat, we'll show the capability
+ // as a secondary action.
+ final int chatCapability = getAsInt(cursor, Data.CHAT_CAPABILITY);
+ final boolean isVideoChatCapable =
+ (chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0;
+ final boolean isAudioChatCapable =
+ (chatCapability & Im.CAPABILITY_HAS_VOICE) != 0;
+ if (isVideoChatCapable || isAudioChatCapable) {
+ final AccountTypeManager accountTypes = AccountTypeManager.getInstance(
+ context.getApplicationContext());
+ mAlternateIntent = new Intent(
+ Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
+ // Use Holo dark theme since the background is darker than usual.
+ mAlternateIconRes = (isVideoChatCapable
+ ? R.drawable.sym_action_videochat_holo_dark
+ : R.drawable.sym_action_audiochat_holo_dark);
+ }
}
}
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 1ef40db..d8f9c2c 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -467,8 +467,6 @@
}
}
- boolean isIm = Im.CONTENT_ITEM_TYPE.equals(mimeType);
-
// Handle Email rows with presence data as Im entry
final boolean hasPresence = !cursor.isNull(DataQuery.PRESENCE);
if (hasPresence && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
@@ -478,20 +476,6 @@
final DataAction action = new DataAction(context, Im.CONTENT_ITEM_TYPE, imKind,
dataId, cursor);
considerAdd(action, cache);
- isIm = true;
- }
- }
-
- if (hasPresence && isIm) {
- int chatCapability = cursor.getInt(DataQuery.CHAT_CAPABILITY);
- if ((chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0) {
- final DataKind imKind = accountTypes.getKindOrFallback(accountType, dataSet,
- Im.CONTENT_ITEM_TYPE);
- if (imKind != null) {
- final DataAction chatAction = new DataAction(context,
- Constants.MIME_TYPE_VIDEO_CHAT, imKind, dataId, cursor);
- considerAdd(chatAction, cache);
- }
}
}
}