add qc to phone ui

    No progress bar in qc yet
    will be added later

Change-Id: Id87066aec97b2823cdf28da9a4d10e77475b1d1a
diff --git a/res/menu/browser.xml b/res/menu/browser.xml
index abe3716..d9e884b 100644
--- a/res/menu/browser.xml
+++ b/res/menu/browser.xml
@@ -15,55 +15,73 @@
 -->
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <group android:id="@+id/MAIN_MENU">
-        <item android:id="@+id/new_tab_menu_id"
-            android:title="@string/new_tab"
-            android:icon="@drawable/ic_menu_new_window"
-            android:alphabeticShortcut="n" />
-        <item android:id="@+id/bookmarks_menu_id"
-            android:title="@string/bookmarks"
-            android:alphabeticShortcut="b"
-            android:icon="@drawable/ic_bookmarks_holo_dark" />
-        <item android:id="@+id/active_tabs_menu_id"
-            android:title="@string/active_tabs"
-            android:icon="@drawable/ic_windows_holo_dark"
-            android:alphabeticShortcut="t" />
-        <item android:id="@+id/stop_reload_menu_id"
-            android:alphabeticShortcut="r" />
-        <item android:id="@+id/forward_menu_id"
-            android:title="@string/forward"
-            android:icon="@*android:drawable/ic_menu_forward" />
-        <item android:id="@+id/add_bookmark_menu_id"
+    <group
+        android:id="@+id/MAIN_MENU">
+        <group
+            android:id="@+id/NAV_MENU">
+            <item
+                android:id="@+id/new_tab_menu_id"
+                android:title="@string/new_tab"
+                android:icon="@drawable/ic_menu_new_window"
+                android:alphabeticShortcut="n" />
+            <item
+                android:id="@+id/bookmarks_menu_id"
+                android:title="@string/bookmarks"
+                android:alphabeticShortcut="b"
+                android:icon="@drawable/ic_bookmarks_holo_dark" />
+            <item
+                android:id="@+id/active_tabs_menu_id"
+                android:title="@string/active_tabs"
+                android:icon="@drawable/ic_windows_holo_dark"
+                android:alphabeticShortcut="t" />
+            <item
+                android:id="@+id/stop_reload_menu_id"
+                android:alphabeticShortcut="r" />
+            <item
+                android:id="@+id/forward_menu_id"
+                android:title="@string/forward"
+                android:icon="@*android:drawable/ic_menu_forward" />
+        </group>
+        <item
+            android:id="@+id/add_bookmark_menu_id"
             android:title="@string/save_to_bookmarks"
             android:icon="@drawable/ic_bookmark_on_holo_dark"
             android:alphabeticShortcut="d" />
-        <item android:id="@+id/find_menu_id"
+        <item
+            android:id="@+id/find_menu_id"
             android:title="@*android:string/find_on_page"
             android:icon="@*android:drawable/ic_menu_find"
             android:alphabeticShortcut="f" />
-        <item android:id="@+id/share_page_menu_id"
+        <item
+            android:id="@+id/share_page_menu_id"
             android:title="@string/share_page"
             android:icon="@drawable/ic_share_holo_dark"
             android:alphabeticShortcut="s" />
-        <item android:id="@+id/save_webarchive_menu_id"
+        <item
+            android:id="@+id/save_webarchive_menu_id"
             android:title="@string/menu_save_webarchive" />
-        <item android:id="@+id/page_info_menu_id"
+        <item
+            android:id="@+id/page_info_menu_id"
             android:title="@string/page_info"
             android:icon="@drawable/ic_pageinfo_holo_dark"
             android:alphabeticShortcut="g" />
-        <item android:id="@+id/view_downloads_menu_id"
+        <item
+            android:id="@+id/view_downloads_menu_id"
             android:title="@string/menu_view_download"
             android:icon="@drawable/ic_downloads_holo_dark"
             android:alphabeticShortcut="j" />
-        <item android:id="@+id/preferences_menu_id"
+        <item
+            android:id="@+id/preferences_menu_id"
             android:title="@string/menu_preferences"
             android:icon="@drawable/ic_settings_holo_dark"
             android:alphabeticShortcut="p" />
         <!-- followings are debug only -->
