diff options
author | Patrick Scott <phanna@android.com> | 2010-03-30 13:57:29 -0400 |
---|---|---|
committer | Patrick Scott <phanna@android.com> | 2010-03-30 14:27:32 -0400 |
commit | 152794b84cd885cd0f219dd6baf6f167c128eae4 (patch) | |
tree | 04320384258cd7bca6e573af3e349838508ab2c6 | |
parent | 828f63d4c8c5383c309f550c1b03c9a657b0909c (diff) | |
download | packages_apps_Browser-152794b84cd885cd0f219dd6baf6f167c128eae4.zip packages_apps_Browser-152794b84cd885cd0f219dd6baf6f167c128eae4.tar.gz packages_apps_Browser-152794b84cd885cd0f219dd6baf6f167c128eae4.tar.bz2 |
Draw the touch icon better.
Use the application icon size to get the correct dimensions. Copy the bitmap to
the correct size and change the config to allow alpha.
This doesn't fix the part of the bug that prefers precomposed over regular touch
icons. That requires a change to frameworks/base.
Bug: 2546984
Change-Id: Ifee474cd3540456383f84bf563bc92df63e0b010
-rw-r--r-- | src/com/android/browser/BrowserBookmarksPage.java | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java index 1c58beb..7dd85aa 100644 --- a/src/com/android/browser/BrowserBookmarksPage.java +++ b/src/com/android/browser/BrowserBookmarksPage.java @@ -72,6 +72,7 @@ public class BrowserBookmarksPage extends Activity implements private boolean mCreateShortcut; private boolean mMostVisited; private View mEmptyView; + private int mIconSize; // XXX: There is no public string defining this intent so if Home changes // the value, we have to update this string. private static final String INSTALL_SHORTCUT = @@ -230,6 +231,10 @@ public class BrowserBookmarksPage extends Activity implements protected void onCreate(Bundle icicle) { super.onCreate(icicle); + // Grab the app icon size as a resource. + mIconSize = getResources().getDimensionPixelSize( + android.R.dimen.app_icon_size); + if (Intent.ACTION_CREATE_SHORTCUT.equals(getIntent().getAction())) { mCreateShortcut = true; } @@ -441,26 +446,34 @@ public class BrowserBookmarksPage extends Activity implements i.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); // Use the apple-touch-icon if available if (touchIcon != null) { - // Make a copy so we can modify the pixels. - Bitmap copy = touchIcon.copy(Bitmap.Config.ARGB_8888, true); - Canvas canvas = new Canvas(copy); + // Make a copy so we can modify the pixels. We can't use + // createScaledBitmap or copy since they will preserve the config + // and lose the ability to add alpha. + Bitmap bm = Bitmap.createBitmap(mIconSize, mIconSize, + Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bm); + Rect src = new Rect(0, 0, touchIcon.getWidth(), + touchIcon.getHeight()); + Rect dest = new Rect(0, 0, bm.getWidth(), bm.getHeight()); + + // Paint used for scaling the bitmap and drawing the rounded rect. + Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + paint.setFilterBitmap(true); + canvas.drawBitmap(touchIcon, src, dest, paint); // Construct a path from a round rect. This will allow drawing with // an inverse fill so we can punch a hole using the round rect. Path path = new Path(); path.setFillType(Path.FillType.INVERSE_WINDING); - RectF rect = new RectF(0, 0, touchIcon.getWidth(), - touchIcon.getHeight()); + RectF rect = new RectF(0, 0, bm.getWidth(), bm.getHeight()); rect.inset(1, 1); path.addRoundRect(rect, 8f, 8f, Path.Direction.CW); - // Construct a paint that clears the outside of the rectangle and - // draw. - Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + // Reuse the paint and clear the outside of the rectangle. paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPath(path, paint); - i.putExtra(Intent.EXTRA_SHORTCUT_ICON, copy); + i.putExtra(Intent.EXTRA_SHORTCUT_ICON, bm); } else { Bitmap favicon = getFavicon(position); if (favicon == null) { |