Unique strings for labels and actions, SMS as alternate.
To prepare for strings in various languages, make unique
strings for each combination of "action" and EditType, for
example, "Call home" and "Email work" as unique strings.
Also added iconAltRes and actionAltRes to handle alternate
actions on data rows, such as SMS for phone numbers. These
changes allow Fast-Track to show correct labels.
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7c53cc3..be78912 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -716,4 +716,71 @@
<string name="dialog_primary_name">Primary name</string>
+
+
+
+<string name="call_home">Call home</string>
+<string name="call_mobile">Call mobile</string>
+<string name="call_work">Call work</string>
+<string name="call_fax_work">Call work fax</string>
+<string name="call_fax_home">Call home fax</string>
+<string name="call_pager">Call pager</string>
+<string name="call_other">Call other</string>
+<string name="call_custom">Call <xliff:g id="custom">%s</xliff:g></string>
+
+<!-- exchange specific -->
+<string name="call_home_2">Call home 2</string>
+<string name="call_work_2">Call work 2</string>
+<string name="call_car">Call car</string>
+<string name="call_company_main">Call company main</string>
+<string name="call_mms">Call MMS</string>
+<string name="call_radio">Call radio</string>
+
+
+
+
+
+<string name="sms_home">Text home</string>
+<string name="sms_mobile">Text mobile</string>
+<string name="sms_work">Text work</string>
+<string name="sms_fax_work">Text work fax</string>
+<string name="sms_fax_home">Text home fax</string>
+<string name="sms_pager">Text pager</string>
+<string name="sms_other">Text other</string>
+<string name="sms_custom">Text <xliff:g id="custom">%s</xliff:g></string>
+
+<!-- exchange specific -->
+<string name="sms_home_2">Text home 2</string>
+<string name="sms_work_2">Text work 2</string>
+<string name="sms_car">Text car</string>
+<string name="sms_company_main">Text company main</string>
+<string name="sms_mms">Text MMS</string>
+<string name="sms_radio">Text radio</string>
+
+
+
+<string name="email_home">Email home</string>
+<string name="email_mobile">Email mobile</string>
+<string name="email_work">Email work</string>
+<string name="email_other">Email other</string>
+<string name="email_custom">Email <xliff:g id="custom">%s</xliff:g></string>
+
+<string name="email_1">Email 1</string>
+<string name="email_2">Email 2</string>
+<string name="email_3">Email 2</string>
+
+
+
+
+<string name="map_home">Map home</string>
+<string name="map_work">Map work</string>
+<string name="map_other">Map other</string>
+<string name="map_custom">Map <xliff:g id="custom">%s</xliff:g></string>
+
+
+
+
+
+
+
</resources>
diff --git a/src/com/android/contacts/model/ContactsSource.java b/src/com/android/contacts/model/ContactsSource.java
index 078b46c..e0e0c7c 100644
--- a/src/com/android/contacts/model/ContactsSource.java
+++ b/src/com/android/contacts/model/ContactsSource.java
@@ -138,11 +138,13 @@
public String mimeType;
public int titleRes;
public int iconRes;
+ public int iconAltRes;
public int weight;
public boolean secondary;
public boolean editable;
public StringInflater actionHeader;
+ public StringInflater actionAltHeader;
public StringInflater actionBody;
public boolean actionBodySocial;
public boolean actionBodyCombine;
@@ -175,6 +177,7 @@
public int rawValue;
public int labelRes;
public int actionRes;
+ public int actionAltRes;
public boolean secondary;
public int specificMax;
public String customColumn;
@@ -182,23 +185,32 @@
public EditType(int rawValue, int labelRes) {
this.rawValue = rawValue;
this.labelRes = labelRes;
- this.actionRes = actionRes;
this.specificMax = -1;
}
- public EditType(int rawValue, int labelRes, boolean secondary) {
+ public EditType(int rawValue, int labelRes, int actionRes) {
this(rawValue, labelRes);
+ this.actionRes = actionRes;
+ }
+
+ public EditType(int rawValue, int labelRes, int actionRes, int actionAltRes) {
+ this(rawValue, labelRes, actionRes);
+ this.actionAltRes = actionAltRes;
+ }
+
+ public EditType setSecondary(boolean secondary) {
this.secondary = secondary;
+ return this;
}
- public EditType(int rawValue, int labelRes, boolean secondary, int specificMax) {
- this(rawValue, labelRes, secondary);
+ public EditType setSpecificMax(int specificMax) {
this.specificMax = specificMax;
+ return this;
}
- public EditType(int rawValue, int labelRes, boolean secondary, int specificMax, String customColumn) {
- this(rawValue, labelRes, secondary, specificMax);
+ public EditType setCustomColumn(String customColumn) {
this.customColumn = customColumn;
+ return this;
}
@Override
diff --git a/src/com/android/contacts/model/Sources.java b/src/com/android/contacts/model/Sources.java
index ee13b82..f9618b2 100644
--- a/src/com/android/contacts/model/Sources.java
+++ b/src/com/android/contacts/model/Sources.java
@@ -123,20 +123,30 @@
// GOOGLE: PHONE
DataKind kind = new DataKind(Phone.CONTENT_ITEM_TYPE,
R.string.phoneLabelsGroup, android.R.drawable.sym_action_call, 10, true);
+ kind.iconAltRes = R.drawable.sym_action_sms;
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
+ kind.actionAltHeader = new ActionAltInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Phone.NUMBER);
kind.typeColumn = Phone.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(Phone.TYPE_HOME, R.string.type_home));
- kind.typeList.add(new EditType(Phone.TYPE_MOBILE, R.string.type_mobile));
- kind.typeList.add(new EditType(Phone.TYPE_WORK, R.string.type_work));
- kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, R.string.type_fax_work, true));
- kind.typeList.add(new EditType(Phone.TYPE_FAX_HOME, R.string.type_fax_home, true));
- kind.typeList.add(new EditType(Phone.TYPE_PAGER, R.string.type_pager, true));
- kind.typeList.add(new EditType(Phone.TYPE_OTHER, R.string.type_other));
- kind.typeList.add(new EditType(Phone.TYPE_CUSTOM, R.string.type_custom, true, -1,
+ kind.typeList.add(new EditType(Phone.TYPE_HOME, R.string.type_home, R.string.call_home,
+ R.string.sms_home));
+ kind.typeList.add(new EditType(Phone.TYPE_MOBILE, R.string.type_mobile,
+ R.string.call_mobile, R.string.sms_mobile));
+ kind.typeList.add(new EditType(Phone.TYPE_WORK, R.string.type_work, R.string.call_work,
+ R.string.sms_work));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, R.string.type_fax_work,
+ R.string.call_fax_work, R.string.sms_fax_work).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_HOME, R.string.type_fax_home,
+ R.string.call_fax_home, R.string.sms_fax_home).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_PAGER, R.string.type_pager,
+ R.string.call_pager, R.string.sms_pager).setSecondary(true));
+ kind.typeList.add(new EditType(Phone.TYPE_OTHER, R.string.type_other,
+ R.string.call_other, R.string.sms_other));
+ kind.typeList.add(new EditType(Phone.TYPE_CUSTOM, R.string.type_custom,
+ R.string.call_custom, R.string.sms_custom).setSecondary(true).setCustomColumn(
Phone.LABEL));
kind.fieldList = new ArrayList<EditField>();
@@ -150,16 +160,19 @@
DataKind kind = new DataKind(Email.CONTENT_ITEM_TYPE,
R.string.emailLabelsGroup, android.R.drawable.sym_action_email, 15, true);
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Email.DATA);
kind.typeColumn = Email.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(Email.TYPE_HOME, R.string.type_home));
- kind.typeList.add(new EditType(Email.TYPE_WORK, R.string.type_work));
- kind.typeList.add(new EditType(Email.TYPE_OTHER, R.string.type_other));
- kind.typeList.add(new EditType(Email.TYPE_CUSTOM, R.string.type_custom, true, -1,
- Email.LABEL));
+ kind.typeList
+ .add(new EditType(Email.TYPE_HOME, R.string.type_home, R.string.email_home));
+ kind.typeList
+ .add(new EditType(Email.TYPE_WORK, R.string.type_work, R.string.email_work));
+ kind.typeList.add(new EditType(Email.TYPE_OTHER, R.string.type_other,
+ R.string.email_other));
+ kind.typeList.add(new EditType(Email.TYPE_CUSTOM, R.string.type_custom,
+ R.string.email_home).setSecondary(true).setCustomColumn(Email.LABEL));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
@@ -172,7 +185,7 @@
DataKind kind = new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
android.R.drawable.sym_action_chat, 20, true);
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Im.DATA);
// NOTE: even though a traditional "type" exists, for editing
@@ -191,8 +204,8 @@
kind.typeList.add(new EditType(Im.PROTOCOL_GOOGLE_TALK, R.string.type_im_google_talk));
kind.typeList.add(new EditType(Im.PROTOCOL_ICQ, R.string.type_im_icq));
kind.typeList.add(new EditType(Im.PROTOCOL_JABBER, R.string.type_im_jabber));
- kind.typeList.add(new EditType(Im.PROTOCOL_CUSTOM, R.string.type_custom, true, -1,
- Im.CUSTOM_PROTOCOL));
+ kind.typeList.add(new EditType(Im.PROTOCOL_CUSTOM, R.string.type_custom).setSecondary(
+ true).setCustomColumn(Im.CUSTOM_PROTOCOL));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
@@ -205,17 +218,22 @@
DataKind kind = new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
R.string.postalLabelsGroup, R.drawable.sym_action_map, 25, true);
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
// TODO: build body from various structured fields
kind.actionBody = new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS);
kind.typeColumn = StructuredPostal.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(StructuredPostal.TYPE_HOME, R.string.type_home));
- kind.typeList.add(new EditType(StructuredPostal.TYPE_WORK, R.string.type_work));
- kind.typeList.add(new EditType(StructuredPostal.TYPE_OTHER, R.string.type_other));
- kind.typeList.add(new EditType(StructuredPostal.TYPE_CUSTOM, R.string.type_custom,
- true, -1, StructuredPostal.LABEL));
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_HOME, R.string.type_home,
+ R.string.map_home));
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_WORK, R.string.type_work,
+ R.string.map_work));
+ kind.typeList.add(new EditType(StructuredPostal.TYPE_OTHER, R.string.type_other,
+ R.string.map_other));
+ kind.typeList
+ .add(new EditType(StructuredPostal.TYPE_CUSTOM, R.string.type_custom,
+ R.string.map_custom).setSecondary(true).setCustomColumn(
+ StructuredPostal.LABEL));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(StructuredPostal.AGENT, -1, FLAGS_POSTAL, true));
@@ -245,8 +263,8 @@
kind.typeList = new ArrayList<EditType>();
kind.typeList.add(new EditType(Organization.TYPE_WORK, R.string.type_work));
kind.typeList.add(new EditType(Organization.TYPE_OTHER, R.string.type_other));
- kind.typeList.add(new EditType(Organization.TYPE_CUSTOM, R.string.type_custom, true,
- -1, Organization.LABEL));
+ kind.typeList.add(new EditType(Organization.TYPE_CUSTOM, R.string.type_custom)
+ .setSecondary(true).setCustomColumn(Organization.LABEL));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
@@ -340,26 +358,44 @@
// EXCHANGE: PHONE
DataKind kind = new DataKind(Phone.CONTENT_ITEM_TYPE,
R.string.phoneLabelsGroup, android.R.drawable.sym_action_call, 10, true);
+ kind.iconAltRes = R.drawable.sym_action_sms;
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
+ kind.actionAltHeader = new ActionAltInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Phone.NUMBER);
kind.typeColumn = Phone.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(Phone.TYPE_HOME, R.string.type_home, false, 1));
- kind.typeList.add(new EditType(TYPE_HOME2, R.string.type_home_2, true, 1));
- kind.typeList.add(new EditType(Phone.TYPE_MOBILE, R.string.type_mobile, false, 1));
- kind.typeList.add(new EditType(Phone.TYPE_WORK, R.string.type_work, false, 1));
- kind.typeList.add(new EditType(TYPE_WORK2, R.string.type_work_2, true, 1));
- kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, R.string.type_fax_work, true, 1));
- kind.typeList.add(new EditType(Phone.TYPE_FAX_HOME, R.string.type_fax_home, true, 1));
- kind.typeList.add(new EditType(Phone.TYPE_PAGER, R.string.type_pager, true, 1));
- kind.typeList.add(new EditType(TYPE_CAR, R.string.type_car, true, 1));
- kind.typeList.add(new EditType(TYPE_COMPANY_MAIN, R.string.type_company_main, true, 1));
- kind.typeList.add(new EditType(TYPE_MMS, R.string.type_mms, true, 1));
- kind.typeList.add(new EditType(TYPE_RADIO, R.string.type_radio, true, 1));
- kind.typeList.add(new EditType(Phone.TYPE_CUSTOM, R.string.type_assistant, true, 1,
- Phone.LABEL));
+ kind.typeList.add(new EditType(Phone.TYPE_HOME, R.string.type_home, R.string.call_home,
+ R.string.sms_home).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_HOME2, R.string.type_home_2, R.string.call_home_2,
+ R.string.sms_home_2).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_MOBILE, R.string.type_mobile,
+ R.string.call_mobile, R.string.sms_mobile).setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_WORK, R.string.type_work, R.string.call_work,
+ R.string.sms_work).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_WORK2, R.string.type_work_2, R.string.call_work_2,
+ R.string.sms_work_2).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, R.string.type_fax_work,
+ R.string.call_fax_work, R.string.sms_fax_work).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_HOME, R.string.type_fax_home,
+ R.string.call_fax_home, R.string.sms_fax_home).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_PAGER, R.string.type_pager,
+ R.string.call_pager, R.string.sms_pager).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_CAR, R.string.type_car, R.string.call_car,
+ R.string.sms_car).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_COMPANY_MAIN, R.string.type_company_main,
+ R.string.call_company_main, R.string.sms_company_main).setSecondary(true)
+ .setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_MMS, R.string.type_mms, R.string.call_mms,
+ R.string.sms_mms).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_RADIO, R.string.type_radio, R.string.call_radio,
+ R.string.sms_radio).setSecondary(true).setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_CUSTOM, R.string.type_assistant,
+ R.string.call_custom, R.string.sms_custom).setSecondary(true).setSpecificMax(1)
+ .setCustomColumn(Phone.LABEL));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
@@ -372,14 +408,17 @@
DataKind kind = new DataKind(Email.CONTENT_ITEM_TYPE,
R.string.emailLabelsGroup, android.R.drawable.sym_action_email, 15, true);
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Email.DATA);
kind.typeColumn = Email.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(TYPE_EMAIL1, R.string.type_email_1, false, 1));
- kind.typeList.add(new EditType(TYPE_EMAIL2, R.string.type_email_2, false, 1));
- kind.typeList.add(new EditType(TYPE_EMAIL3, R.string.type_email_3, false, 1));
+ kind.typeList.add(new EditType(TYPE_EMAIL1, R.string.type_email_1, R.string.email_1)
+ .setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_EMAIL2, R.string.type_email_2, R.string.email_2)
+ .setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_EMAIL3, R.string.type_email_3, R.string.email_3)
+ .setSpecificMax(1));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
@@ -392,14 +431,14 @@
DataKind kind = new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
android.R.drawable.sym_action_chat, 20, true);
- kind.actionHeader = new ActionLabelInflater(list.resPackageName, kind);
+ kind.actionHeader = new ActionInflater(list.resPackageName, kind);
kind.actionBody = new SimpleInflater(Im.DATA);
kind.typeColumn = Im.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(TYPE_IM1, R.string.type_im_1, false, 1));
- kind.typeList.add(new EditType(TYPE_IM2, R.string.type_im_2, false, 1));
- kind.typeList.add(new EditType(TYPE_IM3, R.string.type_im_3, false, 1));
+ kind.typeList.add(new EditType(TYPE_IM1, R.string.type_im_1).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_IM2, R.string.type_im_2).setSpecificMax(1));
+ kind.typeList.add(new EditType(TYPE_IM3, R.string.type_im_3).setSpecificMax(1));
kind.fieldList = new ArrayList<EditField>();
kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
@@ -492,11 +531,11 @@
* provide an action string like "Call home", where "home" is provided from
* {@link EditType#labelRes}.
*/
- public static class ActionLabelInflater implements StringInflater {
+ public static class ActionInflater implements StringInflater {
private String mPackageName;
private DataKind mKind;
- public ActionLabelInflater(String packageName, DataKind labelProvider) {
+ public ActionInflater(String packageName, DataKind labelProvider) {
mPackageName = packageName;
mKind = labelProvider;
}
@@ -508,4 +547,21 @@
null) : null;
}
}
+
+ public static class ActionAltInflater implements StringInflater {
+ private String mPackageName;
+ private DataKind mKind;
+
+ public ActionAltInflater(String packageName, DataKind labelProvider) {
+ mPackageName = packageName;
+ mKind = labelProvider;
+ }
+
+ public CharSequence inflateUsing(Context context, Cursor cursor) {
+ final EditType type = EntityModifier.getCurrentType(cursor, mKind);
+ final boolean validString = (type != null && type.actionAltRes > 0);
+ return validString ? context.getPackageManager().getText(mPackageName,
+ type.actionAltRes, null) : null;
+ }
+ }
}
diff --git a/src/com/android/contacts/ui/FastTrackWindow.java b/src/com/android/contacts/ui/FastTrackWindow.java
index 9862147..4a2acbc 100644
--- a/src/com/android/contacts/ui/FastTrackWindow.java
+++ b/src/com/android/contacts/ui/FastTrackWindow.java
@@ -28,12 +28,9 @@
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
import android.database.Cursor;
-import android.database.CursorWrapper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
-import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -48,13 +45,8 @@
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.Im.PresenceColumns;
import android.provider.SocialContract.Activities;
-import android.text.SpannableStringBuilder;
import android.text.format.DateUtils;
-import android.text.style.CharacterStyle;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
@@ -78,7 +70,6 @@
import android.widget.BaseAdapter;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
@@ -86,7 +77,6 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
-import java.util.List;
import java.util.Set;
/**
@@ -465,7 +455,7 @@
final String name = getAsString(cursor, Contacts.DISPLAY_NAME);
final int status = getAsInteger(cursor, Contacts.PRESENCE_STATUS);
- final int statusIcon = Presence.getPresenceIconResourceId(status);
+ final Drawable statusIcon = getPresenceIcon(status);
setHeaderText(R.id.name, name);
setHeaderImage(R.id.presence, statusIcon);
@@ -487,6 +477,30 @@
}
/**
+ * Find the presence icon for showing in summary header.
+ */
+ private Drawable getPresenceIcon(int status) {
+ int resId = -1;
+ switch (status) {
+ case Presence.AVAILABLE:
+ resId = android.R.drawable.presence_online;
+ break;
+ case Presence.IDLE:
+ case Presence.AWAY:
+ resId = android.R.drawable.presence_away;
+ break;
+ case Presence.DO_NOT_DISTURB:
+ resId = android.R.drawable.presence_busy;
+ break;
+ }
+ if (resId > 0) {
+ return mContext.getResources().getDrawable(resId);
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Find the Fast-Track-specific presence icon for showing in chiclets.
*/
private Drawable getTrackPresenceIcon(int status) {
@@ -558,29 +572,39 @@
private CharSequence mBody;
private Intent mIntent;
+ private boolean mAlternate;
+
/**
* Create an action from common {@link Data} elements.
*/
- public DataAction(Context context, ContactsSource source, DataKind kind, Cursor cursor) {
+ public DataAction(Context context, ContactsSource source, String mimeType, DataKind kind, Cursor cursor) {
mContext = context;
mSource = source;
mKind = kind;
// Inflate strings from cursor
- if (mKind.actionHeader != null) {
+ mAlternate = MIME_SMS_ADDRESS.equals(mimeType);
+ if (mAlternate && mKind.actionAltHeader != null) {
+ mHeader = mKind.actionAltHeader.inflateUsing(context, cursor);
+ } else if (mKind.actionHeader != null) {
mHeader = mKind.actionHeader.inflateUsing(context, cursor);
}
+
if (mKind.actionBody != null) {
mBody = mKind.actionBody.inflateUsing(context, cursor);
}
// Handle well-known MIME-types with special care
- final String mimeType = mKind.mimeType;
if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
final String number = getAsString(cursor, Phone.NUMBER);
final Uri callUri = Uri.fromParts(SCHEME_TEL, number, null);
mIntent = new Intent(Intent.ACTION_DIAL, callUri);
+ } else if (MIME_SMS_ADDRESS.equals(mimeType)) {
+ final String number = getAsString(cursor, Phone.NUMBER);
+ final Uri smsUri = Uri.fromParts(SCHEME_SMSTO, number, null);
+ mIntent = new Intent(Intent.ACTION_SENDTO, smsUri);
+
} else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
final String address = getAsString(cursor, Email.DATA);
final Uri mailUri = Uri.fromParts(SCHEME_MAILTO, address, null);
@@ -606,45 +630,17 @@
/** {@inheritDoc} */
public Drawable getIcon() {
- Drawable icon = null;
- if (mSource.resPackageName == null || mKind.iconRes != -1) {
- icon = mContext.getPackageManager().getDrawable(mSource.resPackageName,
- mKind.iconRes, null);
+ // Bail early if no valid resources
+ if (mSource.resPackageName == null) return null;
+
+ final PackageManager pm = mContext.getPackageManager();
+ if (mAlternate && mKind.iconAltRes > 0) {
+ return pm.getDrawable(mSource.resPackageName, mKind.iconAltRes, null);
+ } else if (mKind.iconRes > 0) {
+ return pm.getDrawable(mSource.resPackageName, mKind.iconRes, null);
+ } else {
+ return null;
}
- return icon;
- }
-
- /** {@inheritDoc} */
- public Intent getIntent() {
- return mIntent;
- }
- }
-
- private static class SmsAction implements Action {
- private final Context mContext;
- private final Intent mIntent;
-
- public SmsAction(Context context, Cursor cursor) {
- mContext = context;
-
- final String number = getAsString(cursor, Phone.NUMBER);
- final Uri smsUri = Uri.fromParts(SCHEME_SMSTO, number, null);
- mIntent = new Intent(Intent.ACTION_SENDTO, smsUri);
- }
-
- /** {@inheritDoc} */
- public CharSequence getHeader() {
- return null;
- }
-
- /** {@inheritDoc} */
- public CharSequence getBody() {
- return null;
- }
-
- /** {@inheritDoc} */
- public Drawable getIcon() {
- return mContext.getResources().getDrawable(R.drawable.sym_action_sms);
}
/** {@inheritDoc} */
@@ -735,7 +731,8 @@
if (photoView != null && Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
final int colPhoto = cursor.getColumnIndex(Photo.PHOTO);
final byte[] photoBlob = cursor.getBlob(colPhoto);
- final Bitmap photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0, photoBlob.length);
+ final Bitmap photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0,
+ photoBlob.length);
photoView.setImageBitmap(photoBitmap);
continue;
}
@@ -749,13 +746,14 @@
// Build an action for this data entry, find a mapping to a UI
// element, build its summary from the cursor, and collect it
// along with all others of this MIME-type.
- final Action action = new DataAction(mContext, source, kind, cursor);
+ final Action action = new DataAction(mContext, source, mimeType, kind, cursor);
considerAdd(action, mimeType);
}
// If phone number, also insert as text message action
if (Phones.CONTENT_ITEM_TYPE.equals(mimeType)) {
- final Action action = new SmsAction(mContext, cursor);
+ final Action action = new DataAction(mContext, source, MIME_SMS_ADDRESS, kind,
+ cursor);
considerAdd(action, MIME_SMS_ADDRESS);
}
}
diff --git a/tests/src/com/android/contacts/EntityModifierTests.java b/tests/src/com/android/contacts/EntityModifierTests.java
index 7b8580c..78597be 100644
--- a/tests/src/com/android/contacts/EntityModifierTests.java
+++ b/tests/src/com/android/contacts/EntityModifierTests.java
@@ -63,9 +63,9 @@
kind.typeOverallMax = 5;
kind.typeColumn = Phone.TYPE;
kind.typeList = new ArrayList<EditType>();
- kind.typeList.add(new EditType(Phone.TYPE_HOME, -1, false, 2));
- kind.typeList.add(new EditType(Phone.TYPE_WORK, -1, false, 1));
- kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1, true, -1));
+ kind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
+ kind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
+ kind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
kind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
list.add(kind);