-        <item android:id="@+id/dump_nav_menu_id"
+        <item
+            android:id="@+id/dump_nav_menu_id"
             android:title="@string/dump_nav"
             android:visible="false" />
-        <item android:id="@+id/dump_counters_menu_id"
+        <item
+            android:id="@+id/dump_counters_menu_id"
             android:title="@string/dump_counters"
             android:visible="false" />
     </group>
diff --git a/res/values-xlarge/dimensions.xml b/res/values-xlarge/dimensions.xml
index 2549818..eae9b0e 100644
--- a/res/values-xlarge/dimensions.xml
+++ b/res/values-xlarge/dimensions.xml
@@ -27,4 +27,12 @@
     <dimen name="combo_paddingTop">50dip</dimen>
     <dimen name="combo_paddingLeftRight">134dip</dimen>
     <dimen name="combo_horizontalSpacing">20dip</dimen>
+    <dimen name="qc_radius_start">50dip</dimen>
+    <dimen name="qc_radius_increment">70dip</dimen>
+    <dimen name="qc_slop">15dip</dimen>
+    <dimen name="qc_touch_offset">15dip</dimen>
+    <dimen name="qc_tab_title_height">30dip</dimen>
+    <dimen name="qc_thumb_width">240dip</dimen>
+    <dimen name="qc_thumb_height">160dip</dimen>
+    <dimen name="qc_item_size">48dip</dimen>
 </resources>
diff --git a/res/values/dimensions.xml b/res/values/dimensions.xml
index 2f1a91e..38a7802 100644
--- a/res/values/dimensions.xml
+++ b/res/values/dimensions.xml
@@ -30,14 +30,14 @@
     <dimen name="widgetItemMinHeight">48dip</dimen>
     <dimen name="favicon_size">16dip</dimen>
     <dimen name="favicon_padded_size">20dip</dimen>
-    <dimen name="qc_radius_start">50dip</dimen>
-    <dimen name="qc_radius_increment">70dip</dimen>
-    <dimen name="qc_slop">15dip</dimen>
+    <dimen name="qc_radius_start">30dip</dimen>
+    <dimen name="qc_radius_increment">60dip</dimen>
+    <dimen name="qc_slop">10dip</dimen>
     <dimen name="qc_touch_offset">15dip</dimen>
     <dimen name="qc_tab_title_height">30dip</dimen>
-    <dimen name="qc_thumb_width">240dip</dimen>
-    <dimen name="qc_thumb_height">160dip</dimen>
-    <dimen name="qc_item_size">48dip</dimen>
+    <dimen name="qc_thumb_width">160dip</dimen>
+    <dimen name="qc_thumb_height">120dip</dimen>
+    <dimen name="qc_item_size">40dip</dimen>
     <dimen name="bookmark_widget_thumb_size">32dip</dimen>
     <dimen name="bookmark_widget_favicon_size">26dip</dimen>
     <!-- For the most visited page (we use px as these are adjusted by the browser) -->
diff --git a/res/xml/lab_preferences.xml b/res/xml/lab_preferences.xml
index 3a384f1..b33052f 100644
--- a/res/xml/lab_preferences.xml
+++ b/res/xml/lab_preferences.xml
@@ -17,6 +17,11 @@
 <PreferenceScreen
         xmlns:android="http://schemas.android.com/apk/res/android" >
     <CheckBoxPreference
+        android:key="enable_quick_controls"
+        android:defaultValue="false"
+        android:title="@string/pref_lab_quick_controls"
+        android:summary="@string/pref_lab_quick_controls_summary" />
+    <CheckBoxPreference
         android:key="use_most_visited_homepage"
         android:defaultValue="false"
         android:title="@string/pref_lab_most_visited_homepage"
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index c3549b3..c00e6fc 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -17,10 +17,7 @@
 package com.android.browser;
 
 import com.android.browser.Tab.LockIcon;
