Merge "Show presence in QuickContacts and remove "CHAT USING" for consistency"
diff --git a/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
index 98ffce6..2016131 100644
--- a/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
+++ b/res/layout-sw680dp-w1000dp/contact_detail_list_item.xml
@@ -50,15 +50,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
-
- <TextView
- android:id="@+id/footer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="gone" />
-
</LinearLayout>
<ImageView
diff --git a/res/layout/contact_detail_list_item.xml b/res/layout/contact_detail_list_item.xml
index 44f5a53..666b67c 100644
--- a/res/layout/contact_detail_list_item.xml
+++ b/res/layout/contact_detail_list_item.xml
@@ -82,15 +82,6 @@
</LinearLayout>
- <TextView
- android:id="@+id/footer"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?android:attr/textColorSecondary"
- android:visibility="gone" />
-
</LinearLayout>
<View
diff --git a/res/layout/quickcontact_list_item.xml b/res/layout/quickcontact_list_item.xml
index ee3a89f..1b66ec3 100755
--- a/res/layout/quickcontact_list_item.xml
+++ b/res/layout/quickcontact_list_item.xml
@@ -27,13 +27,27 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:singleLine="true"
android:ellipsize="end" />
- <TextView
- android:id="@android:id/text2"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/secondary_text_color"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/presence_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="1dip"
+ android:layout_marginRight="4dip"
+ android:layout_gravity="center_vertical"
+ android:gravity="center"
+ android:scaleType="centerInside" />
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/secondary_text_color"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
</LinearLayout>
<include layout="@layout/quickcontact_list_item_base"/>
</LinearLayout>
diff --git a/res/layout/quickcontact_list_item_address.xml b/res/layout/quickcontact_list_item_address.xml
index 9773b10..cb99673 100755
--- a/res/layout/quickcontact_list_item_address.xml
+++ b/res/layout/quickcontact_list_item_address.xml
@@ -28,13 +28,27 @@
android:layout_height="wrap_content"
android:textColor="@color/primary_text_color"
android:textAppearance="?android:attr/textAppearanceMedium" />
- <TextView
- android:id="@android:id/text2"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textColor="@color/secondary_text_color"
- android:textAllCaps="true"
- android:textAppearance="?android:attr/textAppearanceSmall" />
+ android:orientation="horizontal">
+ <ImageView
+ android:id="@+id/presence_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="1dip"
+ android:layout_marginRight="4dip"
+ android:layout_gravity="center_vertical"
+ android:gravity="center"
+ android:scaleType="centerInside" />
+ <TextView
+ android:id="@android:id/text2"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/secondary_text_color"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+ </LinearLayout>
</LinearLayout>
<include layout="@layout/quickcontact_list_item_base"/>
</LinearLayout>
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index 8f77371..f24b7eb 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -84,7 +84,6 @@
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.Intents.UI;
import android.provider.ContactsContract.PhoneLookup;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.StatusUpdates;
@@ -149,7 +148,6 @@
private Button mQuickFixButton;
private QuickFix mQuickFix;
- private int mNumPhoneNumbers = 0;
private String mDefaultCountryIso;
private boolean mContactHasSocialUpdates;
private boolean mShowStaticPhoto = true;
@@ -543,7 +541,6 @@
mRawContactIds.clear();
mPrimaryPhoneUri = null;
- mNumPhoneNumbers = 0;
final AccountTypeManager accountTypes = AccountTypeManager.getInstance(mContext);
@@ -598,7 +595,6 @@
// Always ignore the name. It is shown in the header if set
} else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) && hasData) {
// Build phone entries
- mNumPhoneNumbers++;
String phoneNumberE164 =
entryValues.getAsString(PhoneLookup.NORMALIZED_NUMBER);
entry.data = PhoneNumberUtils.formatNumber(
@@ -644,7 +640,7 @@
imKind, dataId, entryValues, mContactData.isDirectoryEntry(),
mContactData.getDirectoryId());
buildImActions(mContext, imEntry, entryValues);
- imEntry.applyStatus(status, false);
+ imEntry.setPresence(status.getPresence());
imEntry.maxLines = imKind.maxLinesForDisplay;
mImEntries.add(imEntry);
}
@@ -656,10 +652,10 @@
// Build IM entries
buildImActions(mContext, entry, entryValues);
- // Apply presence and status details when available
+ // Apply presence when available
final DataStatus status = mContactData.getStatuses().get(entry.id);
if (status != null) {
- entry.applyStatus(status, false);
+ entry.setPresence(status.getPresence());
}
mImEntries.add(entry);
} else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
@@ -1228,8 +1224,6 @@
public int presence = -1;
public int chatCapability = 0;
- public CharSequence footerLine = null;
-
private boolean mIsInSubSection = false;
DetailViewEntry() {
@@ -1280,21 +1274,8 @@
return entry;
}
- /**
- * Apply given {@link DataStatus} values over this {@link DetailViewEntry}
- *
- * @param fillData When true, the given status replaces {@link #data}
- * and {@link #footerLine}. Otherwise only {@link #presence}
- * is updated.
- */
- public DetailViewEntry applyStatus(DataStatus status, boolean fillData) {
- presence = status.getPresence();
- if (fillData && status.isValid()) {
- this.data = status.getStatus().toString();
- this.footerLine = status.getTimestampLabel(context);
- }
-
- return this;
+ public void setPresence(int presence) {
+ this.presence = presence;
}
public void setIsInSubSection(boolean isInSubSection) {
@@ -1428,7 +1409,6 @@
private static class DetailViewCache {
public final TextView type;
public final TextView data;
- public final TextView footer;
public final ImageView presenceIcon;
public final ImageView secondaryActionButton;
public final View actionsViewContainer;
@@ -1442,7 +1422,6 @@
OnClickListener secondaryActionClickListener) {
type = (TextView) view.findViewById(R.id.type);
data = (TextView) view.findViewById(R.id.data);
- footer = (TextView) view.findViewById(R.id.footer);
primaryIndicator = view.findViewById(R.id.primary_indicator);
presenceIcon = (ImageView) view.findViewById(R.id.presence_icon);
@@ -1630,14 +1609,6 @@
views.data.setText(entry.data);
setMaxLines(views.data, entry.maxLines);
- // Set the footer
- if (!TextUtils.isEmpty(entry.footerLine)) {
- views.footer.setText(entry.footerLine);
- views.footer.setVisibility(View.VISIBLE);
- } else {
- views.footer.setVisibility(View.GONE);
- }
-
// Set the default contact method
views.primaryIndicator.setVisibility(entry.isPrimary ? View.VISIBLE : View.GONE);
@@ -2158,17 +2129,14 @@
private final static class InvitableAccountTypesAdapter extends BaseAdapter {
private final Context mContext;
private final LayoutInflater mInflater;
- private final ContactLoader.Result mContactData;
private final ArrayList<AccountType> mAccountTypes;
public InvitableAccountTypesAdapter(Context context, ContactLoader.Result contactData) {
mContext = context;
mInflater = LayoutInflater.from(context);
- mContactData = contactData;
final List<AccountType> types = contactData.getInvitableAccountTypes();
mAccountTypes = new ArrayList<AccountType>(types.size());
- AccountTypeManager manager = AccountTypeManager.getInstance(context);
for (int i = 0; i < types.size(); i++) {
mAccountTypes.add(types.get(i));
}
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index b2d869d..3a283fb 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -58,4 +58,7 @@
* row
*/
public long getDataId();
+
+ /** Returns the presence of this item or -1 if it was never set */
+ public int getPresence();
}
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 7c91ba8..e839cda 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -59,6 +59,7 @@
private Intent mAlternateIntent;
private int mAlternateIconDescriptionRes;
private int mAlternateIconRes;
+ private int mPresence = -1;
private Uri mDataUri;
private long mDataId;
@@ -170,7 +171,8 @@
if (isEmail) {
// Use Google Talk string when using Email, and clear data
// Uri so we don't try saving Email as primary.
- mSubtitle = context.getText(R.string.chat_gtalk);
+ mSubtitle = Im.getProtocolLabel(context.getResources(), Im.PROTOCOL_GOOGLE_TALK,
+ null);
mDataUri = null;
}
@@ -226,6 +228,15 @@
mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
}
+ @Override
+ public int getPresence() {
+ return mPresence;
+ }
+
+ public void setPresence(int presence) {
+ mPresence = presence;
+ }
+
private boolean isProtocolValid(ContentValues entryValues) {
final String protocol = entryValues.getAsString(Im.PROTOCOL);
if (protocol == null) {
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 7a209b5..b603e42 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -22,6 +22,7 @@
import com.android.contacts.R;
import com.android.contacts.model.AccountTypeManager;
import com.android.contacts.model.DataKind;
+import com.android.contacts.util.DataStatus;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
@@ -339,13 +340,14 @@
}
// Handle Email rows with presence data as Im entry
- final boolean hasPresence = data.getStatuses().containsKey(dataId);
- if (hasPresence && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+ final DataStatus status = data.getStatuses().get(dataId);
+ if (status != null && Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
final DataKind imKind = accountTypes.getKindOrFallback(accountType, dataSet,
Im.CONTENT_ITEM_TYPE);
if (imKind != null) {
final DataAction action = new DataAction(context, Im.CONTENT_ITEM_TYPE,
imKind, dataId, entryValues);
+ action.setPresence(status.getPresence());
considerAdd(action, cache);
}
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactListFragment.java b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
index c6187e9..da8fef8 100644
--- a/src/com/android/contacts/quickcontact/QuickContactListFragment.java
+++ b/src/com/android/contacts/quickcontact/QuickContactListFragment.java
@@ -16,14 +16,14 @@
package com.android.contacts.quickcontact;
+import com.android.contacts.ContactPresenceIconUtil;
import com.android.contacts.R;
import android.app.Fragment;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -111,6 +111,8 @@
final ImageView alternateActionButton = (ImageView) resultView.findViewById(
R.id.secondary_action_button);
final View alternateActionDivider = resultView.findViewById(R.id.vertical_divider);
+ final ImageView presenceIconView =
+ (ImageView) resultView.findViewById(R.id.presence_icon);
actionsContainer.setOnClickListener(mPrimaryActionClickListener);
actionsContainer.setTag(action);
@@ -143,6 +145,14 @@
text2.setVisibility(View.VISIBLE);
}
}
+ final Drawable presenceIcon = ContactPresenceIconUtil.getPresenceIcon(
+ getActivity(), action.getPresence());
+ if (presenceIcon != null) {
+ presenceIconView.setImageDrawable(presenceIcon);
+ presenceIconView.setVisibility(View.VISIBLE);
+ } else {
+ presenceIconView.setVisibility(View.GONE);
+ }
return resultView;
}
});