Merge "Add SIM photo for SIM contacts"
diff --git a/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java b/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
index db8f06f..3b143de 100644
--- a/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
+++ b/TestCommon/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
@@ -16,6 +16,7 @@
package com.android.contacts.common.test.mocks;
+import android.accounts.Account;
import android.graphics.Bitmap;
import android.net.Uri;
import android.view.View;
@@ -29,16 +30,19 @@
*/
public class MockContactPhotoManager extends ContactPhotoManager {
@Override
- public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
- DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
- defaultProvider.applyDefaultImage(view, -1, darkTheme, null);
+ public void loadThumbnail(ImageView view, long photoId, Account account,
+ boolean darkTheme, boolean isCircular,
+ DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
+ defaultProvider.applyDefaultImage(view, account, -1, darkTheme, null);
}
@Override
- public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
- boolean isCircular, DefaultImageRequest defaultImageRequest,
+ public void loadPhoto(ImageView view, Uri photoUri, Account account,
+ int requestedExtent, boolean darkTheme, boolean isCircular,
+ DefaultImageRequest defaultImageRequest,
DefaultImageProvider defaultProvider) {
- defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, null);
+ defaultProvider.applyDefaultImage(view, account, requestedExtent, darkTheme, null);
}
@Override
@@ -69,4 +73,8 @@
@Override
public void preloadPhotosInBackground() {
}
+
+ @Override
+ public void clear() {
+ }
}
diff --git a/res/drawable-hdpi/ic_contact_picture_sim.png b/res/drawable-hdpi/ic_contact_picture_sim.png
new file mode 100755
index 0000000..7b6cc26
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_sim_1.png b/res/drawable-hdpi/ic_contact_picture_sim_1.png
new file mode 100755
index 0000000..ec2ebcb
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim_1.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_sim_2.png b/res/drawable-hdpi/ic_contact_picture_sim_2.png
new file mode 100755
index 0000000..3b68c68
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim_2.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_sim_business.png b/res/drawable-hdpi/ic_contact_picture_sim_business.png
new file mode 100755
index 0000000..4df1ecd
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim_business.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_sim_personal.png b/res/drawable-hdpi/ic_contact_picture_sim_personal.png
new file mode 100755
index 0000000..44f4b93
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim_personal.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_contact_picture_sim_primary.png b/res/drawable-hdpi/ic_contact_picture_sim_primary.png
new file mode 100755
index 0000000..a5bf921
--- /dev/null
+++ b/res/drawable-hdpi/ic_contact_picture_sim_primary.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim.png b/res/drawable-mdpi/ic_contact_picture_sim.png
new file mode 100755
index 0000000..dd63d11
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim_1.png b/res/drawable-mdpi/ic_contact_picture_sim_1.png
new file mode 100755
index 0000000..4793a07
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim_1.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim_2.png b/res/drawable-mdpi/ic_contact_picture_sim_2.png
new file mode 100755
index 0000000..665a671
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim_2.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim_business.png b/res/drawable-mdpi/ic_contact_picture_sim_business.png
new file mode 100755
index 0000000..c266e26
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim_business.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim_personal.png b/res/drawable-mdpi/ic_contact_picture_sim_personal.png
new file mode 100755
index 0000000..f1e7596
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim_personal.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_contact_picture_sim_primary.png b/res/drawable-mdpi/ic_contact_picture_sim_primary.png
new file mode 100755
index 0000000..493067a
--- /dev/null
+++ b/res/drawable-mdpi/ic_contact_picture_sim_primary.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim.png b/res/drawable-xhdpi/ic_contact_picture_sim.png
new file mode 100755
index 0000000..a39b7df
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim_1.png b/res/drawable-xhdpi/ic_contact_picture_sim_1.png
new file mode 100755
index 0000000..300c028
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim_1.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim_2.png b/res/drawable-xhdpi/ic_contact_picture_sim_2.png
new file mode 100755
index 0000000..c7ce422
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim_2.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim_business.png b/res/drawable-xhdpi/ic_contact_picture_sim_business.png
new file mode 100755
index 0000000..abf631f
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim_business.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim_personal.png b/res/drawable-xhdpi/ic_contact_picture_sim_personal.png
new file mode 100755
index 0000000..e5f0cf0
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim_personal.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_picture_sim_primary.png b/res/drawable-xhdpi/ic_contact_picture_sim_primary.png
new file mode 100755
index 0000000..543d6a7
--- /dev/null
+++ b/res/drawable-xhdpi/ic_contact_picture_sim_primary.png
Binary files differ
diff --git a/src/com/android/contacts/common/ContactPhotoManager.java b/src/com/android/contacts/common/ContactPhotoManager.java
index 12faadb..f700fd8 100644
--- a/src/com/android/contacts/common/ContactPhotoManager.java
+++ b/src/com/android/contacts/common/ContactPhotoManager.java
@@ -16,6 +16,7 @@
package com.android.contacts.common;
+import android.accounts.Account;
import android.app.ActivityManager;
import android.content.ComponentCallbacks2;
import android.content.ContentResolver;
@@ -113,19 +114,24 @@
* draw a letter tile avatar based on the request parameters defined in the
* {@link DefaultImageRequest}.
*/
- public static Drawable getDefaultAvatarDrawableForContact(Resources resources, boolean hires,
+ public static Drawable getDefaultAvatarDrawableForContact(Context context, boolean hires,
DefaultImageRequest defaultImageRequest) {
+ return getDefaultAvatarDrawableForContact(context, hires, defaultImageRequest, null);
+ }
+
+ public static Drawable getDefaultAvatarDrawableForContact(Context context, boolean hires,
+ DefaultImageRequest defaultImageRequest, Account account) {
if (defaultImageRequest == null) {
if (sDefaultLetterAvatar == null) {
// Cache and return the letter tile drawable that is created by a null request,
// so that it doesn't have to be recreated every time it is requested again.
sDefaultLetterAvatar = LetterTileDefaultImageProvider.getDefaultImageForContact(
- resources, null);
+ context, null, account);
}
return sDefaultLetterAvatar;
}
- return LetterTileDefaultImageProvider.getDefaultImageForContact(resources,
- defaultImageRequest);
+ return LetterTileDefaultImageProvider.getDefaultImageForContact(context,
+ defaultImageRequest, account);
}
/**
@@ -365,8 +371,8 @@
* @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a
* default letter tile avatar should be drawn.
*/
- public abstract void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
- DefaultImageRequest defaultImageRequest);
+ public abstract void applyDefaultImage(ImageView view, Account account,
+ int extent, boolean darkTheme, DefaultImageRequest defaultImageRequest);
}
/**
@@ -376,16 +382,17 @@
*/
private static class LetterTileDefaultImageProvider extends DefaultImageProvider {
@Override
- public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
- DefaultImageRequest defaultImageRequest) {
- final Drawable drawable = getDefaultImageForContact(view.getResources(),
- defaultImageRequest);
+ public void applyDefaultImage(ImageView view, Account account, int extent,
+ boolean darkTheme, DefaultImageRequest defaultImageRequest) {
+ final Drawable drawable = getDefaultImageForContact(view.getContext(),
+ defaultImageRequest, account);
view.setImageDrawable(drawable);
}
- public static Drawable getDefaultImageForContact(Resources resources,
- DefaultImageRequest defaultImageRequest) {
- final LetterTileDrawable drawable = new LetterTileDrawable(resources);
+ public static Drawable getDefaultImageForContact(Context context,
+ DefaultImageRequest defaultImageRequest, Account account) {
+ final LetterTileDrawable drawable = new LetterTileDrawable(
+ context, account);
if (defaultImageRequest != null) {
// If the contact identifier is null or empty, fallback to the
// displayName. In that case, use {@code null} for the contact's
@@ -410,8 +417,8 @@
private static Drawable sDrawable;
@Override
- public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
- DefaultImageRequest defaultImageRequest) {
+ public void applyDefaultImage(ImageView view, Account account, int extent,
+ boolean darkTheme, DefaultImageRequest defaultImageRequest) {
if (sDrawable == null) {
Context context = view.getContext();
sDrawable = new ColorDrawable(context.getResources().getColor(
@@ -440,13 +447,15 @@
return new ContactPhotoManagerImpl(context);
}
+ public abstract void clear();
+
/**
* Load thumbnail image into the supplied image view. If the photo is already cached,
* it is displayed immediately. Otherwise a request is sent to load the photo
* from the database.
*/
- public abstract void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
- boolean isCircular, DefaultImageRequest defaultImageRequest,
+ public abstract void loadThumbnail(ImageView view, long photoId, Account account,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
DefaultImageProvider defaultProvider);
/**
@@ -454,10 +463,23 @@
* DefaultImageProvider)} using the {@link DefaultImageProvider} {@link #DEFAULT_AVATAR}.
*/
public final void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
- boolean isCircular, DefaultImageRequest defaultImageRequest) {
- loadThumbnail(view, photoId, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+ boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadThumbnail(view, photoId, null, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
}
+ public final void loadThumbnail(ImageView view, long photoId, Account account,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadThumbnail(view, photoId, account, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+ public final void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
+ loadThumbnail(view, photoId, null, darkTheme, isCircular,
+ defaultImageRequest, defaultProvider);
+ }
/**
* Load photo into the supplied image view. If the photo is already cached,
@@ -476,8 +498,9 @@
* @param defaultProvider The provider of default avatars (this is used if photoUri doesn't
* refer to an existing image)
*/
- public abstract void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
- boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
+ public abstract void loadPhoto(ImageView view, Uri photoUri,
+ Account account, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageRequest defaultImageRequest,
DefaultImageProvider defaultProvider);
/**
@@ -488,12 +511,26 @@
* @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
* letter tile avatar should be drawn.
*/
+
public final void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
- loadPhoto(view, photoUri, requestedExtent, darkTheme, isCircular,
+ loadPhoto(view, photoUri, null, requestedExtent, darkTheme, isCircular,
defaultImageRequest, DEFAULT_AVATAR);
}
+ public final void loadPhoto(ImageView view, Uri photoUri, Account account, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
+ loadPhoto(view, photoUri, account, requestedExtent, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+ public final void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
+ loadPhoto(view, photoUri, null, requestedExtent, darkTheme, isCircular,
+ defaultImageRequest, defaultProvider);
+ }
+
/**
* Calls {@link #loadPhoto(ImageView, Uri, boolean, boolean, DefaultImageRequest,
* DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and with the assumption, that
@@ -504,7 +541,15 @@
*/
public final void loadDirectoryPhoto(ImageView view, Uri photoUri, boolean darkTheme,
boolean isCircular, DefaultImageRequest defaultImageRequest) {
- loadPhoto(view, photoUri, -1, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+ loadPhoto(view, photoUri, null, -1, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
+ }
+
+ public final void loadDirectoryPhoto(ImageView view, Uri photoUri,
+ Account account, boolean darkTheme, boolean isCircular,
+ DefaultImageRequest defaultImageRequest) {
+ loadPhoto(view, photoUri, account, -1, darkTheme, isCircular,
+ defaultImageRequest, DEFAULT_AVATAR);
}
/**
@@ -784,11 +829,12 @@
}
@Override
- public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
- DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
+ public void loadThumbnail(ImageView view, long photoId, Account account,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
+ DefaultImageProvider defaultProvider) {
if (photoId == 0) {
// No photo is needed
- defaultProvider.applyDefaultImage(view, -1, darkTheme, defaultImageRequest);
+ defaultProvider.applyDefaultImage(view, account, -1, darkTheme, defaultImageRequest);
mPendingRequests.remove(view);
} else {
if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoId);
@@ -798,19 +844,19 @@
}
@Override
- public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
- boolean isCircular, DefaultImageRequest defaultImageRequest,
+ public void loadPhoto(ImageView view, Uri photoUri, Account account, int requestedExtent,
+ boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
DefaultImageProvider defaultProvider) {
if (photoUri == null) {
// No photo is needed
- defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme,
+ defaultProvider.applyDefaultImage(view, account, requestedExtent, darkTheme,
defaultImageRequest);
mPendingRequests.remove(view);
} else {
if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoUri);
if (isDefaultImageUri(photoUri)) {
- createAndApplyDefaultImageForUri(view, photoUri, requestedExtent, darkTheme,
- isCircular, defaultProvider);
+ createAndApplyDefaultImageForUri(view, account, photoUri, requestedExtent,
+ darkTheme, isCircular, defaultProvider);
} else {
loadPhotoByIdOrUri(view, Request.createFromUri(photoUri, requestedExtent,
darkTheme, isCircular, defaultProvider));
@@ -818,11 +864,12 @@
}
}
- private void createAndApplyDefaultImageForUri(ImageView view, Uri uri, int requestedExtent,
- boolean darkTheme, boolean isCircular, DefaultImageProvider defaultProvider) {
+ private void createAndApplyDefaultImageForUri(ImageView view,
+ Account account, Uri uri, int requestedExtent, boolean darkTheme,
+ boolean isCircular, DefaultImageProvider defaultProvider) {
DefaultImageRequest request = getDefaultImageRequestFromUri(uri);
request.isCircular = isCircular;
- defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, request);
+ defaultProvider.applyDefaultImage(view, account, requestedExtent, darkTheme, request);
}
private void loadPhotoByIdOrUri(ImageView view, Request request) {
@@ -1646,7 +1693,7 @@
? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
: DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
}
- mDefaultProvider.applyDefaultImage(view, mRequestedExtent, mDarkTheme, request);
+ mDefaultProvider.applyDefaultImage(view, null, mRequestedExtent, mDarkTheme, request);
}
}
}
diff --git a/src/com/android/contacts/common/ContactTileLoaderFactory.java b/src/com/android/contacts/common/ContactTileLoaderFactory.java
index 4377d05..33d4ea6 100644
--- a/src/com/android/contacts/common/ContactTileLoaderFactory.java
+++ b/src/com/android/contacts/common/ContactTileLoaderFactory.java
@@ -37,19 +37,22 @@
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;
+ public final static int ACCOUNT_TYPE = 5;
+ public final static int ACCOUNT_NAME = 6;
+
+ public final static int CONTACT_PRESENCE = 7;
+ public final static int CONTACT_STATUS = 8;
// Only used for StrequentPhoneOnlyLoader
- public final static int PHONE_NUMBER = 5;
- public final static int PHONE_NUMBER_TYPE = 6;
- public final static int PHONE_NUMBER_LABEL = 7;
- public final static int IS_DEFAULT_NUMBER = 8;
- public final static int PINNED = 9;
+ public final static int PHONE_NUMBER = 7;
+ public final static int PHONE_NUMBER_TYPE = 8;
+ public final static int PHONE_NUMBER_LABEL = 9;
+ public final static int IS_DEFAULT_NUMBER = 10;
+ public final static int PINNED = 11;
// The _ID field returned for strequent items actually contains data._id instead of
// contacts._id because the query is performed on the data table. In order to obtain the
// contact id for strequent items, we thus have to use Phone.contact_id instead.
- public final static int CONTACT_ID_FOR_DATA = 10;
+ public final static int CONTACT_ID_FOR_DATA = 12;
private static final String[] COLUMNS = new String[] {
Contacts._ID, // ..........................................0
@@ -57,8 +60,10 @@
Contacts.STARRED, // ......................................2
Contacts.PHOTO_URI, // ....................................3
Contacts.LOOKUP_KEY, // ...................................4
- Contacts.CONTACT_PRESENCE, // .............................5
- Contacts.CONTACT_STATUS, // ...............................6
+ RawContacts.ACCOUNT_TYPE, // 5
+ RawContacts.ACCOUNT_NAME, // 6
+ Contacts.CONTACT_PRESENCE, // .............................7
+ Contacts.CONTACT_STATUS, // ...............................8
};
/**
@@ -74,12 +79,14 @@
Contacts.STARRED, // ......................................2
Contacts.PHOTO_URI, // ....................................3
Contacts.LOOKUP_KEY, // ...................................4
- Phone.NUMBER, // ..........................................5
- Phone.TYPE, // ............................................6
- Phone.LABEL, // ...........................................7
- Phone.IS_SUPER_PRIMARY, //.................................8
- Contacts.PINNED, // .......................................9
- Phone.CONTACT_ID //........................................10
+ RawContacts.ACCOUNT_TYPE, // 5
+ RawContacts.ACCOUNT_NAME, // 6
+ Phone.NUMBER, // ..........................................7
+ Phone.TYPE, // ............................................8
+ Phone.LABEL, // ............................................9
+ Phone.IS_SUPER_PRIMARY, //.................................10
+ Contacts.PINNED, // .......................................11
+ Phone.CONTACT_ID //........................................12
};
private static final String STARRED_ORDER = Contacts.DISPLAY_NAME+" COLLATE NOCASE ASC";
diff --git a/src/com/android/contacts/common/MoreContactUtils.java b/src/com/android/contacts/common/MoreContactUtils.java
index ca6d08a..4d284ab 100644
--- a/src/com/android/contacts/common/MoreContactUtils.java
+++ b/src/com/android/contacts/common/MoreContactUtils.java
@@ -79,6 +79,16 @@
public static final String[] MULTI_SIM_NAME = { "perferred_name_sub1",
"perferred_name_sub2" };
+ public static final String PREFERRED_SIM_ICON_INDEX = "preferred_sim_icon_index";
+ public static final String[] IPCALL_PREFIX = { "ip_call_prefix_sub1",
+ "ip_call_prefix_sub2" };
+ public final static int[] IC_SIM_PICTURE = {
+ R.drawable.ic_contact_picture_sim_1,
+ R.drawable.ic_contact_picture_sim_2,
+ R.drawable.ic_contact_picture_sim_personal,
+ R.drawable.ic_contact_picture_sim_business,
+ R.drawable.ic_contact_picture_sim_primary
+ };
/**
* Returns true if two data with mimetypes which represent values in contact entries are
* considered equal for collapsing in the GUI. For caller-id, use
@@ -700,4 +710,27 @@
}
return name;
}
+
+ /**
+ * Get SIM card icon index by slot
+ */
+ public static int getCurrentSimIconIndex(Context context, int slot) {
+ if (context == null || slot < SimContactsConstants.SUB_1
+ || slot >= TelephonyManager.getDefault().getPhoneCount()) {
+ return -1;
+ }
+
+ String simIconIndex = Settings.System.getString(context.getContentResolver(),
+ PREFERRED_SIM_ICON_INDEX);
+ if (TextUtils.isEmpty(simIconIndex)) {
+ return slot;
+ } else {
+ String[] indexs = simIconIndex.split(",");
+ if (slot >= indexs.length) {
+ return -1;
+ }
+ return Integer.parseInt(indexs[slot]);
+ }
+ }
+
}
diff --git a/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java
index e62d421..34d3d45 100644
--- a/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java
+++ b/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java
@@ -16,6 +16,8 @@
package com.android.contacts.common.lettertiles;
+import android.accounts.Account;
+import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
@@ -28,8 +30,11 @@
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
+import android.telephony.TelephonyManager;
import android.util.Log;
+import com.android.contacts.common.MoreContactUtils;
+import com.android.contacts.common.model.account.SimAccountType;
import com.android.contacts.common.R;
import com.android.contacts.common.util.BitmapUtil;
@@ -53,6 +58,9 @@
private static Bitmap DEFAULT_PERSON_AVATAR;
private static Bitmap DEFAULT_BUSINESS_AVATAR;
private static Bitmap DEFAULT_VOICEMAIL_AVATAR;
+ private static Bitmap DEFAULT_SIM_PERSON_AVATAR;
+ private static Bitmap[] DEFAULT_CUSTOMIZE_SIM_PERSON_AVATAR =
+ new Bitmap[MoreContactUtils.IC_SIM_PICTURE.length];
/** Reusable components to avoid new allocations */
private static final Paint sPaint = new Paint();
@@ -71,11 +79,17 @@
private float mScale = 1.0f;
private float mOffset = 0.0f;
private boolean mIsCircle = false;
+ private Account mAccount;
+ private Context mContext;
- public LetterTileDrawable(final Resources res) {
+
+ public LetterTileDrawable(final Context context, final Account account) {
mPaint = new Paint();
mPaint.setFilterBitmap(true);
mPaint.setDither(true);
+ mAccount = account;
+ mContext = context;
+ Resources res = context.getResources();
if (sColors == null) {
sColors = res.obtainTypedArray(R.array.letter_tile_colors);
@@ -88,6 +102,13 @@
R.drawable.ic_business_white_120dp);
DEFAULT_VOICEMAIL_AVATAR = BitmapFactory.decodeResource(res,
R.drawable.ic_voicemail_avatar);
+ DEFAULT_SIM_PERSON_AVATAR = BitmapFactory.decodeResource(res,
+ R.drawable.ic_contact_picture_sim);
+ for (int i = 0; i < MoreContactUtils.IC_SIM_PICTURE.length; i++) {
+ DEFAULT_CUSTOMIZE_SIM_PERSON_AVATAR[i] = BitmapFactory
+ .decodeResource(res, MoreContactUtils.IC_SIM_PICTURE[i]);
+ }
+
sPaint.setTypeface(Typeface.create(
res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
sPaint.setTextAlign(Align.CENTER);
@@ -143,7 +164,9 @@
}
// Draw letter/digit only if the first character is an english letter
- if (mDisplayName != null && isEnglishLetter(mDisplayName.charAt(0))) {
+ if (mDisplayName != null
+ && isEnglishLetter(mDisplayName.charAt(0))
+ && (mAccount == null || (!mAccount.type.equals(SimAccountType.ACCOUNT_TYPE)))) {
// Draw letter or digit.
sFirstChar[0] = Character.toUpperCase(mDisplayName.charAt(0));
@@ -160,9 +183,9 @@
sPaint);
} else {
// Draw the default image if there is no letter/digit to be drawn
- final Bitmap bitmap = getBitmapForContactType(mContactType);
- drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(),
- canvas);
+ final Bitmap bitmap = getBitmapForContactType(mContactType,
+ mAccount, mContext);
+ drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), canvas);
}
}
@@ -184,7 +207,21 @@
return sColors.getColor(color, sDefaultColor);
}
- private static Bitmap getBitmapForContactType(int contactType) {
+ private static Bitmap getBitmapForContactType(int contactType,
+ Account account, Context context) {
+ if (account != null && SimAccountType.ACCOUNT_TYPE.equals(account.type)) {
+ if (TelephonyManager.getDefault().isMultiSimEnabled()) {
+ final int sub = MoreContactUtils.getSubscription(
+ SimAccountType.ACCOUNT_TYPE, account.name);
+ int index = MoreContactUtils.getCurrentSimIconIndex(context, sub);
+ if (index < 0) {
+ return DEFAULT_SIM_PERSON_AVATAR;
+ }
+ return DEFAULT_CUSTOMIZE_SIM_PERSON_AVATAR[index];
+ } else {
+ return DEFAULT_SIM_PERSON_AVATAR;
+ }
+ }
switch (contactType) {
case TYPE_PERSON:
return DEFAULT_PERSON_AVATAR;
diff --git a/src/com/android/contacts/common/list/ContactEntry.java b/src/com/android/contacts/common/list/ContactEntry.java
index 43fc19d..66ae50d 100644
--- a/src/com/android/contacts/common/list/ContactEntry.java
+++ b/src/com/android/contacts/common/list/ContactEntry.java
@@ -16,6 +16,7 @@
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.provider.ContactsContract.PinnedPositions;
@@ -36,6 +37,7 @@
public int pinned = PinnedPositions.UNPINNED;
public boolean isFavorite = false;
public boolean isDefaultNumber = false;
+ public Account account;
public static final ContactEntry BLANK_ENTRY = new ContactEntry();
}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/list/ContactEntryListAdapter.java b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
index 4d7eb19..7dad437 100644
--- a/src/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.content.Context;
import android.content.CursorLoader;
import android.content.res.Resources;
@@ -710,22 +711,31 @@
* @param contactIdColumn Index of the contact id column
* @param lookUpKeyColumn Index of the lookup key column
* @param displayNameColumn Index of the display name column
+ * @param accountTypeColumn Index of the account type column
+ * @param accountNameColumn Index of the account name column
*/
protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
Cursor cursor, int photoIdColumn, int photoUriColumn, int contactIdColumn,
- int lookUpKeyColumn, int displayNameColumn) {
+ int lookUpKeyColumn,int displayNameColumn, int accountTypeColumn,
+ int accountNameColumn) {
long photoId = 0;
if (!cursor.isNull(photoIdColumn)) {
photoId = cursor.getLong(photoIdColumn);
}
+ Account account = null;
+ if (!cursor.isNull(accountTypeColumn) && !cursor.isNull(accountNameColumn)) {
+ final String accountType = cursor.getString(accountTypeColumn);
+ final String accountName = cursor.getString(accountNameColumn);
+ account = new Account(accountName, accountType);
+ }
QuickContactBadge quickContact = view.getQuickContact();
quickContact.assignContactUri(
getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn));
if (photoId != 0 || photoUriColumn == -1) {
- getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos,
- null);
+ getPhotoLoader().loadThumbnail(quickContact, photoId, account,
+ mDarkTheme, mCircularPhotos, null);
} else {
final String photoUriString = cursor.getString(photoUriColumn);
final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
@@ -734,8 +744,8 @@
request = getDefaultImageRequestFromCursor(cursor, displayNameColumn,
lookUpKeyColumn);
}
- getPhotoLoader().loadPhoto(quickContact, photoUri, -1, mDarkTheme, mCircularPhotos,
- request);
+ getPhotoLoader().loadPhoto(quickContact, photoUri, account, -1,
+ mDarkTheme, mCircularPhotos, request);
}
}
diff --git a/src/com/android/contacts/common/list/ContactListAdapter.java b/src/com/android/contacts/common/list/ContactListAdapter.java
index 7e9a2e9..c1c0f02 100644
--- a/src/com/android/contacts/common/list/ContactListAdapter.java
+++ b/src/com/android/contacts/common/list/ContactListAdapter.java
@@ -15,12 +15,14 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.SearchSnippets;
import android.text.TextUtils;
import android.view.View;
@@ -49,6 +51,8 @@
Contacts.PHOTO_THUMBNAIL_URI, // 5
Contacts.LOOKUP_KEY, // 6
Contacts.IS_USER_PROFILE, // 7
+ RawContacts.ACCOUNT_TYPE, // 8
+ RawContacts.ACCOUNT_NAME, // 9
};
private static final String[] CONTACT_PROJECTION_ALTERNATIVE = new String[] {
@@ -60,6 +64,8 @@
Contacts.PHOTO_THUMBNAIL_URI, // 5
Contacts.LOOKUP_KEY, // 6
Contacts.IS_USER_PROFILE, // 7
+ RawContacts.ACCOUNT_TYPE, // 8
+ RawContacts.ACCOUNT_NAME, // 9
};
private static final String[] FILTER_PROJECTION_PRIMARY = new String[] {
@@ -71,7 +77,9 @@
Contacts.PHOTO_THUMBNAIL_URI, // 5
Contacts.LOOKUP_KEY, // 6
Contacts.IS_USER_PROFILE, // 7
- SearchSnippets.SNIPPET, // 8
+ RawContacts.ACCOUNT_TYPE, // 8
+ RawContacts.ACCOUNT_NAME, // 9
+ SearchSnippets.SNIPPET, // 10
};
private static final String[] FILTER_PROJECTION_ALTERNATIVE = new String[] {
@@ -83,7 +91,9 @@
Contacts.PHOTO_THUMBNAIL_URI, // 5
Contacts.LOOKUP_KEY, // 6
Contacts.IS_USER_PROFILE, // 7
- SearchSnippets.SNIPPET, // 8
+ RawContacts.ACCOUNT_TYPE, // 8
+ RawContacts.ACCOUNT_NAME, // 9
+ SearchSnippets.SNIPPET, // 10
};
public static final int CONTACT_ID = 0;
@@ -94,7 +104,9 @@
public static final int CONTACT_PHOTO_URI = 5;
public static final int CONTACT_LOOKUP_KEY = 6;
public static final int CONTACT_IS_USER_PROFILE = 7;
- public static final int CONTACT_SNIPPET = 8;
+ public static final int CONTACT_ACCOUNT_TYPE = 8;
+ public static final int CONTACT_ACCOUNT_NAME = 9;
+ public static final int CONTACT_SNIPPET = 10;
}
private CharSequence mUnknownNameText;
@@ -230,8 +242,15 @@
photoId = cursor.getLong(ContactQuery.CONTACT_PHOTO_ID);
}
+ Account account = null;
+ if (!cursor.isNull(ContactQuery.CONTACT_ACCOUNT_TYPE)
+ && !cursor.isNull(ContactQuery.CONTACT_ACCOUNT_NAME)) {
+ final String accountType = cursor.getString(ContactQuery.CONTACT_ACCOUNT_TYPE);
+ final String accountName = cursor.getString(ContactQuery.CONTACT_ACCOUNT_NAME);
+ account = new Account(accountName, accountType);
+ }
if (photoId != 0) {
- getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+ getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, account, false,
getCircularPhotos(), null);
} else {
final String photoUriString = cursor.getString(ContactQuery.CONTACT_PHOTO_URI);
@@ -242,7 +261,7 @@
ContactQuery.CONTACT_DISPLAY_NAME,
ContactQuery.CONTACT_LOOKUP_KEY);
}
- getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+ getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, account, false,
getCircularPhotos(), request);
}
}
diff --git a/src/com/android/contacts/common/list/ContactTileAdapter.java b/src/com/android/contacts/common/list/ContactTileAdapter.java
index 04f415d..643c63f 100644
--- a/src/com/android/contacts/common/list/ContactTileAdapter.java
+++ b/src/com/android/contacts/common/list/ContactTileAdapter.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.content.ContentUris;
import android.content.Context;
import android.content.res.Resources;
@@ -66,6 +67,8 @@
protected int mNameIndex;
protected int mPresenceIndex;
protected int mStatusIndex;
+ private int mAccountTypeIndex;
+ private int mAccountNameIndex;
private boolean mIsQuickContactEnabled = false;
private final int mPaddingInPixels;
@@ -148,6 +151,8 @@
mStarredIndex = ContactTileLoaderFactory.STARRED;
mPresenceIndex = ContactTileLoaderFactory.CONTACT_PRESENCE;
mStatusIndex = ContactTileLoaderFactory.CONTACT_STATUS;
+ mAccountTypeIndex = ContactTileLoaderFactory.ACCOUNT_TYPE;
+ mAccountNameIndex = ContactTileLoaderFactory.ACCOUNT_NAME;
}
private static boolean cursorIsValid(Cursor cursor) {
@@ -186,6 +191,9 @@
* Else use {@link ContactTileLoaderFactory}
*/
public void setContactCursor(Cursor cursor) {
+ if (cursor == null || cursor.isClosed()) {
+ return;
+ }
mContactCursor = cursor;
mDividerPosition = getDividerPosition(cursor);
@@ -270,6 +278,13 @@
}
contact.status = statusMessage;
+ if (!cursor.isNull(mAccountTypeIndex) && !cursor.isNull(mAccountTypeIndex)) {
+ final String accountType = cursor.getString(mAccountTypeIndex);
+ final String accountName = cursor.getString(mAccountNameIndex);
+ contact.account = new Account(accountName, accountType);
+ } else {
+ contact.account = null;
+ }
return contact;
}
diff --git a/src/com/android/contacts/common/list/ContactTileView.java b/src/com/android/contacts/common/list/ContactTileView.java
index 56552bb..b42ab7b 100644
--- a/src/com/android/contacts/common/list/ContactTileView.java
+++ b/src/com/android/contacts/common/list/ContactTileView.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.content.Context;
import android.graphics.Rect;
import android.net.Uri;
@@ -128,7 +129,8 @@
DefaultImageRequest request = getDefaultImageRequest(entry.name, entry.lookupKey);
configureViewForImage(entry.photoUri == null);
if (mPhoto != null) {
- mPhotoManager.loadPhoto(mPhoto, entry.photoUri, getApproximateImageSize(),
+ mPhotoManager.loadPhoto(mPhoto, entry.photoUri,
+ entry.account, getApproximateImageSize(),
isDarkTheme(), isContactPhotoCircular(), request);
if (mQuickContact != null) {
@@ -136,7 +138,7 @@
}
} else if (mQuickContact != null) {
mQuickContact.assignContactUri(mLookupUri);
- mPhotoManager.loadPhoto(mQuickContact, entry.photoUri,
+ mPhotoManager.loadPhoto(mQuickContact, entry.photoUri, entry.account,
getApproximateImageSize(), isDarkTheme(), isContactPhotoCircular(),
request);
}
diff --git a/src/com/android/contacts/common/list/DefaultContactListAdapter.java b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
index 4842533..ed1c509 100644
--- a/src/com/android/contacts/common/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
@@ -241,7 +241,8 @@
if (isQuickContactEnabled()) {
bindQuickContact(view, partition, cursor, ContactQuery.CONTACT_PHOTO_ID,
ContactQuery.CONTACT_PHOTO_URI, ContactQuery.CONTACT_ID,
- ContactQuery.CONTACT_LOOKUP_KEY, ContactQuery.CONTACT_DISPLAY_NAME);
+ ContactQuery.CONTACT_LOOKUP_KEY, ContactQuery.CONTACT_DISPLAY_NAME,
+ ContactQuery.CONTACT_ACCOUNT_TYPE, ContactQuery.CONTACT_ACCOUNT_NAME);
} else {
if (getDisplayPhotos()) {
bindPhoto(view, partition, cursor);
diff --git a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
index 5f5e37f..35ff111 100644
--- a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.content.ContentUris;
import android.content.Context;
import android.content.CursorLoader;
@@ -81,6 +82,8 @@
Phone.PHOTO_ID, // 6
Phone.DISPLAY_NAME_PRIMARY, // 7
Phone.PHOTO_THUMBNAIL_URI, // 8
+ RawContacts.ACCOUNT_TYPE, // 9
+ RawContacts.ACCOUNT_NAME, // 10
};
public static final String[] PROJECTION_ALTERNATIVE = new String[] {
@@ -93,6 +96,8 @@
Phone.PHOTO_ID, // 6
Phone.DISPLAY_NAME_ALTERNATIVE, // 7
Phone.PHOTO_THUMBNAIL_URI, // 8
+ RawContacts.ACCOUNT_TYPE, // 9
+ RawContacts.ACCOUNT_NAME, // 10
};
public static final int PHONE_ID = 0;
@@ -104,6 +109,8 @@
public static final int PHOTO_ID = 6;
public static final int DISPLAY_NAME = 7;
public static final int PHOTO_URI = 8;
+ public static final int PHONE_ACCOUNT_TYPE = 9;
+ public static final int PHONE_ACCOUNT_NAME = 10;
}
private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE =
@@ -378,7 +385,8 @@
if (isQuickContactEnabled()) {
bindQuickContact(view, partition, cursor, PhoneQuery.PHOTO_ID,
PhoneQuery.PHOTO_URI, PhoneQuery.CONTACT_ID,
- PhoneQuery.LOOKUP_KEY, PhoneQuery.DISPLAY_NAME);
+ PhoneQuery.LOOKUP_KEY, PhoneQuery.DISPLAY_NAME,
+ PhoneQuery.PHONE_ACCOUNT_TYPE, PhoneQuery.PHONE_ACCOUNT_NAME);
} else {
if (getDisplayPhotos()) {
bindPhoto(view, partition, cursor);
@@ -448,9 +456,15 @@
if (!cursor.isNull(PhoneQuery.PHOTO_ID)) {
photoId = cursor.getLong(PhoneQuery.PHOTO_ID);
}
-
+ Account account = null;
+ if (!cursor.isNull(PhoneQuery.PHONE_ACCOUNT_TYPE)
+ && !cursor.isNull(PhoneQuery.PHONE_ACCOUNT_NAME)) {
+ final String accountType = cursor.getString(PhoneQuery.PHONE_ACCOUNT_TYPE);
+ final String accountName = cursor.getString(PhoneQuery.PHONE_ACCOUNT_NAME);
+ account = new Account(accountName, accountType);
+ }
if (photoId != 0) {
- getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+ getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, account, false,
getCircularPhotos(), null);
} else {
final String photoUriString = cursor.getString(PhoneQuery.PHOTO_URI);
@@ -462,7 +476,7 @@
final String lookupKey = cursor.getString(PhoneQuery.LOOKUP_KEY);
request = new DefaultImageRequest(displayName, lookupKey, getCircularPhotos());
}
- getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+ getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, account, false,
getCircularPhotos(), request);
}
}
diff --git a/src/com/android/contacts/common/list/ShortcutIntentBuilder.java b/src/com/android/contacts/common/list/ShortcutIntentBuilder.java
index 6c97fd9..53cb857 100644
--- a/src/com/android/contacts/common/list/ShortcutIntentBuilder.java
+++ b/src/com/android/contacts/common/list/ShortcutIntentBuilder.java
@@ -15,6 +15,7 @@
*/
package com.android.contacts.common.list;
+import android.accounts.Account;
import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
@@ -38,6 +39,7 @@
import android.provider.ContactsContract.Data;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.provider.ContactsContract.RawContacts;
import android.telecom.PhoneAccount;
import android.text.TextPaint;
import android.text.TextUtils;
@@ -56,12 +58,16 @@
private static final String[] CONTACT_COLUMNS = {
Contacts.DISPLAY_NAME,
Contacts.PHOTO_ID,
- Contacts.LOOKUP_KEY
+ Contacts.LOOKUP_KEY,
+ RawContacts.ACCOUNT_TYPE,
+ RawContacts.ACCOUNT_NAME
};
private static final int CONTACT_DISPLAY_NAME_COLUMN_INDEX = 0;
private static final int CONTACT_PHOTO_ID_COLUMN_INDEX = 1;
private static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 2;
+ private static final int CONTACT_ACCOUNT_TYPE_COLUMN_INDEX = 3;
+ private static final int CONTACT_ACCOUNT_NAME_COLUMN_INDEX = 4;
private static final String[] PHONE_COLUMNS = {
Phone.DISPLAY_NAME,
@@ -69,7 +75,9 @@
Phone.NUMBER,
Phone.TYPE,
Phone.LABEL,
- Phone.LOOKUP_KEY
+ Phone.LOOKUP_KEY,
+ RawContacts.ACCOUNT_TYPE,
+ RawContacts.ACCOUNT_NAME
};
private static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 0;
@@ -78,6 +86,8 @@
private static final int PHONE_TYPE_COLUMN_INDEX = 3;
private static final int PHONE_LABEL_COLUMN_INDEX = 4;
private static final int PHONE_LOOKUP_KEY_COLUMN_INDEX = 5;
+ private static final int PHONE_ACCOUNT_TYPE_COLUMN_INDEX = 6;
+ private static final int PHONE_ACCOUNT_NAME_COLUMN_INDEX = 7;
private static final String[] PHOTO_COLUMNS = {
Photo.PHOTO,
@@ -187,6 +197,8 @@
}
private final class ContactLoadingAsyncTask extends LoadingAsyncTask {
+ private Account mAccount;
+
public ContactLoadingAsyncTask(Uri uri) {
super(uri);
}
@@ -200,6 +212,13 @@
if (cursor.moveToFirst()) {
mDisplayName = cursor.getString(CONTACT_DISPLAY_NAME_COLUMN_INDEX);
mPhotoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
+
+ final String accountType = cursor
+ .getString(CONTACT_ACCOUNT_TYPE_COLUMN_INDEX);
+ final String accountName = cursor
+ .getString(CONTACT_ACCOUNT_NAME_COLUMN_INDEX);
+ mAccount = new Account(accountName, accountType);
+
mLookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
}
} finally {
@@ -209,7 +228,8 @@
}
@Override
protected void onPostExecute(Void result) {
- createContactShortcutIntent(mUri, mContentType, mDisplayName, mLookupKey, mBitmapData);
+ createContactShortcutIntent(mUri, mContentType, mDisplayName,
+ mAccount, mLookupKey, mBitmapData);
}
}
@@ -218,6 +238,7 @@
private String mPhoneNumber;
private int mPhoneType;
private String mPhoneLabel;
+ private Account mAccount;
public PhoneNumberLoadingAsyncTask(Uri uri, String shortcutAction) {
super(uri);
@@ -236,6 +257,13 @@
mPhoneNumber = cursor.getString(PHONE_NUMBER_COLUMN_INDEX);
mPhoneType = cursor.getInt(PHONE_TYPE_COLUMN_INDEX);
mPhoneLabel = cursor.getString(PHONE_LABEL_COLUMN_INDEX);
+
+ final String accountType = cursor
+ .getString(PHONE_ACCOUNT_TYPE_COLUMN_INDEX);
+ final String accountName = cursor
+ .getString(PHONE_ACCOUNT_NAME_COLUMN_INDEX);
+ mAccount = new Account(accountName, accountType);
+
mLookupKey = cursor.getString(PHONE_LOOKUP_KEY_COLUMN_INDEX);
}
} finally {
@@ -247,23 +275,24 @@
@Override
protected void onPostExecute(Void result) {
createPhoneNumberShortcutIntent(mUri, mDisplayName, mLookupKey, mBitmapData,
- mPhoneNumber, mPhoneType, mPhoneLabel, mShortcutAction);
+ mPhoneNumber, mPhoneType, mPhoneLabel, mAccount, mShortcutAction);
}
}
- private Drawable getPhotoDrawable(byte[] bitmapData, String displayName, String lookupKey) {
+ private Drawable getPhotoDrawable(byte[] bitmapData, String displayName,
+ String lookupKey, Account account) {
if (bitmapData != null) {
Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
return new BitmapDrawable(mContext.getResources(), bitmap);
} else {
- return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext.getResources(),
- false, new DefaultImageRequest(displayName, lookupKey, false));
+ return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext,
+ false, new DefaultImageRequest(displayName, lookupKey, false), account);
}
}
private void createContactShortcutIntent(Uri contactUri, String contentType, String displayName,
- String lookupKey, byte[] bitmapData) {
- Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+ Account account, String lookupKey, byte[] bitmapData) {
+ Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey, account);
Intent shortcutIntent = new Intent(ContactsContract.QuickContact.ACTION_QUICK_CONTACT);
@@ -300,8 +329,8 @@
private void createPhoneNumberShortcutIntent(Uri uri, String displayName, String lookupKey,
byte[] bitmapData, String phoneNumber, int phoneType, String phoneLabel,
- String shortcutAction) {
- Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+ Account account, String shortcutAction) {
+ Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey, account);
Bitmap bitmap;
Uri phoneUri;