-import com.android.browser.UI.DropdownChangeListener;
 
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
 import android.animation.ObjectAnimator;
 import android.app.Activity;
 import android.content.pm.PackageManager;
@@ -42,7 +39,6 @@
 import android.view.WindowManager;
 import android.view.inputmethod.InputMethodManager;
 import android.webkit.WebChromeClient;
-import android.webkit.WebSettings.ZoomDensity;
 import android.webkit.WebView;
 import android.widget.FrameLayout;
 import android.widget.ImageButton;
@@ -748,4 +744,23 @@
         warning.show();
     }
 
+    protected void captureTab(final Tab tab) {
+        captureTab(tab,
+                (int) mActivity.getResources()
+                        .getDimension(R.dimen.qc_thumb_width),
+                (int) mActivity.getResources()
+                        .getDimension(R.dimen.qc_thumb_height));
+    }
+
+    protected void captureTab(final Tab tab, int width, int height) {
+        if ((tab == null) || (tab.getWebView() == null)) return;
+        Bitmap sshot = Controller.createScreenshot(tab, width, height);
+        tab.setScreenshot(sshot);
+    }
+
+    void showTitleBarAndEdit() {
+        showTitleBar();
+        getTitleBar().startEditingUrl(false);
+    }
+
 }
diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java
index efd6c43..9cc5a2f 100644
--- a/src/com/android/browser/PhoneUi.java
+++ b/src/com/android/browser/PhoneUi.java
@@ -18,12 +18,10 @@
 
 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;
@@ -31,6 +29,7 @@
 import android.view.View;
 import android.view.WindowManager;
 import android.webkit.WebView;
