Use APIs to determine shortcut icon size
Previously there was no way for an app to know the shortcut icon size,
so there were APIs added to ActivityManager. Now we can change the
Contacts shortcut builder to use these APIs to make icons that look a
lot better.
Bug: 3224340
Change-Id: Ie18eac6b08e06464c62fcc3e663be39545653696
diff --git a/src/com/android/contacts/list/ShortcutIntentBuilder.java b/src/com/android/contacts/list/ShortcutIntentBuilder.java
index bb9d440..101b6d5 100644
--- a/src/com/android/contacts/list/ShortcutIntentBuilder.java
+++ b/src/com/android/contacts/list/ShortcutIntentBuilder.java
@@ -18,6 +18,7 @@
import com.android.contacts.R;
import com.android.contacts.util.Constants;
+import android.app.ActivityManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -75,6 +76,7 @@
private final OnShortcutIntentCreatedListener mListener;
private final Context mContext;
private final int mIconSize;
+ private final int mIconDensity;
/**
* Listener interface.
@@ -95,7 +97,10 @@
mContext = context;
mListener = listener;
- mIconSize = context.getResources().getDimensionPixelSize(android.R.dimen.app_icon_size);
+ final ActivityManager am = (ActivityManager) context
+ .getSystemService(Context.ACTIVITY_SERVICE);
+ mIconSize = am.getLauncherLargeIconSize();
+ mIconDensity = am.getLauncherLargeIconDensity();
}
public void createContactShortcutIntent(Uri contactUri) {
@@ -215,8 +220,8 @@
if (bitmapData != null) {
bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
} else {
- bitmap = BitmapFactory.decodeResource(mContext.getResources(),
- R.drawable.ic_contact_picture);
+ bitmap = ((BitmapDrawable) mContext.getResources().getDrawableForDensity(
+ R.drawable.ic_contact_picture, mIconDensity)).getBitmap();
}
Intent shortcutIntent;
@@ -284,8 +289,8 @@
Rect dst = new Rect(0,0, mIconSize, mIconSize);
canvas.drawBitmap(photo, src, dst, photoPaint);
- Drawable overlay = mContext.getResources().getDrawable(
- com.android.internal.R.drawable.quickcontact_badge_overlay_dark);
+ Drawable overlay = mContext.getResources().getDrawableForDensity(
+ com.android.internal.R.drawable.quickcontact_badge_overlay_dark, mIconDensity);
overlay.setBounds(dst);
overlay.draw(canvas);
@@ -302,7 +307,8 @@
boolean drawPhoneOverlay = true;
final float scaleDensity = r.getDisplayMetrics().scaledDensity;
- Bitmap phoneIcon = ((BitmapDrawable) r.getDrawable(actionResId)).getBitmap();
+ Bitmap phoneIcon = ((BitmapDrawable) r.getDrawableForDensity(actionResId, mIconDensity))
+ .getBitmap();
// If there isn't a photo use the generic phone action icon instead
if (photo == null) {