Add QuickContact badge around contacts shortcuts.
Change-Id: I0757abbc118979917bc7d3ecb64103a9cdd4da00
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index a82f5a9..25189db 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -24,4 +24,7 @@
<!-- The height of the ScrollingTabWidget -->
<dimen name="tab_height">40dip</dimen>
<dimen name="account_name_height">25dip</dimen>
+
+ <dimen name="contact_shortcut_frame_width">50dip</dimen>
+ <dimen name="contact_shortcut_frame_height">56dip</dimen>
</resources>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index ca1a469..24c7100 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -103,6 +103,7 @@
import android.widget.SectionIndexer;
import android.widget.TextView;
import android.widget.AbsListView.OnScrollListener;
+import android.*;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
@@ -111,6 +112,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
+import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -1318,7 +1320,7 @@
shortcutIntent.putExtra(ContactsContract.QuickContact.EXTRA_EXCLUDE_MIMES,
(String[]) null);
- final Bitmap icon = loadContactPhoto(id, null);
+ final Bitmap icon = framePhoto(loadContactPhoto(id, null));
if (icon != null) {
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
} else {
@@ -1359,6 +1361,33 @@
finish();
}
+ private Bitmap framePhoto(Bitmap photo) {
+ final Resources r = getResources();
+ final Drawable frame = r.getDrawable(com.android.internal.R.drawable.quickcontact_badge);
+
+ final int width = r.getDimensionPixelSize(R.dimen.contact_shortcut_frame_width);
+ final int height = r.getDimensionPixelSize(R.dimen.contact_shortcut_frame_height);
+
+ frame.setBounds(0, 0, width, height);
+
+ final Rect padding = new Rect();
+ frame.getPadding(padding);
+
+ final Rect source = new Rect(0, 0, photo.getWidth(), photo.getHeight());
+ final Rect destination = new Rect(padding.left, padding.top,
+ width - padding.right, height - padding.bottom);
+
+ final int d = Math.max(width, height);
+ final Bitmap b = Bitmap.createBitmap(d, d, Bitmap.Config.ARGB_8888);
+ final Canvas c = new Canvas(b);
+
+ c.translate((d - width) / 2.0f, (d - height) / 2.0f);
+ frame.draw(c);
+ c.drawBitmap(photo, source, destination, new Paint(Paint.FILTER_BITMAP_FLAG));
+
+ return b;
+ }
+
/**
* Generates a phone number shortcut icon. Adds an overlay describing the type of the phone
* number, and if there is a photo also adds the call action icon.
@@ -1618,6 +1647,7 @@
private Bitmap loadContactPhoto(long contactId, BitmapFactory.Options options) {
Cursor cursor = null;
Bitmap bm = null;
+
try {
Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
Uri photoUri = Uri.withAppendedPath(contactUri, Contacts.Photo.CONTENT_DIRECTORY);
@@ -1631,6 +1661,17 @@
cursor.close();
}
}
+
+ if (bm == null) {
+ final int[] fallbacks = {
+ R.drawable.ic_contact_picture,
+ R.drawable.ic_contact_picture_2,
+ R.drawable.ic_contact_picture_3
+ };
+ bm = BitmapFactory.decodeResource(getResources(),
+ fallbacks[new Random().nextInt(fallbacks.length)]);
+ }
+
return bm;
}