jeudi 20 mars 2014

Touch events not firing

Hello,





I'm experiencing something really strange with one of the devices I'm working with.





We've been trying to deploy one of our existing Sencha Touch 2 app on a HP Slate 8 Pro Android tablet. The app itself seems to work fine (at least, it starts properly), however, none of the touch events (touch start, touch move or touch end....nor tap, etc.) are being registered by this device. We basically can't press a button, scroll a list, etc.





The screen is properly responsive since we can tap on a textbox and get the soft keyboard to pop up. So I assumed something was wrong with the bindings...But I can't figure out what exactly.





This app is built with Sencha Touch 2 and Cordova 3.1. In order to eliminate potential sources of issues:

  • I got rid of Cordova and built the application with the Sencha Native Packager. Behavior persisted.

  • I got rid of the Sencha Native Packager and built a very simple 1 activity application which loads index.html from the asset folder to the webview. Behavior persisted.


So I started to wonder what exactly could cause this. I tested this last version (lite Android app) in 3 different devices:

  • A Samsung Galaxy S3 running the latest Cyanogen Mod (Android 4.4.2)

  • A Galaxy Nexus running Android 4.2.1 (retail)

  • The HP Slate 8 pro running Android 4.2.2 (probably some HP homebrew fork which so far I blame for the issue...)


First difference is, the user agents:

  • SGS3 Webview uses:


Mozilla/5.0 (Linux; Android 4.4.2; SAMSUNG-SGH-I747 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36

  • The Galaxy Webview uses:


Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; Galaxy Nexus Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

  • The Slate Webview uses:


Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HP Slate 8 Pro Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30





The only difference (excluding the SGS3 using Chrome as a webview which is a new feature of Android KitKat) is that the Slate isn't using a Mobile version of safari. This might be expected since this is a tablet and not a phone. I'm not quite sure if there's a real impact.





Other test I ran was to trace all the events bound on the app startup:



Galaxy S3 Cyanogen 4.4.2


Code:



binding Ext.AnimationQueue#run

binding Ext.AnimationQueue#whenIdle

binding Ext.AnimationQueue#processIdleQueueItem

binding Ext.AnimationQueue#processTaskQueueItem

binding Ext.TaskQueue#run

binding Ext.TaskQueue#watch

binding Ext.event.publisher.Dom#onEvent

binding Ext.event.publisher.TouchGesture#onEvent

binding Ext.viewport.Default#doPreventPanning

binding Ext.viewport.Default#doPreventZooming

binding Ext.viewport.Default#doBlurInput

firing event initialize

binding Ext.viewport.Default#onOrientationChange

binding Ext.viewport.Default#onElementFocus

binding Ext.viewport.Default#onElementBlur

firing event ready

binding Ext.util.paintmonitor.OverflowChange#onElementPainted

binding Ext.util.sizemonitor.OverflowChange#onExpand

binding Ext.util.sizemonitor.OverflowChange#onShrink

binding Ext.util.sizemonitor.Abstract#refresh

firing event initialize

firing event initialize

binding Ext.app.History#detectStateChange

firing event exception

firing event beforeload







Galaxy Nexus (4.2.1)






Code:



binding Ext.AnimationQueue#run

binding Ext.AnimationQueue#whenIdle

binding Ext.AnimationQueue#processIdleQueueItem

binding Ext.AnimationQueue#processTaskQueueItem

binding Ext.TaskQueue#run

binding Ext.TaskQueue#watch

binding Ext.event.publisher.Dom#onEvent

binding Ext.event.publisher.TouchGesture#onEvent

binding Ext.viewport.Default#doPreventPanning

binding Ext.viewport.Android#doPreventZooming

binding undefined

firing event initialize





binding Ext.viewport.Default#onElementFocus

binding Ext.viewport.Default#onElementBlur

firing event ready

binding Ext.util.paintmonitor.CssAnimation#onElementPainted

binding Ext.util.sizemonitor.Scroll#onScroll





binding Ext.util.sizemonitor.Abstract#refresh

firing event initialize

firing event initialize

binding Ext.app.History#detectStateChange

firing event exception

firing event beforeload







Slate 8 Pro (4.2.2)






Code:



binding Ext.AnimationQueue#run

binding Ext.AnimationQueue#whenIdle

binding Ext.AnimationQueue#processIdleQueueItem

binding Ext.AnimationQueue#processTaskQueueItem

binding Ext.TaskQueue#run

binding Ext.TaskQueue#watch

binding Ext.event.publisher.Dom#onEvent

binding Ext.event.publisher.TouchGesture#onEvent

binding Ext.viewport.Default#doPreventPanning

binding Ext.viewport.Android#doPreventZooming

binding undefined

firing event initialize





binding Ext.viewport.Default#onElementFocus

binding Ext.viewport.Default#onElementBlur

firing event ready

binding Ext.util.paintmonitor.CssAnimation#onElementPainted

binding Ext.util.sizemonitor.Scroll#onScroll





binding Ext.util.sizemonitor.Abstract#refresh

firing event initialize

firing event initialize

binding Ext.app.History#detectStateChange

firing event exception

firing event beforeload





Funny thing is the binding of both the Galaxy and the Slate are the same...But the Slate still won't react to touch (binding Ext.event.publisher.TouchGesture#onEvent)





I'm running out of ideas right now. Is there anything you'd recommend looking at?





I already tried the solution presented in this post with no luck.



EDIT:

I'm not sure if this is appropriate to post this as a bug as I couldn't yet identify if this is related to Sencha Touch or specifically this device.



Thanks




Aucun commentaire:

Enregistrer un commentaire