diff options
Diffstat (limited to 'src/com/android/browser/BrowserWebView.java')
-rw-r--r-- | src/com/android/browser/BrowserWebView.java | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java index a1d8c2d..6cdc063 100644 --- a/src/com/android/browser/BrowserWebView.java +++ b/src/com/android/browser/BrowserWebView.java @@ -22,6 +22,7 @@ import android.graphics.Canvas; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; +import android.view.ViewConfiguration; import android.webkit.WebView; import java.util.Map; @@ -38,6 +39,10 @@ public class BrowserWebView extends WebView implements Runnable { private TitleBarBase mTitleBar; private int mCaptureSize; private Bitmap mCapture; + private boolean mNavMode; + private boolean mTracking; + private int mSlop; + float mDownX, mDownY; /** * @param context @@ -79,11 +84,17 @@ public class BrowserWebView extends WebView implements Runnable { } private void init() { + mNavMode = false; + mSlop = ViewConfiguration.get(mContext).getScaledTouchSlop(); mCaptureSize = mContext.getResources().getDimensionPixelSize(R.dimen.tab_capture_size); mCapture = Bitmap.createBitmap(mCaptureSize, mCaptureSize, Bitmap.Config.RGB_565); } + protected void setNavMode(boolean enabled) { + mNavMode = enabled; + } + @Override protected int getTitleHeight() { return (mTitleBar != null) ? mTitleBar.getEmbeddedHeight() : 0; @@ -116,13 +127,36 @@ public class BrowserWebView extends WebView implements Runnable { @Override public boolean onTouchEvent(MotionEvent evt) { - if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) { - mUserInitiated = true; - } else if (MotionEvent.ACTION_UP == evt.getActionMasked() - || (MotionEvent.ACTION_CANCEL == evt.getActionMasked())) { - mUserInitiated = false; + if (mNavMode) { + if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) { + mDownX = evt.getX(); + mDownY = evt.getY(); + mTracking = true; + return true; + } else if (mTracking && MotionEvent.ACTION_MOVE == evt.getActionMasked()) { + if (mSlop < Math.abs(evt.getX() - mDownX) + || mSlop < Math.abs(evt.getY() - mDownY)) { + mTracking = false; + } + return mTracking; + } else if (mTracking && MotionEvent.ACTION_UP == evt.getActionMasked()) { + performClick(); + mTracking = false; + return true; + } else if (mTracking && MotionEvent.ACTION_CANCEL == evt.getActionMasked()) { + mTracking = false; + return true; + } + return super.onTouchEvent(evt); + } else { + if (MotionEvent.ACTION_DOWN == evt.getActionMasked()) { + mUserInitiated = true; + } else if (MotionEvent.ACTION_UP == evt.getActionMasked() + || (MotionEvent.ACTION_CANCEL == evt.getActionMasked())) { + mUserInitiated = false; + } + return super.onTouchEvent(evt); } - return super.onTouchEvent(evt); } @Override |