+import android.widget.FrameLayout;
 
 /**
  * Ui for regular phone screen sizes
@@ -42,6 +41,8 @@
     private TitleBarPhone mTitleBar;
     private ActiveTabsPage mActiveTabsPage;
     private TouchProxy mTitleOverlay;
+    private boolean mUseQuickControls;
+    private PieControl mPieControl;
 
     boolean mExtendedMenuOpen;
     boolean mOptionsMenuOpen;
@@ -57,6 +58,7 @@
         // phone
         mTitleBar.setProgress(100);
         mActivity.getActionBar().hide();
+        setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
     }
 
     @Override
@@ -102,6 +104,7 @@
 
     @Override
     public void onProgressChanged(Tab tab) {
+        if (mUseQuickControls) return;
         if (tab.inForeground()) {
             int progress = tab.getLoadProgress();
             mTitleBar.setProgress(progress);
@@ -118,42 +121,48 @@
     }
 
     @Override
-    public void setActiveTab(Tab tab) {
+    public void setActiveTab(final Tab tab) {
         captureTab(mActiveTab);
-        super.setActiveTab(tab);
-        WebView view = tab.getWebView();
+        super.setActiveTab(tab, true);
+        setActiveTab(tab, true);
+    }
+
+    @Override
+    void setActiveTab(Tab tab, boolean needsAttaching) {
+        BrowserWebView view = (BrowserWebView) tab.getWebView();
         // TabControl.setCurrentTab has been called before this,
         // so the tab is guaranteed to have a webview
         if (view == null) {
             Log.e(LOGTAG, "active tab with no webview detected");
             return;
         }
-        view.setEmbeddedTitleBar(getTitleBar());
+        // Request focus on the top window.
+        if (mUseQuickControls) {
+            mPieControl.forceToTop(mContentView);
+            view.setScrollListener(null);
+        } else {
+            // check if title bar is already attached by animation
+            if (mTitleBar.getParent() == null) {
+                view.setEmbeddedTitleBar(mTitleBar);
+            }
+        }
         if (tab.isInVoiceSearchMode()) {
-            showVoiceTitleBar(tab.getVoiceDisplayTitle(),
-                    tab.getVoiceSearchResults());
+            showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults());
         } else {
             revertVoiceTitleBar(tab);
         }
+        updateLockIconToLatest(tab);
         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()) {
-            setTitleGravity(Gravity.TOP);
+            if (mUseQuickControls) {
+                mContentView.addView(mTitleBar);
+            } else {
+                setTitleGravity(Gravity.TOP);
+            }
             super.showTitleBar();
         }
     }
@@ -161,7 +170,11 @@
     @Override
     protected void hideTitleBar() {
         if (isTitleBarShowing()) {
-            setTitleGravity(Gravity.NO_GRAVITY);
+            if (mUseQuickControls) {
+                mContentView.removeView(mTitleBar);
+            } else {
+                setTitleGravity(Gravity.NO_GRAVITY);
+            }
             super.hideTitleBar();
         }
     }
@@ -233,7 +246,9 @@
     @Override
     public void onExtendedMenuClosed(boolean inLoad) {
         mExtendedMenuOpen = false;
-        showTitleBar();
+        if (!mUseQuickControls) {
+            showTitleBar();
+        }
     }
 
     @Override
@@ -300,4 +315,62 @@
         }
     }
 
+    @Override
+    protected void setTitleGravity(int gravity) {
+        if (mUseQuickControls) {
+            FrameLayout.LayoutParams lp =
+                    (FrameLayout.LayoutParams) getTitleBar().getLayoutParams();
+            lp.gravity = gravity;
+            getTitleBar().setLayoutParams(lp);
+        } else {
+            super.setTitleGravity(gravity);
+        }
+    }
+
+    private void setUseQuickControls(boolean useQuickControls) {
+        mUseQuickControls = useQuickControls;
+        getTitleBar().setUseQuickControls(mUseQuickControls);
+        if (useQuickControls) {
+//            checkTabCount();
+            mPieControl = new PieControl(mActivity, mUiController, this);
+            mPieControl.attachToContainer(mContentView);
+            Tab tab = getActiveTab();
+            if ((tab != null) && (tab.getWebView() != null)) {
+                tab.getWebView().setEmbeddedTitleBar(null);
+            }
+        } else {
+            mActivity.getActionBar().show();
+            if (mPieControl != null) {
+                mPieControl.removeFromContainer(mContentView);
+            }
+            WebView web = mTabControl.getCurrentWebView();
+            if (web != null) {
+                web.setEmbeddedTitleBar(mTitleBar);
+            }
+            setTitleGravity(Gravity.NO_GRAVITY);
+        }
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        if (mUseQuickControls) {
+            menu.setGroupVisible(R.id.NAV_MENU, false);
+            mPieControl.onMenuOpened(menu);
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    @Override
+    protected void captureTab(final Tab tab) {
+        if (mUseQuickControls) {
+            super.captureTab(tab);
+        } else {
+            captureTab(tab,
+                    mActivity.getWindowManager().getDefaultDisplay().getWidth(),
+                    (int) mActivity.getResources()
+                            .getDimension(R.dimen.tab_view_thumbnail_height));
+        }
+    }
 }
diff --git a/src/com/android/browser/PieControl.java b/src/com/android/browser/PieControl.java
index 38ed1bb..82e26c4 100644
--- a/src/com/android/browser/PieControl.java
+++ b/src/com/android/browser/PieControl.java
@@ -50,7 +50,7 @@
 
     private Activity mActivity;
     private UiController mUiController;
-    private XLargeUi mUi;
+    private BaseUi mUi;
     private PieMenu mPie;
     private PieItem mBack;
     private PieItem mForward;
@@ -66,7 +66,7 @@
     private TextView mTabsCount;
     private int mItemSize;
 
-    public PieControl(Activity activity, UiController controller, XLargeUi ui) {
+    public PieControl(Activity activity, UiController controller, BaseUi ui) {
         mActivity = activity;
         mUiController = controller;
         mUi = ui;
diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java
index 7e8ea1a..d34d18d 100644
--- a/src/com/android/browser/TitleBarBase.java
+++ b/src/com/android/browser/TitleBarBase.java
@@ -84,7 +84,7 @@
     protected ImageButton mAutoLoginCancel;
     protected DeviceAccountLogin mAutoLoginHandler;
     protected ArrayAdapter<String> mAccountsAdapter;
-
+    protected boolean mUseQuickControls;
 
     public TitleBarBase(Context context, UiController controller, BaseUi ui) {
         super(context, null);
@@ -118,6 +118,10 @@
     protected void setupUrlInput() {
     }
 
+    protected void setUseQuickControls(boolean use) {
+        mUseQuickControls = use;
+    }
+
     /* package */ void setProgress(int newProgress) {}
 
     /* package */ void setLock(Drawable d) {
@@ -429,4 +433,10 @@
         mUrlInput.registerDropdownChangeListener(d);
     }
 
