Always trigger URL bar on scroll down gesture
Bug: 4976168
Prevent websites from preventing the URL bar gesture
Change-Id: Id9d01c93267ff4376c89503b39945ae003e7d5bf
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index bcb18f1..d364378 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -16,10 +16,6 @@
package com.android.browser;
-import com.android.browser.BrowserWebView.ScrollListener;
-import com.android.browser.Tab.LockIcon;
-import com.android.internal.view.menu.MenuBuilder;
-
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.pm.PackageManager;
@@ -40,9 +36,11 @@
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.Menu;
+import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewConfiguration;
import android.view.View.OnClickListener;
+import android.view.View.OnTouchListener;
+import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
@@ -54,12 +52,15 @@
import android.widget.LinearLayout;
import android.widget.Toast;
+import com.android.browser.Tab.LockIcon;
+import com.android.internal.view.menu.MenuBuilder;
+
import java.util.List;
/**
* UI interface definitions
*/
-public abstract class BaseUi implements UI, WebViewFactory, ScrollListener {
+public abstract class BaseUi implements UI, WebViewFactory, OnTouchListener {
private static final String LOGTAG = "BaseUi";
@@ -101,7 +102,7 @@
private Toast mStopToast;
- private int mLastScrollY;
+ private float mInitialY;
private int mTitlebarScrollTriggerSlop;
// the default <video> poster
@@ -110,6 +111,7 @@
private View mVideoProgressView;
private boolean mActivityPaused;
+ protected boolean mUseQuickControls;
public BaseUi(Activity browser, UiController controller) {
mActivity = browser;
@@ -269,8 +271,16 @@
mHandler.removeMessages(MSG_HIDE_TITLEBAR);
if ((tab != mActiveTab) && (mActiveTab != null)) {
removeTabFromContentView(mActiveTab);
+ WebView web = mActiveTab.getWebView();
+ if (web != null) {
+ web.setOnTouchListener(null);
+ }
}
mActiveTab = tab;
+ WebView web = mActiveTab.getWebView();
+ if (web != null && !mUseQuickControls) {
+ web.setOnTouchListener(this);
+ }
attachTabToContentView(tab);
setShouldShowErrorConsole(tab, mUiController.shouldShowErrorConsole());
onTabDataChanged(tab);
@@ -855,28 +865,31 @@
}
@Override
- public void onScroll(int visibleTitleHeight, boolean userInitiated) {
- WebView view = mActiveTab != null ? mActiveTab.getWebView() : null;
- if (view == null) {
- return;
- }
- int scrollY = view.getScrollY();
- if (isTitleBarShowing()
- || scrollY < (mLastScrollY - mTitlebarScrollTriggerSlop)) {
- mLastScrollY = scrollY;
- if (visibleTitleHeight == 0 && userInitiated) {
+ public boolean onTouch(View v, MotionEvent event) {
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mInitialY = event.getY();
+ break;
+ case MotionEvent.ACTION_MOVE:
+ WebView web = (WebView) v;
+ if (!isTitleBarShowing()
+ && web.getVisibleTitleHeight() == 0
+ && event.getY() > (mInitialY + mTitlebarScrollTriggerSlop)) {
mHandler.removeMessages(MSG_HIDE_TITLEBAR);
showTitleBar();
+ } else if (event.getY() < mInitialY) {
+ mInitialY = event.getY();
+ }
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ if (isTitleBarShowing()) {
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);
- suggestHideTitleBar();
}
- } else if (scrollY > mLastScrollY) {
- mLastScrollY = scrollY;
+ break;
}
+ return false;
}
private Handler mHandler = new Handler() {