Reviewers: pdr,
Description:
Fixing touch scrolling support for devices that support it natively. Our
current touch support overrides native touch scrolling on tablets, which
breaks touch scrolling.
Please review this at http://gwt-code-reviews.appspot.com/1369809/
Affected files:
M user/src/com/google/gwt/touch/client/TouchScroller.java
M user/test/com/google/gwt/touch/client/TouchScrollTest.java
Index: user/src/com/google/gwt/touch/client/TouchScroller.java
===================================================================
--- user/src/com/google/gwt/touch/client/TouchScroller.java (revision 9828)
+++ user/src/com/google/gwt/touch/client/TouchScroller.java (working copy)
@@ -43,6 +43,11 @@
/**
* Adds touch based scrolling to a scroll panel.
+ *
+ * <p>
+ * Touch based scrolling is only supported on devices that support touch
events
+ * and do not implement native touch based scrolling.
+ * </p>
*/
@PartialSupport
public class TouchScroller {
@@ -149,9 +154,29 @@
}
private native boolean detectTouchSupport() /*-{
+ // Detect touch event support.
var elem = document.createElement('div');
elem.setAttribute('ontouchstart', 'return;');
- return (typeof elem.ontouchstart) == "function";
+ if ((typeof elem.ontouchstart) != "function") {
+ return false;
+ }
+
+ // Detect if the browser supports touch scrolling natively. If the
browser
+ // natively supports touch scrolling, then TouchScroller is NOT
supported.
+ var ua = navigator.userAgent.toLowerCase();
+ if (/android ([3-9]+)\.([0-9]+)/.exec(ua) != null) {
+ // Android 3.0 natively support touch scrolling.
+ return false;
+ }
+
+ return true;
+ }-*/;
+
+ /**
+ * Check if the user agent is android 3.0 or greater.
+ * @return
+ */
+ private native boolean isAndroid3() /*-{
}-*/;
}
@@ -222,9 +247,10 @@
}
/**
- * Runtime check for whether touch events are supported in this browser.
- *
- * @return true if touch events are is supported, false it not
+ * Runtime check for whether touch scrolling is supported in this
browser. Returns true if touch
+ * events are supported but touch based scrolling is not natively
supported.
+ *
+ * @return true if touch events are supported, false it not
*/
public static boolean isSupported() {
return impl().isSupported();
Index: user/test/com/google/gwt/touch/client/TouchScrollTest.java
===================================================================
--- user/test/com/google/gwt/touch/client/TouchScrollTest.java (revision
9828)
+++ user/test/com/google/gwt/touch/client/TouchScrollTest.java (working
copy)
@@ -257,7 +257,7 @@
public void testCreateIfSupported() {
// createIfSupported()
TouchScroller scroller = TouchScroller.createIfSupported();
- if (isTouchSupported()) {
+ if (TouchScroller.isSupported()) {
assertNotNull("TouchScroll not created, but touch is supported",
scroller);
assertNull(scroller.getTargetWidget());
@@ -268,7 +268,7 @@
// createIfSupported(HasScrolling)
HasScrolling target = new ScrollPanel();
scroller = TouchScroller.createIfSupported(target);
- if (isTouchSupported()) {
+ if (TouchScroller.isSupported()) {
assertNotNull("TouchScroll not created, but touch is supported",
scroller);
assertEquals(target, scroller.getTargetWidget());
@@ -511,10 +511,4 @@
scrollPanel = null;
scroller = null;
}
-
- private native boolean isTouchSupported() /*-{
- var elem = document.createElement('div');
- elem.setAttribute('ontouchstart', 'return;');
- return (typeof elem.ontouchstart) == "function";
- }-*/;
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors