use thumbnails in tab switcher

Change-Id: I0c7bda38c4c12448822f575f6fe0670f87b3eb7b
diff --git a/res/layout/tab_view.xml b/res/layout/tab_view.xml
index 5426f61..8ffb73d 100644
--- a/res/layout/tab_view.xml
+++ b/res/layout/tab_view.xml
@@ -21,37 +21,50 @@
     android:orientation="horizontal"
     android:gravity="center_vertical"
     android:paddingLeft="8dip"
+    android:paddingTop="4dip"
+    android:paddingBottom="4dip"
     >
-    <ImageView android:id="@+id/favicon"
-        android:layout_height="32dip"
-        android:layout_width="32dip"
-        android:layout_gravity="center_vertical"
-        android:background="@drawable/bookmark_list_favicon_bg"
-        android:scaleType="fitXY" />
-    <LinearLayout
+    <RelativeLayout
+        android:id="@+id/list_item"
         android:layout_width="0dip"
-        android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:orientation="vertical"
-        android:paddingLeft="8dip"
-        >
-        <TextView android:id="@+id/title"
+        android:layout_height="wrap_content"
+        android:background="@drawable/bookmark_list_favicon_bg">
+        <ImageView
+            android:id="@+id/thumb"
+            android:src="@drawable/thumbnail_bookmarks_widget_no_bookmark_holo"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/tab_view_thumbnail_height"
+            android:scaleType="fitXY"
+            android:cropToPadding="true" />
+        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:maxLines="1"
-            android:singleLine="true"
-            android:ellipsize="end"
-            />
-        <TextView android:id="@+id/url"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:maxLines="1"
-            android:singleLine="true"
-            android:ellipsize="end"
-            />
-    </LinearLayout>
+            android:layout_alignBottom="@id/thumb"
+            android:background="@color/tabViewTitleBackground">
+            <ImageView
+                android:id="@+id/favicon"
+                android:src="@drawable/app_web_browser_sm"
+                android:layout_width="@dimen/favicon_size"
+                android:layout_height="@dimen/favicon_size"
+                android:layout_gravity="center_vertical"
+                android:layout_marginLeft="4dip"
+                android:layout_marginRight="8dip"
+                android:layout_marginTop="4dip"
+                android:layout_marginBottom="4dip"
+                android:scaleType="fitXY" />
+            <TextView
+                android:id="@+id/label"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:textSize="12sp"
+                android:typeface="sans"
+                android:textColor="@android:color/white" />
+        </LinearLayout>
+    </RelativeLayout>
     <View android:id="@+id/divider"
         android:background="?android:attr/dividerVertical"
         android:layout_width="1dp"
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 6a7c578..15a5c87 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -36,4 +36,5 @@
     <color name="qcMenuBackground">#C0000000</color>
     <color name="qc_normal">#C02447B2</color>
     <color name="qc_selected">#D0102052</color>
+    <color name="tabViewTitleBackground">#D0000000</color>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index b695120..f1e7fb3 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -57,4 +57,5 @@
     <dimen name="combo_paddingTop">10dip</dimen>
     <dimen name="combo_paddingLeftRight">8dip</dimen>
     <dimen name="combo_horizontalSpacing">6dip</dimen>
+    <dimen name="tab_view_thumbnail_height">76dip</dimen>
 </resources>
diff --git a/src/com/android/browser/ActiveTabsPage.java b/src/com/android/browser/ActiveTabsPage.java
index 5e27eab..52d943f 100644
--- a/src/com/android/browser/ActiveTabsPage.java
+++ b/src/com/android/browser/ActiveTabsPage.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.graphics.Bitmap;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -141,23 +142,30 @@
                 view = mInflater.inflate(R.layout.tab_view, parent, false);
             }
             ImageView favicon = (ImageView) view.findViewById(R.id.favicon);
-            TextView title = (TextView) view.findViewById(R.id.title);
-            TextView url = (TextView) view.findViewById(R.id.url);
+            ImageView thumbnail = (ImageView) view.findViewById(R.id.thumb);
+            TextView title = (TextView) view.findViewById(R.id.label);
             Tab tab = getItem(position);
 
-            title.setText(tab.getTitle());
-            url.setText(tab.getUrl());
+            String label = tab.getTitle();
+            if (TextUtils.isEmpty(label)) {
+                label = tab.getUrl();
+            }
+            title.setText(label);
+            Bitmap thumbnailBitmap = tab.getScreenshot();
+            if (thumbnailBitmap == null) {
+                thumbnail.setImageResource(R.drawable.browser_thumbnail);
+            } else {
+                thumbnail.setImageBitmap(thumbnailBitmap);
+            }
             Bitmap faviconBitmap = tab.getFavicon();
             if (tab.isPrivateBrowsingEnabled()) {
                 favicon.setImageResource(R.drawable.ic_incognito_holo_dark);
-                favicon.setBackgroundDrawable(null);
             } else {
                 if (faviconBitmap == null) {
                     favicon.setImageResource(R.drawable.app_web_browser_sm);
                 } else {
                     favicon.setImageBitmap(faviconBitmap);
                 }
-                favicon.setBackgroundResource(R.drawable.bookmark_list_favicon_bg);
             }
             View close = view.findViewById(R.id.close);
             close.setTag(position);
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index dd68e85..9c3c912 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -18,10 +18,12 @@
 
 import android.app.Activity;
 import android.content.Context;
+import android.graphics.Bitmap;
 import android.graphics.PixelFormat;
 import android.os.Handler;
 import android.util.Log;
 import android.view.ActionMode;
+import android.view.Display;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.Menu;
@@ -117,6 +119,7 @@
 
     @Override
     public void setActiveTab(Tab tab) {
+        captureTab(mActiveTab);
         super.setActiveTab(tab);
         WebView view = tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
@@ -134,6 +137,18 @@
         tab.getTopWindow().requestFocus();
     }
 
+    public void captureTab(final Tab tab) {
+        if (tab == null) return;
+        if (tab.getWebView() == null) return;
+
+        Display display = mActivity.getWindowManager().getDefaultDisplay();
+        float height = mActivity.getResources()
+                .getDimension(R.dimen.tab_view_thumbnail_height);
+        Bitmap sshot = Controller.createScreenshot(tab,
+                display.getWidth(), (int) height);
+        tab.setScreenshot(sshot);
+    }
+
     @Override
     protected void showTitleBar() {
         if (canShowTitleBar()) {
@@ -159,6 +174,7 @@
 
     @Override
     public void showActiveTabsPage() {
+        captureTab(mActiveTab);
         mActiveTabsPage = new ActiveTabsPage(mActivity, mUiController);
         mTitleBar.setVisibility(View.GONE);
         hideTitleBar();