summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/BrowserBookmarksPage.java
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2009-08-04 13:22:29 -0400
committerPatrick Scott <phanna@android.com>2009-08-05 10:52:30 -0400
commit3918d4443ff38ef1870e02aa51a8b29f8352bb1a (patch)
tree72751daaca11780acba4f57c73619f4f37f6964c /src/com/android/browser/BrowserBookmarksPage.java
parent13feaed9ab1b9a3b8cc5ac1b33e36005802b9fc3 (diff)
downloadpackages_apps_Browser-3918d4443ff38ef1870e02aa51a8b29f8352bb1a.zip
packages_apps_Browser-3918d4443ff38ef1870e02aa51a8b29f8352bb1a.tar.gz
packages_apps_Browser-3918d4443ff38ef1870e02aa51a8b29f8352bb1a.tar.bz2
Implement onReceivedTouchIconUrl.
Add DownloadTouchIcon, an AsyncTask that downloads the apple-touch-icon for urls that are marked as bookmarks. The touch icon is stored in the bookmark database similar to favicons and thumbnails. If a shortcut is created for a bookmark containing a touch icon, the touch icon is used (with rounded corners). Refactor the bookmarks query to be a static function. The function uses the original url and new url to look for matching bookmarks. This takes care of redirects as well as bookmarks containing queries.
Diffstat (limited to 'src/com/android/browser/BrowserBookmarksPage.java')
-rw-r--r--src/com/android/browser/BrowserBookmarksPage.java108
1 files changed, 70 insertions, 38 deletions
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 5abdbb3..0fc2643 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -25,6 +25,9 @@ import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.net.Uri;
import android.os.Bundle;
@@ -97,8 +100,7 @@ public class BrowserBookmarksPage extends Activity implements
editBookmark(i.position);
break;
case R.id.shortcut_context_menu_id:
- final Intent send = createShortcutIntent(getUrl(i.position),
- getBookmarkTitle(i.position), getFavicon(i.position));
+ final Intent send = createShortcutIntent(i.position);
send.setAction(INSTALL_SHORTCUT);
sendBroadcast(send);
break;
@@ -259,16 +261,18 @@ public class BrowserBookmarksPage extends Activity implements
loadUrl(position);
}
} else {
- final Intent intent = createShortcutIntent(getUrl(position),
- getBookmarkTitle(position), getFavicon(position));
+ final Intent intent = createShortcutIntent(position);
setResultToParent(RESULT_OK, intent);
finish();
}
}
};
- private Intent createShortcutIntent(String url, String title,
- Bitmap favicon) {
+ private Intent createShortcutIntent(int position) {
+ String url = getUrl(position);
+ String title = getBookmarkTitle(position);
+ Bitmap touchIcon = getTouchIcon(position);
+
final Intent i = new Intent();
final Intent shortcutIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(url));
@@ -278,41 +282,65 @@ public class BrowserBookmarksPage extends Activity implements
Long.toString(uniqueId));
i.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
i.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
- if (favicon == null) {
- i.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
- Intent.ShortcutIconResource.fromContext(
- BrowserBookmarksPage.this,
- R.drawable.ic_launcher_shortcut_browser_bookmark));
- } else {
- Bitmap icon = BitmapFactory.decodeResource(getResources(),
- R.drawable.ic_launcher_shortcut_browser_bookmark);
-
- // Make a copy of the regular icon so we can modify the pixels.
- Bitmap copy = icon.copy(Bitmap.Config.ARGB_8888, true);
+ // 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 Paint for the white background rectangle and for
- // filtering the favicon.
- Paint p = new Paint(Paint.ANTI_ALIAS_FLAG
- | Paint.FILTER_BITMAP_FLAG);
- p.setStyle(Paint.Style.FILL_AND_STROKE);
- p.setColor(Color.WHITE);
-
- // Create a rectangle that is slightly wider than the favicon
- final float iconSize = 16; // 16x16 favicon
- final float padding = 2; // white padding around icon
- final float rectSize = iconSize + 2 * padding;
- final float y = icon.getHeight() - rectSize;
- RectF r = new RectF(0, y, rectSize, y + rectSize);
-
- // Draw a white rounded rectangle behind the favicon
- canvas.drawRoundRect(r, 2, 2, p);
-
- // Draw the favicon in the same rectangle as the rounded rectangle
- // but inset by the padding (results in a 16x16 favicon).
- r.inset(padding, padding);
- canvas.drawBitmap(favicon, null, r, p);
+ // 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);
+ path.addRoundRect(new RectF(0, 0, touchIcon.getWidth(),
+ touchIcon.getHeight()), 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);
+ paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
+ canvas.drawPath(path, paint);
+
i.putExtra(Intent.EXTRA_SHORTCUT_ICON, copy);
+ } else {
+ Bitmap favicon = getFavicon(position);
+ if (favicon == null) {
+ i.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
+ Intent.ShortcutIconResource.fromContext(
+ BrowserBookmarksPage.this,
+ R.drawable.ic_launcher_shortcut_browser_bookmark));
+ } else {
+ Bitmap icon = BitmapFactory.decodeResource(getResources(),
+ R.drawable.ic_launcher_shortcut_browser_bookmark);
+
+ // Make a copy of the regular icon so we can modify the pixels.
+ Bitmap copy = icon.copy(Bitmap.Config.ARGB_8888, true);
+ Canvas canvas = new Canvas(copy);
+
+ // Make a Paint for the white background rectangle and for
+ // filtering the favicon.
+ Paint p = new Paint(Paint.ANTI_ALIAS_FLAG
+ | Paint.FILTER_BITMAP_FLAG);
+ p.setStyle(Paint.Style.FILL_AND_STROKE);
+ p.setColor(Color.WHITE);
+
+ // Create a rectangle that is slightly wider than the favicon
+ final float iconSize = 16; // 16x16 favicon
+ final float padding = 2; // white padding around icon
+ final float rectSize = iconSize + 2 * padding;
+ final float y = icon.getHeight() - rectSize;
+ RectF r = new RectF(0, y, rectSize, y + rectSize);
+
+ // Draw a white rounded rectangle behind the favicon
+ canvas.drawRoundRect(r, 2, 2, p);
+
+ // Draw the favicon in the same rectangle as the rounded
+ // rectangle but inset by the padding
+ // (results in a 16x16 favicon).
+ r.inset(padding, padding);
+ canvas.drawBitmap(favicon, null, r, p);
+ i.putExtra(Intent.EXTRA_SHORTCUT_ICON, copy);
+ }
}
// Do not allow duplicate items
i.putExtra("duplicate", false);
@@ -459,6 +487,10 @@ public class BrowserBookmarksPage extends Activity implements
return mBookmarksAdapter.getFavicon(position);
}
+ private Bitmap getTouchIcon(int position) {
+ return mBookmarksAdapter.getTouchIcon(position);
+ }
+
private void copy(CharSequence text) {
try {
IClipboard clip = IClipboard.Stub.asInterface(ServiceManager.getService("clipboard"));