Integrating video chat into QuickContact
Bug: 3295622
Change-Id: I1288e735bf821b3e1acd20ca4fcfa4de08b62a1a
diff --git a/src/com/android/contacts/TypePrecedence.java b/src/com/android/contacts/TypePrecedence.java
index 62520a0..2adf3b5 100644
--- a/src/com/android/contacts/TypePrecedence.java
+++ b/src/com/android/contacts/TypePrecedence.java
@@ -99,7 +99,7 @@
private static int[] getTypePrecedenceList(String mimetype) {
if (mimetype.equals(Phone.CONTENT_ITEM_TYPE)) {
return TYPE_PRECEDENCE_PHONES;
- } else if (mimetype.equals(Constants.MIME_SMS_ADDRESS)) {
+ } else if (mimetype.equals(Constants.MIME_TYPE_SMS_ADDRESS)) {
return TYPE_PRECEDENCE_PHONES;
} else if (mimetype.equals(Email.CONTENT_ITEM_TYPE)) {
return TYPE_PRECEDENCE_EMAIL;
@@ -107,6 +107,8 @@
return TYPE_PRECEDENCE_POSTAL;
} else if (mimetype.equals(Im.CONTENT_ITEM_TYPE)) {
return TYPE_PRECEDENCE_IM;
+ } else if (mimetype.equals(Constants.MIME_TYPE_VIDEO_CHAT)) {
+ return TYPE_PRECEDENCE_IM;
} else if (mimetype.equals(Organization.CONTENT_ITEM_TYPE)) {
return TYPE_PRECEDENCE_ORG;
} else {
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 0788e7b..a00f49f 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -53,7 +53,7 @@
mMimeType = mimeType;
// Inflate strings from cursor
- mAlternate = Constants.MIME_SMS_ADDRESS.equals(mimeType);
+ mAlternate = Constants.MIME_TYPE_SMS_ADDRESS.equals(mimeType);
if (mAlternate && mKind.actionAltHeader != null) {
mHeader = mKind.actionAltHeader.inflateUsing(context, cursor);
} else if (mKind.actionHeader != null) {
@@ -94,7 +94,7 @@
// for the SIP-related intent-filters in its manifest.
}
}
- } else if (Constants.MIME_SMS_ADDRESS.equals(mimeType)) {
+ } else if (Constants.MIME_TYPE_SMS_ADDRESS.equals(mimeType)) {
if (PhoneCapabilityTester.isSmsIntentRegistered(mContext)) {
final String number = getAsString(cursor, Phone.NUMBER);
if (!TextUtils.isEmpty(number)) {
@@ -116,7 +116,8 @@
mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
}
- } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)
+ || Constants.MIME_TYPE_VIDEO_CHAT.equals(mimeType)) {
final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(
getAsString(cursor, Data.MIMETYPE));
if (isEmail || isProtocolValid(cursor)) {
@@ -138,7 +139,12 @@
host = ContactsUtils.lookupProviderNameFromId(protocol);
}
- if (!TextUtils.isEmpty(host) && !TextUtils.isEmpty(data)) {
+ if (Constants.MIME_TYPE_VIDEO_CHAT.equals(mimeType)) {
+ if (!TextUtils.isEmpty(data)) {
+ mIntent = new Intent(
+ Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
+ }
+ } else 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();
diff --git a/src/com/android/contacts/quickcontact/QuickContactWindow.java b/src/com/android/contacts/quickcontact/QuickContactWindow.java
index 5cfe8f1..a91058c 100644
--- a/src/com/android/contacts/quickcontact/QuickContactWindow.java
+++ b/src/com/android/contacts/quickcontact/QuickContactWindow.java
@@ -192,7 +192,7 @@
Phone.CONTENT_ITEM_TYPE,
SipAddress.CONTENT_ITEM_TYPE,
Contacts.CONTENT_ITEM_TYPE,
- Constants.MIME_SMS_ADDRESS,
+ Constants.MIME_TYPE_SMS_ADDRESS,
Email.CONTENT_ITEM_TYPE,
};
@@ -209,7 +209,9 @@
* as defaults
*/
private static final ArrayList<String> VIRTUAL_MIMETYPES = Lists.newArrayList(new String[] {
- Im.CONTENT_ITEM_TYPE, Constants.MIME_SMS_ADDRESS
+ Im.CONTENT_ITEM_TYPE,
+ Constants.MIME_TYPE_SMS_ADDRESS,
+ Constants.MIME_TYPE_VIDEO_CHAT,
});
private static final int TOKEN_DATA = 1;
@@ -697,11 +699,13 @@
// If phone number, also insert as text message action
if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) && kind != null) {
- final DataAction action = new DataAction(mContext, Constants.MIME_SMS_ADDRESS,
+ final DataAction action = new DataAction(mContext, Constants.MIME_TYPE_SMS_ADDRESS,
kind, dataId, cursor);
considerAdd(action, cache);
}
+ 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)) {
@@ -711,6 +715,20 @@
final DataAction action = new DataAction(mContext, 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,
+ Im.CONTENT_ITEM_TYPE, mContext);
+ if (imKind != null) {
+ final DataAction chatAction = new DataAction(mContext,
+ Constants.MIME_TYPE_VIDEO_CHAT, imKind, dataId, cursor);
+ considerAdd(chatAction, cache);
+ }
}
}
}
@@ -1379,6 +1397,7 @@
Data.STATUS_LABEL,
Data.STATUS_TIMESTAMP,
Data.PRESENCE,
+ Data.CHAT_CAPABILITY,
Data.RES_PACKAGE,
Data.MIMETYPE,
@@ -1405,10 +1424,11 @@
final int STATUS_LABEL = 9;
final int STATUS_TIMESTAMP = 10;
final int PRESENCE = 11;
+ final int CHAT_CAPABILITY = 12;
- final int RES_PACKAGE = 12;
- final int MIMETYPE = 13;
- final int IS_PRIMARY = 14;
- final int IS_SUPER_PRIMARY = 15;
+ final int RES_PACKAGE = 13;
+ final int MIMETYPE = 14;
+ final int IS_PRIMARY = 15;
+ final int IS_SUPER_PRIMARY = 16;
}
}
diff --git a/src/com/android/contacts/util/Constants.java b/src/com/android/contacts/util/Constants.java
index 1d1e4e2..2457600 100644
--- a/src/com/android/contacts/util/Constants.java
+++ b/src/com/android/contacts/util/Constants.java
@@ -23,7 +23,9 @@
* Specific MIME-type for {@link Phone#CONTENT_ITEM_TYPE} entries that
* distinguishes actions that should initiate a text message.
*/
- public static final String MIME_SMS_ADDRESS = "vnd.android.cursor.item/sms-address";
+ public static final String MIME_TYPE_SMS_ADDRESS = "vnd.android.cursor.item/sms-address";
+
+ public static final String MIME_TYPE_VIDEO_CHAT = "vnd.android.cursor.item/video-chat-address";
public static final String SCHEME_TEL = "tel";
public static final String SCHEME_SMSTO = "smsto";