Add quick controls
Bug: http://b/issue?id=3277888
Added Quick Controls Lab setting
Implemented Quick Controls UI
Change-Id: I72011daf9140aa5d15c8b785126867c10bbc5501
diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java
index 69e6724..7f9baa7 100644
--- a/src/com/android/browser/XLargeUi.java
+++ b/src/com/android/browser/XLargeUi.java
@@ -21,8 +21,12 @@
import android.app.ActionBar;
import android.app.Activity;
import android.graphics.Bitmap;
+import android.util.Log;
import android.view.ActionMode;
+import android.view.Gravity;
import android.webkit.WebView;
+import android.widget.FrameLayout;
+import android.widget.FrameLayout.LayoutParams;
import java.util.List;
@@ -33,11 +37,15 @@
private static final String LOGTAG = "XLargeUi";
+ private ActionBar mActionBar;
private TabBar mTabBar;
private TitleBarXLarge mTitleBar;
private TitleBarXLarge mFakeTitleBar;
+ private boolean mUseQuickControls;
+ private PieControl mPieControl;
+
/**
* @param browser
* @param controller
@@ -49,10 +57,51 @@
mTitleBar.setEditable(false);
mFakeTitleBar = new TitleBarXLarge(mActivity, mUiController, this);
mFakeTitleBar.setEditable(true);
- ActionBar actionBar = mActivity.getActionBar();
mTabBar = new TabBar(mActivity, mUiController, this);
- actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
- actionBar.setCustomView(mTabBar);
+ mActionBar = mActivity.getActionBar();
+ mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+ mActionBar.setCustomView(mTabBar);
+ setUseQuickControls(BrowserSettings.getInstance().useQuickControls());
+ }
+
+ private void setUseQuickControls(boolean useQuickControls) {
+ mUseQuickControls = useQuickControls;
+ if (useQuickControls) {
+ checkTabCount();
+ mPieControl = new PieControl(mActivity, mUiController, this);
+ mPieControl.attachToContainer(mContentView);
+ setFakeTitleBarGravity(Gravity.BOTTOM);
+
+ // remove embedded title bar if present
+ WebView web = mTabControl.getCurrentWebView();
+ if ((web != null) && (web.getVisibleTitleHeight() > 0)) {
+ web.setEmbeddedTitleBar(null);
+ }
+ } else {
+ mActivity.getActionBar().show();
+ if (mPieControl != null) {
+ mPieControl.removeFromContainer(mContentView);
+ }
+ setFakeTitleBarGravity(Gravity.TOP);
+ // remove embedded title bar if present
+ WebView web = mTabControl.getCurrentWebView();
+ if ((web != null) && (web.getVisibleTitleHeight() == 0)) {
+ web.setEmbeddedTitleBar(mTitleBar);
+ }
+ }
+ mTabBar.setUseQuickControls(mUseQuickControls);
+ mFakeTitleBar.setUseQuickControls(mUseQuickControls);
+ }
+
+ private void checkTabCount() {
+ if (mUseQuickControls) {
+ int n = mTabBar.getTabCount();
+ if (n >= 2) {
+ mActivity.getActionBar().show();
+ } else if (n == 1) {
+ mActivity.getActionBar().hide();
+ }
+ }
}
@Override
@@ -114,6 +163,9 @@
public void onPageFinished(Tab tab, String url) {
mTabBar.onPageFinished(tab);
super.onPageFinished(tab, url);
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(false);
+ }
}
@Override
@@ -123,7 +175,17 @@
mFakeTitleBar.setProgress(progress);
if (progress == 100) {
hideFakeTitleBar();
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(false);
+ setFakeTitleBarGravity(Gravity.BOTTOM);
+ }
} else {
+ if (mUseQuickControls) {
+ mFakeTitleBar.setShowProgressOnly(true);
+ if (!isFakeTitleBarShowing()) {
+ setFakeTitleBarGravity(Gravity.TOP);
+ }
+ }
showFakeTitleBar();
}
}
@@ -137,28 +199,55 @@
@Override
public void addTab(Tab tab) {
mTabBar.onNewTab(tab);
+ checkTabCount();
}
@Override
public void setActiveTab(Tab tab) {
super.setActiveTab(tab);
+ ScrollWebView view = (ScrollWebView) 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;
+ }
+ // Request focus on the top window.
+ if (mUseQuickControls) {
+ mPieControl.forceToTop(mContentView);
+ view.setScrollListener(null);
+ mTabBar.showTitleBarIndicator(false);
+ } else {
+ view.setEmbeddedTitleBar(mTitleBar);
+ view.setScrollListener(this);
+ }
mTabBar.onSetActiveTab(tab);
+ if (tab.isInVoiceSearchMode()) {
+ showVoiceTitleBar(tab.getVoiceDisplayTitle());
+ } else {
+ revertVoiceTitleBar(tab);
+ }
+ resetTitleIconAndProgress(tab);
+ updateLockIconToLatest(tab);
+ tab.getTopWindow().requestFocus();
}
@Override
public void updateTabs(List<Tab> tabs) {
mTabBar.updateTabs(tabs);
+ checkTabCount();
}
@Override
public void removeTab(Tab tab) {
super.removeTab(tab);
mTabBar.onRemoveTab(tab);
+ checkTabCount();
}
- int getTitleBarWidth() {
- if (mTitleBar != null) {
- return mTitleBar.getWidth();
+ int getContentWidth() {
+ if (mContentView != null) {
+ return mContentView.getWidth();
}
return 0;
}
@@ -168,6 +257,22 @@
mFakeTitleBar.onEditUrl(clearInput);
}
+ void setFakeTitleBarGravity(int gravity) {
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)
+ mFakeTitleBar.getLayoutParams();
+ if (lp == null) {
+ lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT,
+ LayoutParams.WRAP_CONTENT);
+ }
+ lp.gravity = gravity;
+ mFakeTitleBar.setLayoutParams(lp);
+ }
+
+ void showFakeTitleBarAndEdit() {
+ showFakeTitleBar();
+ mFakeTitleBar.onEditUrl(false);
+ }
+
@Override
protected void attachFakeTitleBar(WebView mainView) {
mContentView.addView(mFakeTitleBar);
@@ -208,6 +313,20 @@
}
@Override
+ public void onActionModeFinished(boolean inLoad) {
+ checkTabCount();
+ if (inLoad) {
+ // the titlebar was removed when the CAB was shown
+ // if the page is loading, show it again
+ mFakeTitleBar.setShowProgressOnly(true);
+ if (!isFakeTitleBarShowing()) {
+ setFakeTitleBarGravity(Gravity.TOP);
+ }
+ showFakeTitleBar();
+ }
+ }
+
+ @Override
public void setUrlTitle(Tab tab, String url, String title) {
super.setUrlTitle(tab, url, title);
mTabBar.onUrlAndTitle(tab, url, title);