summaryrefslogtreecommitdiffstats
path: root/src/com/android/contacts/quickcontact/DataAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/contacts/quickcontact/DataAction.java')
-rw-r--r--src/com/android/contacts/quickcontact/DataAction.java127
1 files changed, 55 insertions, 72 deletions
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index ec6bf4ca8..c10c338ea 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -17,27 +17,28 @@
package com.android.contacts.quickcontact;
import android.content.ContentUris;
-import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.net.WebAddress;
-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.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.Data;
import android.text.TextUtils;
import android.util.Log;
import com.android.contacts.ContactsUtils;
import com.android.contacts.R;
-import com.android.contacts.model.AccountType.EditType;
-import com.android.contacts.model.DataKind;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.SipAddressDataItem;
+import com.android.contacts.model.dataitem.StructuredPostalDataItem;
+import com.android.contacts.model.dataitem.WebsiteDataItem;
import com.android.contacts.util.Constants;
import com.android.contacts.util.PhoneCapabilityTester;
import com.android.contacts.util.StructuredPostalUtils;
@@ -68,51 +69,45 @@ public class DataAction implements Action {
/**
* Create an action from common {@link Data} elements.
*/
- public DataAction(Context context, String mimeType, DataKind kind, long dataId,
- ContentValues entryValues) {
+ public DataAction(Context context, DataItem item) {
mContext = context;
- mKind = kind;
- mMimeType = mimeType;
+ mKind = item.getDataKind();
+ mMimeType = item.getMimeType();
// Determine type for subtitle
mSubtitle = "";
- if (kind.typeColumn != null) {
- if (entryValues.containsKey(kind.typeColumn)) {
- final int typeValue = entryValues.getAsInteger(kind.typeColumn);
-
- // get type string
- for (EditType type : kind.typeList) {
- if (type.rawValue == typeValue) {
- if (type.customColumn == null) {
- // Non-custom type. Get its description from the resource
- mSubtitle = context.getString(type.labelRes);
- } else {
- // Custom type. Read it from the database
- mSubtitle = entryValues.getAsString(type.customColumn);
- }
- break;
+ if (item.hasKindTypeColumn()) {
+ final int typeValue = item.getKindTypeColumn();
+
+ // get type string
+ for (EditType type : item.getDataKind().typeList) {
+ if (type.rawValue == typeValue) {
+ if (type.customColumn == null) {
+ // Non-custom type. Get its description from the resource
+ mSubtitle = context.getString(type.labelRes);
+ } else {
+ // Custom type. Read it from the database
+ mSubtitle = item.getContentValues().getAsString(type.customColumn);
}
+ break;
}
}
}
- final Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
- mIsPrimary = superPrimary != null && superPrimary != 0;
-
- if (mKind.actionBody != null) {
- mBody = mKind.actionBody.inflateUsing(context, entryValues);
- }
+ mIsPrimary = item.isSuperPrimary();
+ mBody = item.buildDataString();
- mDataId = dataId;
- mDataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId);
+ mDataId = item.getId();
+ mDataUri = ContentUris.withAppendedId(Data.CONTENT_URI, mDataId);
final boolean hasPhone = PhoneCapabilityTester.isPhone(mContext);
final boolean hasSms = PhoneCapabilityTester.isSmsIntentRegistered(mContext);
// Handle well-known MIME-types with special care
- if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ if (item instanceof PhoneDataItem) {
if (PhoneCapabilityTester.isPhone(mContext)) {
- final String number = entryValues.getAsString(Phone.NUMBER);
+ PhoneDataItem phone = (PhoneDataItem) item;
+ final String number = phone.getNumber();
if (!TextUtils.isEmpty(number)) {
final Intent phoneIntent = hasPhone ? ContactsUtils.getCallIntent(number)
@@ -124,8 +119,8 @@ public class DataAction implements Action {
if (hasPhone && hasSms) {
mIntent = phoneIntent;
mAlternateIntent = smsIntent;
- mAlternateIconRes = kind.iconAltRes;
- mAlternateIconDescriptionRes = kind.iconAltDescriptionRes;
+ mAlternateIconRes = phone.getDataKind().iconAltRes;
+ mAlternateIconDescriptionRes = phone.getDataKind().iconAltDescriptionRes;
} else if (hasPhone) {
mIntent = phoneIntent;
} else if (hasSms) {
@@ -133,9 +128,10 @@ public class DataAction implements Action {
}
}
}
- } else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ } else if (item instanceof SipAddressDataItem) {
if (PhoneCapabilityTester.isSipPhone(mContext)) {
- final String address = entryValues.getAsString(SipAddress.SIP_ADDRESS);
+ final SipAddressDataItem sip = (SipAddressDataItem) item;
+ final String address = sip.getSipAddress();
if (!TextUtils.isEmpty(address)) {
final Uri callUri = Uri.fromParts(Constants.SCHEME_SIP, address, null);
mIntent = ContactsUtils.getCallIntent(callUri);
@@ -147,26 +143,27 @@ public class DataAction implements Action {
// for the SIP-related intent-filters in its manifest.
}
}
- } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String address = entryValues.getAsString(Email.DATA);
+ } else if (item instanceof EmailDataItem) {
+ final EmailDataItem email = (EmailDataItem) item;
+ final String address = email.getData();
if (!TextUtils.isEmpty(address)) {
final Uri mailUri = Uri.fromParts(Constants.SCHEME_MAILTO, address, null);
mIntent = new Intent(Intent.ACTION_SENDTO, mailUri);
}
- } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String url = entryValues.getAsString(Website.URL);
+ } else if (item instanceof WebsiteDataItem) {
+ final WebsiteDataItem website = (WebsiteDataItem) item;
+ final String url = website.getUrl();
if (!TextUtils.isEmpty(url)) {
WebAddress webAddress = new WebAddress(url);
mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webAddress.toString()));
}
- } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final boolean isEmail = Email.CONTENT_ITEM_TYPE.equals(
- entryValues.getAsString(Data.MIMETYPE));
- if (isEmail || isProtocolValid(entryValues)) {
- final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK :
- entryValues.getAsInteger(Im.PROTOCOL);
+ } else if (item instanceof ImDataItem) {
+ ImDataItem im = (ImDataItem) item;
+ final boolean isEmail = im.isCreatedFromEmail();
+ if (isEmail || im.isProtocolValid()) {
+ final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK : im.getProtocol();
if (isEmail) {
// Use Google Talk string when using Email, and clear data
@@ -176,8 +173,8 @@ public class DataAction implements Action {
mDataUri = null;
}
- String host = entryValues.getAsString(Im.CUSTOM_PROTOCOL);
- String data = entryValues.getAsString(isEmail ? Email.DATA : Im.DATA);
+ String host = im.getCustomProtocol();
+ String data = im.getData();
if (protocol != Im.PROTOCOL_CUSTOM) {
// Try bringing in a well-known host for specific protocols
host = ContactsUtils.lookupProviderNameFromId(protocol);
@@ -191,8 +188,7 @@ public class DataAction implements Action {
// If the address is also available for a video chat, we'll show the capability
// as a secondary action.
- final Integer chatCapabilityObj = entryValues.getAsInteger(Im.CHAT_CAPABILITY);
- final int chatCapability = chatCapabilityObj == null ? 0 : chatCapabilityObj;
+ final int chatCapability = im.getChatCapability();
final boolean isVideoChatCapable =
(chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0;
final boolean isAudioChatCapable =
@@ -210,9 +206,9 @@ public class DataAction implements Action {
}
}
}
- } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final String postalAddress =
- entryValues.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+ } else if (item instanceof StructuredPostalDataItem) {
+ StructuredPostalDataItem postal = (StructuredPostalDataItem) item;
+ final String postalAddress = postal.getFormattedAddress();
if (!TextUtils.isEmpty(postalAddress)) {
mIntent = StructuredPostalUtils.getViewPostalAddressIntent(postalAddress);
}
@@ -221,7 +217,7 @@ public class DataAction implements Action {
if (mIntent == null) {
// Otherwise fall back to default VIEW action
mIntent = new Intent(Intent.ACTION_VIEW);
- mIntent.setDataAndType(mDataUri, mimeType);
+ mIntent.setDataAndType(mDataUri, item.getMimeType());
}
mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
@@ -236,19 +232,6 @@ public class DataAction implements Action {
mPresence = presence;
}
- private boolean isProtocolValid(ContentValues entryValues) {
- final String protocol = entryValues.getAsString(Im.PROTOCOL);
- if (protocol == null) {
- return false;
- }
- try {
- Integer.valueOf(protocol);
- } catch (NumberFormatException e) {
- return false;
- }
- return true;
- }
-
@Override
public CharSequence getSubtitle() {
return mSubtitle;