add tabs to QuickControls

    Bug: 4084343
    The final act in a 3 act drama.
    Adds tab thumbnails to QuickControls menu and
    removes the tab bar.

Change-Id: Id667e8020745c3d77920858fcd9dd7f510973dd9
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
index 302cbc0..5e95684 100644
--- a/src/com/android/browser/PieControl.java
+++ b/src/com/android/browser/PieControl.java
@@ -19,9 +19,15 @@
 import com.android.browser.view.PieItem;
 import com.android.browser.view.PieListView;
 import com.android.browser.view.PieMenu;
+import com.android.browser.view.PieMenu.PieView.OnLayoutListener;
+import com.android.browser.view.PieStackView;
+import com.android.browser.view.PieStackView.OnCurrentListener;
 
 import android.app.Activity;
 import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.os.Handler;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -33,6 +39,7 @@
 import android.widget.BaseAdapter;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
 import android.widget.TextView;
 
 import java.util.ArrayList;
@@ -56,6 +63,8 @@
     private PieItem mNewTab;
     private PieItem mClose;
     private MenuAdapter mMenuAdapter;
+    private PieItem mShowTabs;
+    private TabAdapter mTabAdapter;
 
     public PieControl(Activity activity, UiController controller, XLargeUi ui) {
         mActivity = activity;
@@ -76,13 +85,32 @@
             mForward = makeItem(R.drawable.ic_forward_holo_dark, 2);
             mNewTab = makeItem(R.drawable.ic_new_window_holo_dark, 2);
             mClose = makeItem(R.drawable.ic_close_window_holo_dark, 2);
+            mShowTabs = makeItem(R.drawable.ic_windows_holo_dark, 2);
             mOptions = makeItem(
                     com.android.internal.R.drawable.ic_menu_moreoverflow_normal_holo_dark,
                     2);
             mMenuAdapter = new MenuAdapter(mActivity, mUiController);
-            PieMenuView menusym = new PieMenuView(mActivity);
-            mOptions.setPieView(menusym);
-            menusym.setAdapter(mMenuAdapter);
+            mTabAdapter = new TabAdapter(mActivity, mUiController);
+            PieStackView stack = new PieStackView(mActivity);
+            stack.setLayoutListener(new OnLayoutListener() {
+                @Override
+                public void onLayout(int ax, int ay, boolean left) {
+                    buildTabs();
+                }
+            });
+            stack.setOnCurrentListener(mTabAdapter);
+            stack.setAdapter(mTabAdapter);
+            mShowTabs.setPieView(stack);
+            PieListView menuview = new PieListView(mActivity);
+            menuview.setLayoutListener(new OnLayoutListener() {
+                @Override
+                public void onLayout(int ax, int ay, boolean left) {
+                    mActivity.openOptionsMenu();
+                }
+            });
+
+            mOptions.setPieView(menuview);
+            menuview.setAdapter(mMenuAdapter);
             setClickListener(mBack,
                     mRefresh,
                     mForward,
@@ -98,6 +126,7 @@
             // level 2
             mPie.addItem(mForward);
             mPie.addItem(mRefresh);
+            mPie.addItem(mShowTabs);
             mPie.addItem(mNewTab);
             mPie.addItem(mClose);
             mPie.addItem(mOptions);
@@ -106,6 +135,15 @@
         container.addView(mPie);
     }
 
+    private void buildTabs() {
+        final List<Tab> tabs = mUiController.getTabs();
+        mUi.captureTab(mUi.getActiveTab());
+        mTabAdapter.setTabs(tabs);
+        PieStackView sym = (PieStackView) mShowTabs.getPieView();
+        sym.setCurrent(mUiController.getTabControl().getCurrentIndex());
+
+    }
+
     protected void onMenuOpened(Menu menu) {
         mMenuAdapter.setMenu(menu);
     }
@@ -169,19 +207,72 @@
         return false;
     }
 
-    private class PieMenuView extends PieListView {
+    private static class TabAdapter extends BaseAdapter implements OnCurrentListener {
 
-        /**
-         * @param ctx
-         */
-        public PieMenuView(Context ctx) {
-            super(ctx);
+        LayoutInflater mInflater;
+        UiController mUiController;
+        private List<Tab> mTabs;
+        private int mCurrent;
+
+        public TabAdapter(Context ctx, UiController ctl) {
+            mInflater = LayoutInflater.from(ctx);
+            mUiController = ctl;
+            mTabs = new ArrayList<Tab>();
+            mCurrent = -1;
+        }
+
+        public void setTabs(List<Tab> tabs) {
+            mTabs = tabs;
+            notifyDataSetChanged();
         }
 
         @Override
-        public void layout(int anchorX, int anchorY, boolean left) {
-            mActivity.openOptionsMenu();
-            super.layout(anchorX, anchorY, left);
+        public int getCount() {
+            return mTabs.size();
+        }
+
+        @Override
+        public Tab getItem(int position) {
+            return mTabs.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final Tab tab = mTabs.get(position);
+            View view = mInflater.inflate(R.layout.qc_tab,
+                    null);
+            ImageView thumb = (ImageView) view.findViewById(R.id.thumb);
+            TextView title1 = (TextView) view.findViewById(R.id.title1);
+            TextView title2 = (TextView) view.findViewById(R.id.title2);
+            Bitmap b = tab.getScreenshot();
+            if (b != null) {
+                thumb.setImageBitmap(b);
+            }
+            if (position > mCurrent) {
+                title1.setVisibility(View.GONE);
+                title2.setText(tab.getTitle());
+            } else {
+                title2.setVisibility(View.GONE);
+                title1.setText(tab.getTitle());
+            }
+            view.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    mUiController.switchToTab(mUiController.getTabControl()
+                            .getTabIndex(tab));
+                }
+            });
+            return view;
+        }
+
+        @Override
+        public void onSetCurrent(int index) {
+            mCurrent = index;
         }
 
     }