Added presence and status to ContactTiles and frequents.
-Added status string: "available, busy, away, etc.."
-Cleaned up XML and refactored styles
Change-Id: I66f45c93502ff01849ace1ede7e694e9dc6165b7
diff --git a/src/com/android/contacts/ContactTileLoaderFactory.java b/src/com/android/contacts/ContactTileLoaderFactory.java
index 20ad26e..e90730a 100644
--- a/src/com/android/contacts/ContactTileLoaderFactory.java
+++ b/src/com/android/contacts/ContactTileLoaderFactory.java
@@ -33,13 +33,17 @@
public final static int STARRED = 2;
public final static int PHOTO_URI = 3;
public final static int LOOKUP_KEY = 4;
+ public final static int CONTACT_PRESENCE = 5;
+ public final static int CONTACT_STATUS = 6;
private static final String[] COLUMNS = new String[] {
Contacts._ID,
Contacts.DISPLAY_NAME,
Contacts.STARRED,
Contacts.PHOTO_URI,
- Contacts.LOOKUP_KEY
+ Contacts.LOOKUP_KEY,
+ Contacts.CONTACT_PRESENCE,
+ Contacts.CONTACT_STATUS,
};
public static CursorLoader createStrequentLoader(Context context) {
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index 452c5d0..9605747 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -53,6 +53,7 @@
Data.LOOKUP_KEY, // 11
Data.PHONETIC_NAME, // 12
Data.HAS_PHONE_NUMBER, // 13
+ Data.CONTACT_STATUS, // 14
};
private final long mGroupId;
@@ -71,6 +72,7 @@
public static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 11;
public static final int CONTACT_PHONETIC_NAME_COLUMN_INDEX = 12;
public static final int CONTACT_HAS_PHONE_COLUMN_INDEX = 13;
+ public static final int CONTACT_STATUS_COLUMN_INDEX = 14;
public GroupMemberLoader(Context context, long groupId) {
super(context);
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
index 9674960..48a9938 100644
--- a/src/com/android/contacts/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -59,6 +59,8 @@
private int mPhotoUriIndex;
private int mNameIndex;
private int mStarredIndex;
+ private int mPresenceIndex;
+ private int mStatusIndex;
private boolean mIsQuickContactEnabled = false;
@@ -139,12 +141,16 @@
mPhotoUriIndex = GroupMemberLoader.CONTACT_PHOTO_URI_COLUMN_INDEX;
mNameIndex = GroupMemberLoader.CONTACT_DISPLAY_NAME_PRIMARY_COLUMN_INDEX;
mStarredIndex = GroupMemberLoader.CONTACT_STARRED_COLUMN_INDEX;
+ mPresenceIndex = GroupMemberLoader.CONTACT_PRESENCE_STATUS_COLUMN_INDEX;
+ mStatusIndex = GroupMemberLoader.CONTACT_STATUS_COLUMN_INDEX;
} else {
mIdIndex = ContactTileLoaderFactory.CONTACT_ID;
mLookupIndex = ContactTileLoaderFactory.LOOKUP_KEY;
mPhotoUriIndex = ContactTileLoaderFactory.PHOTO_URI;
mNameIndex = ContactTileLoaderFactory.DISPLAY_NAME;
mStarredIndex = ContactTileLoaderFactory.STARRED;
+ mPresenceIndex = ContactTileLoaderFactory.CONTACT_PRESENCE;
+ mStatusIndex = ContactTileLoaderFactory.CONTACT_STATUS;
}
}
@@ -192,9 +198,11 @@
ContactEntry contact = new ContactEntry();
contact.name = cursor.getString(mNameIndex);
+ contact.status = cursor.getString(mStatusIndex);
contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
contact.lookupKey = ContentUris.withAppendedId(
Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
+ contact.presence = cursor.isNull(mPresenceIndex) ? null : cursor.getInt(mPresenceIndex);
return contact;
}
@@ -455,9 +463,11 @@
* Class to hold contact information
*/
public static class ContactEntry {
- public Uri photoUri;
public String name;
+ public String status;
+ public Uri photoUri;
public Uri lookupKey;
+ public Integer presence;
}
private static class ViewTypes {
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
index 7981bd1..715c331 100644
--- a/src/com/android/contacts/list/ContactTileView.java
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -20,6 +20,8 @@
import com.android.contacts.list.ContactTileAdapter.ContactEntry;
import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
@@ -29,6 +31,9 @@
import android.widget.QuickContactBadge;
import android.widget.TextView;
+import android.provider.ContactsContract.StatusUpdates;
+
+
/**
* A ContactTile displays the contact's picture overlayed with their name
*/
@@ -37,8 +42,10 @@
private Uri mLookupUri;
private ImageView mPhoto;
+ private ImageView mPresence;
private QuickContactBadge mQuickContact;
private TextView mName;
+ private TextView mStatus;
private ContactPhotoManager mPhotoManager = null;
public ContactTileView(Context context, AttributeSet attrs) {
@@ -53,6 +60,8 @@
mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
+ mPresence = (ImageView) findViewById(R.id.contact_tile_presence);
+ mStatus = (TextView) findViewById(R.id.contact_tile_status);
}
public void setPhotoManager(ContactPhotoManager photoManager) {
@@ -68,6 +77,24 @@
mName.setText(entry.name);
mLookupUri = entry.lookupKey;
+ int presenceDrawableResId = (entry.presence == null ? 0 :
+ StatusUpdates.getPresenceIconResourceId(entry.presence));
+
+ if (mPresence != null) {
+ mPresence.setBackgroundResource(presenceDrawableResId);
+ }
+
+ if (mStatus != null) {
+ String statusText;
+ if (entry.presence == null) {
+ statusText = null;
+ } else {
+ statusText =
+ (entry.status == null ? getStatusString(entry.presence) : entry.status);
+ }
+ mStatus.setText(statusText);
+ }
+
if (mQuickContact != null) {
mQuickContact.assignContactUri(mLookupUri);
mQuickContact.setImageBitmap(null);
@@ -92,6 +119,23 @@
}
}
+ private String getStatusString(int presence) {
+ Resources resources = getResources();
+ switch (presence) {
+ case StatusUpdates.AVAILABLE:
+ return resources.getString(R.string.status_available);
+ case StatusUpdates.IDLE:
+ case StatusUpdates.AWAY:
+ return resources.getString(R.string.status_away);
+ case StatusUpdates.DO_NOT_DISTURB:
+ return resources.getString(R.string.status_busy);
+ case StatusUpdates.OFFLINE:
+ case StatusUpdates.INVISIBLE:
+ default:
+ return null;
+ }
+ }
+
public Uri getLookupUri() {
return mLookupUri;
}