Use touch icon in the widget if available

 Bug: 3289421

Change-Id: I45f435e2949f2749b9221e007037dedd69781cd6
diff --git a/res/layout/bookmarklistwidget_item.xml b/res/layout/bookmarklistwidget_item.xml
index 039bc2c..9d1f8ec 100644
--- a/res/layout/bookmarklistwidget_item.xml
+++ b/res/layout/bookmarklistwidget_item.xml
@@ -28,7 +28,7 @@
         android:layout_width="32dp"
         android:layout_gravity="center_vertical"
         android:layout_marginLeft="16dp"
-        android:scaleType="fitXY"/>
+        android:scaleType="fitCenter"/>
     <TextView
         android:id="@+id/label"
         android:layout_width="0dip"
diff --git a/src/com/android/browser/widget/BookmarkListWidgetService.java b/src/com/android/browser/widget/BookmarkListWidgetService.java
index 8cf63a3..30671fc 100644
--- a/src/com/android/browser/widget/BookmarkListWidgetService.java
+++ b/src/com/android/browser/widget/BookmarkListWidgetService.java
@@ -64,8 +64,14 @@
             BrowserContract.Bookmarks.URL,
             BrowserContract.Bookmarks.FAVICON,
             BrowserContract.Bookmarks.IS_FOLDER,
-            BrowserContract.Bookmarks.PARENT,
-            BrowserContract.Bookmarks.POSITION};
+            BrowserContract.Bookmarks.TOUCH_ICON,
+            BrowserContract.Bookmarks.POSITION /* needed for order by */};
+    private static final int BOOKMARK_INDEX_ID = 0;
+    private static final int BOOKMARK_INDEX_TITLE = 1;
+    private static final int BOOKMARK_INDEX_URL = 2;
+    private static final int BOOKMARK_INDEX_FAVICON = 3;
+    private static final int BOOKMARK_INDEX_IS_FOLDER = 4;
+    private static final int BOOKMARK_INDEX_TOUCH_ICON = 5;
 
     private Map<Integer, BookmarkFactory> mFactories;
     private Handler mUiHandler;
@@ -350,19 +356,24 @@
                         bookmarks.add(res);
                     }
                     while (c.moveToNext()) {
-                        long id = c.getLong(0);
-                        String title = c.getString(1);
-                        String url = c.getString(2);
+                        long id = c.getLong(BOOKMARK_INDEX_ID);
+                        String title = c.getString(BOOKMARK_INDEX_TITLE);
+                        String url = c.getString(BOOKMARK_INDEX_URL);
                         RenderResult res = new RenderResult(id, title, url);
-                        byte[] blob = c.getBlob(3);
-                        if (blob != null) {
-                            // RemoteViews require a valid bitmap config
-                            Options options = new Options();
-                            options.inPreferredConfig = Config.ARGB_8888;
-                            res.mBitmap = BitmapFactory.decodeByteArray(
-                                    blob, 0, blob.length, options);
+                        res.mIsFolder = c.getInt(BOOKMARK_INDEX_IS_FOLDER) != 0;
+                        if (!res.mIsFolder) {
+                            byte[] blob = c.getBlob(BOOKMARK_INDEX_TOUCH_ICON);
+                            if (blob == null || blob.length == 0) {
+                                blob = c.getBlob(BOOKMARK_INDEX_FAVICON);
+                            }
+                            if (blob != null) {
+                                // RemoteViews require a valid bitmap config
+                                Options options = new Options();
+                                options.inPreferredConfig = Config.ARGB_8888;
+                                res.mBitmap = BitmapFactory.decodeByteArray(
+                                        blob, 0, blob.length, options);
+                            }
                         }
-                        res.mIsFolder = c.getInt(4) != 0;
                         bookmarks.add(res);
                     }
                     return bookmarks;