diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/com/android/browser/BaseUi.java | 79 | ||||
| -rw-r--r-- | src/com/android/browser/PhoneUi.java | 11 | ||||
| -rw-r--r-- | src/com/android/browser/TabBar.java | 1 | ||||
| -rw-r--r-- | src/com/android/browser/TitleBarBase.java | 2 | ||||
| -rw-r--r-- | src/com/android/browser/XLargeUi.java | 16 |
5 files changed, 79 insertions, 30 deletions
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index b20e661ff..f7d7a3c28 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -16,6 +16,7 @@ package com.android.browser; +import com.android.browser.BrowserWebView.ScrollListener; import com.android.browser.Tab.LockIcon; import com.android.internal.view.menu.MenuBuilder; @@ -32,12 +33,15 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.PaintDrawable; import android.os.Bundle; +import android.os.Handler; +import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.View; +import android.view.ViewConfiguration; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; @@ -55,7 +59,7 @@ import java.util.List; /** * UI interface definitions */ -public abstract class BaseUi implements UI, WebViewFactory { +public abstract class BaseUi implements UI, WebViewFactory, ScrollListener { private static final String LOGTAG = "BaseUi"; @@ -70,6 +74,9 @@ public abstract class BaseUi implements UI, WebViewFactory { ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER); + private static final int MSG_HIDE_TITLEBAR = 1; + private static final int HIDE_TITLEBAR_DELAY = 1500; // in ms + Activity mActivity; UiController mUiController; TabControl mTabControl; @@ -94,6 +101,8 @@ public abstract class BaseUi implements UI, WebViewFactory { private Toast mStopToast; + private int mLastScrollY; + private int mTitlebarScrollTriggerSlop; // the default <video> poster private Bitmap mDefaultVideoPoster; @@ -126,6 +135,12 @@ public abstract class BaseUi implements UI, WebViewFactory { setFullscreen(BrowserSettings.getInstance().useFullscreen()); mGenericFavicon = res.getDrawable( R.drawable.app_web_browser_sm); + ViewConfiguration config = ViewConfiguration.get(browser); + mTitlebarScrollTriggerSlop = Math.max( + config.getScaledOverflingDistance(), + config.getScaledOverscrollDistance()); + mTitlebarScrollTriggerSlop = Math.max(mTitlebarScrollTriggerSlop, + config.getScaledTouchSlop()); } @Override @@ -251,17 +266,12 @@ public abstract class BaseUi implements UI, WebViewFactory { @Override public void setActiveTab(final Tab tab) { - setActiveTab(tab, true); - } - - void setActiveTab(Tab tab, boolean needsAttaching) { + mHandler.removeMessages(MSG_HIDE_TITLEBAR); if ((tab != mActiveTab) && (mActiveTab != null)) { removeTabFromContentView(mActiveTab); } mActiveTab = tab; - if (needsAttaching) { - attachTabToContentView(tab); - } + attachTabToContentView(tab); setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole()); onTabDataChanged(tab); onProgressChanged(tab); @@ -462,6 +472,10 @@ public abstract class BaseUi implements UI, WebViewFactory { return getTitleBar().isShowing(); } + public boolean isEditingUrl() { + return getTitleBar().isEditingUrl(); + } + protected abstract TitleBarBase getTitleBar(); protected void setTitleGravity(int gravity) { @@ -507,7 +521,6 @@ public abstract class BaseUi implements UI, WebViewFactory { dismissIME(); hideTitleBar(); if (mActiveTab != null) { - WebView web = mActiveTab.getWebView(); mActiveTab.putInBackground(); } mComboView.setAlpha(0f); @@ -826,4 +839,52 @@ public abstract class BaseUi implements UI, WebViewFactory { return d; } + public boolean isLoading() { + return mActiveTab != null ? mActiveTab.inPageLoad() : false; + } + + /** + * Suggest to the UI that the title bar can be hidden. The UI will then + * decide whether or not to hide based off a number of factors, such + * as if the user is editing the URL bar or if the page is loading + */ + public void suggestHideTitleBar() { + if (!isLoading() && !isEditingUrl()) { + hideTitleBar(); + } + } + + @Override + public void onScroll(int visibleTitleHeight, boolean userInitiated) { + WebView view = mActiveTab != null ? mActiveTab.getWebView() : null; + if (view == null || !userInitiated) { + return; + } + int scrollY = view.getScrollY(); + if (scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) { + mLastScrollY = scrollY; + if (visibleTitleHeight == 0) { + mHandler.removeMessages(MSG_HIDE_TITLEBAR); + showTitleBar(); + Message msg = Message.obtain(mHandler, MSG_HIDE_TITLEBAR); + mHandler.sendMessageDelayed(msg, HIDE_TITLEBAR_DELAY); + } else if (visibleTitleHeight == getTitleBar().getEmbeddedHeight() + && mHandler.hasMessages(MSG_HIDE_TITLEBAR)) { + mHandler.removeMessages(MSG_HIDE_TITLEBAR); + hideTitleBar(); + } + } else if (scrollY > mLastScrollY) { + mLastScrollY = scrollY; + } + } + + private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + if (msg.what == MSG_HIDE_TITLEBAR) { + suggestHideTitleBar(); + } + } + }; } diff --git a/src/com/android/browser/PhoneUi.java b/src/com/android/browser/PhoneUi.java index d7f84b50d..d0b0f77b7 100644 --- a/src/com/android/browser/PhoneUi.java +++ b/src/com/android/browser/PhoneUi.java @@ -33,7 +33,6 @@ import android.widget.FrameLayout; public class PhoneUi extends BaseUi { private static final String LOGTAG = "PhoneUi"; - private static final float NAV_TAB_SCALE = 0.75f; private TitleBarPhone mTitleBar; private ActiveTabsPage mActiveTabsPage; @@ -134,7 +133,7 @@ public class PhoneUi extends BaseUi { mTitleBar.setProgress(progress); if (progress == 100) { if (!mOptionsMenuOpen || !mExtendedMenuOpen) { - hideTitleBar(); + suggestHideTitleBar(); if (mUseQuickControls) { mTitleBar.setShowProgressOnly(false); } @@ -154,12 +153,7 @@ public class PhoneUi extends BaseUi { @Override public void setActiveTab(final Tab tab) { captureTab(mActiveTab); - super.setActiveTab(tab, true); - setActiveTab(tab, true); - } - - @Override - void setActiveTab(Tab tab, boolean needsAttaching) { + super.setActiveTab(tab); BrowserWebView view = (BrowserWebView) tab.getWebView(); // TabControl.setCurrentTab has been called before this, // so the tab is guaranteed to have a webview @@ -176,6 +170,7 @@ public class PhoneUi extends BaseUi { if (mTitleBar.getParent() == null) { view.setEmbeddedTitleBar(mTitleBar); } + view.setScrollListener(this); } if (tab.isInVoiceSearchMode()) { showVoiceTitleBar(tab.getVoiceDisplayTitle(), tab.getVoiceSearchResults()); diff --git a/src/com/android/browser/TabBar.java b/src/com/android/browser/TabBar.java index 6e84a4049..1ea607168 100644 --- a/src/com/android/browser/TabBar.java +++ b/src/com/android/browser/TabBar.java @@ -111,7 +111,6 @@ public class TabBar extends LinearLayout mInactiveDrawable = res.getDrawable(R.drawable.browsertab_inactive); mTabMap = new HashMap<Tab, TabView>(); - Resources resources = activity.getResources(); LayoutInflater factory = LayoutInflater.from(activity); factory.inflate(R.layout.tab_bar, this); setPadding(0, (int) res.getDimension(R.dimen.tab_padding_top), 0, 0); diff --git a/src/com/android/browser/TitleBarBase.java b/src/com/android/browser/TitleBarBase.java index b95711eae..e2c3432c0 100644 --- a/src/com/android/browser/TitleBarBase.java +++ b/src/com/android/browser/TitleBarBase.java @@ -209,6 +209,7 @@ public class TitleBarBase extends RelativeLayout @Override public void onAnimationStart(Animator animation) { mWasCanceled = false; + mUrlInput.setEnabled(false); } @Override @@ -221,6 +222,7 @@ public class TitleBarBase extends RelativeLayout setTranslationY(0); } mBaseUi.setTitleGravity(Gravity.NO_GRAVITY); + mUrlInput.setEnabled(true); } @Override diff --git a/src/com/android/browser/XLargeUi.java b/src/com/android/browser/XLargeUi.java index 25cdbd954..84ad6ead5 100644 --- a/src/com/android/browser/XLargeUi.java +++ b/src/com/android/browser/XLargeUi.java @@ -35,7 +35,7 @@ import java.util.List; /** * Ui for xlarge screen sizes */ -public class XLargeUi extends BaseUi implements ScrollListener { +public class XLargeUi extends BaseUi { private static final String LOGTAG = "XLargeUi"; @@ -153,6 +153,7 @@ public class XLargeUi extends BaseUi implements ScrollListener { @Override public void onScroll(int visibleTitleHeight, boolean userInitiated) { + super.onScroll(visibleTitleHeight, userInitiated); mTabBar.onScroll(visibleTitleHeight, userInitiated); } @@ -192,13 +193,7 @@ public class XLargeUi extends BaseUi implements ScrollListener { captureTab(mActiveTab); } } - super.setActiveTab(tab, true); - setActiveTab(tab, true); - mTitleBar.setSkipTitleBarAnimations(false); - } - - @Override - void setActiveTab(Tab tab, boolean needsAttaching) { + super.setActiveTab(tab); BrowserWebView view = (BrowserWebView) tab.getWebView(); // TabControl.setCurrentTab has been called before this, // so the tab is guaranteed to have a webview @@ -226,6 +221,7 @@ public class XLargeUi extends BaseUi implements ScrollListener { } updateLockIconToLatest(tab); tab.getTopWindow().requestFocus(); + mTitleBar.setSkipTitleBarAnimations(false); } @Override @@ -282,10 +278,6 @@ public class XLargeUi extends BaseUi implements ScrollListener { } } - public boolean isEditingUrl() { - return mTitleBar.isEditingUrl(); - } - @Override protected TitleBarBase getTitleBar() { return mTitleBar; |