+    /**
+     * called from the Ui when the user wants to edit
+     * @param clearInput clear the input field
+     */
+    void startEditingUrl(boolean clearInput) {};
+
 }
diff --git a/src/com/android/browser/TitleBarPhone.java b/src/com/android/browser/TitleBarPhone.java
index bcf8d53..d6b5f4d 100644
--- a/src/com/android/browser/TitleBarPhone.java
+++ b/src/com/android/browser/TitleBarPhone.java
@@ -26,7 +26,11 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
+import android.view.ViewGroup;
+import android.widget.AbsoluteLayout;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
+import android.widget.RelativeLayout.LayoutParams;
 
 import java.util.List;
 
@@ -148,6 +152,9 @@
             }
         }
         super.onFocusChange(v, hasFocus);
+        if (mUseQuickControls && !hasFocus) {
+            mBaseUi.hideTitleBar();
+        }
     }
 
     @Override
@@ -161,4 +168,47 @@
         }
     }
 
+    @Override
+    void startEditingUrl(boolean clearInput) {
+        // editing takes preference of progress
+        mContainer.setVisibility(View.VISIBLE);
+        if (!mUrlInput.hasFocus()) {
+            mUrlInput.requestFocus();
+        }
+        if (clearInput) {
+            mUrlInput.setText("");
+        } else if (mInVoiceMode) {
+            mUrlInput.showDropDown();
+        }
+    }
+
+    @Override
+    void setTitleGravity(int gravity) {
+        if (mUseQuickControls) {
+            FrameLayout.LayoutParams lp =
+                    (FrameLayout.LayoutParams) getLayoutParams();
+            lp.gravity = gravity;
+            setLayoutParams(lp);
+        } else {
+            super.setTitleGravity(gravity);
+        }
+    }
+
+    @Override
+    protected void setUseQuickControls(boolean useQuickControls) {
+        mUseQuickControls = useQuickControls;
+        setLayoutParams(makeLayoutParams());
+    }
+
+    private ViewGroup.LayoutParams makeLayoutParams() {
+        if (mUseQuickControls) {
+            return new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+                    LayoutParams.WRAP_CONTENT);
+        } else {
+            return new AbsoluteLayout.LayoutParams(
+                    LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
+                    0, 0);
+        }
+    }
+
 }
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index db36fc0..7a8d984 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -65,7 +65,6 @@
     private Drawable mUnfocusDrawable;
 
     private boolean mInLoad;
-    private boolean mUseQuickControls;
 
     public TitleBarXLarge(Activity activity, UiController controller,
             XLargeUi ui) {
@@ -159,7 +158,8 @@
         return height;
     }
 
-    void setUseQuickControls(boolean useQuickControls) {
+    @Override
+    protected void setUseQuickControls(boolean useQuickControls) {
         mUseQuickControls = useQuickControls;
         setLayoutParams(makeLayoutParams());
     }
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index c763bb0..7e78f0d 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -23,7 +23,6 @@
 import android.animation.ObjectAnimator;
 import android.app.ActionBar;
 import android.app.Activity;
-import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.os.Handler;
 import android.util.Log;
@@ -256,14 +255,6 @@
         tab.getTopWindow().requestFocus();
     }
 
-    public void captureTab(final Tab tab) {
-        Bitmap sshot = Controller.createScreenshot(tab,
-                (int) mActivity.getResources()
-                        .getDimension(R.dimen.qc_thumb_width),
-                (int) mActivity.getResources()
-                        .getDimension(R.dimen.qc_thumb_height));
-        tab.setScreenshot(sshot);
-    }
 
     @Override
     public void updateTabs(List<Tab> tabs) {