Mar 03 AT 1:04 AM Taylor Wimberly 108 Comments

Is multitouch broken on the Nexus One? Sort of…

It is time to play blog journalism. I provide the questions. You find the answers and then we share them with the community.

  1. Why does the Nexus One suffer from poor multitouch performance?
  2. Is it a hardware limitation or software issue and can it be fixed?

It was brought to my attention tonight that multitouch recognition is having a lot of issues on the Nexus One. Robert Greeen of Battery Powered Games told me he was having problems with the Nexus One touchscreen and made a quick app to demonstrate it visually.

The application is called Multitouch Visible Test and it is available in the Android Market.

“This app shows how your phone’s hardware handles multitouch. The event data is not processed in any way. The two dots are drawn exactly where the phone reports you are touching.

For many current Android phones, there will be lots of bad data including axis flipping and near-axis influence.”Robert GreenBattery Powered Games

The Nexus One performs perfectly fine when used for pinch zoom implementations, but it struggles in other situations. When two fingers are placed close to each other or they cross the same axix, the data points get flipped. This is a major problem for games that use multitouch and I have experienced them first hand with Polarbit games like ToonWarz.

No problems were experienced when using the same multitouch application on the Motorola Droid. To demonstrate the difference I filmed a quick video.

As you can see the Droid works as we would expect it, but the Nexus One has bugs throughout the testing. Does the Droid actually feature a better touchscreen or does the Nexus One (which features the newer Android 2.1) have a software bug?

Update: It looks like we have a partial answer to one of the questions. Dianna Hackborn, a Google engineer, posted the following response on the official Android Developers group. It appears the Droid does in fact have a higher quality touch screen and a “fix” for the Nexus One does not look good at this point.

“Sorry I meant exactly what I said: this is how the touch screen hardware on the Nexus One works (which is essentially the same screen as on the G1 and myTouch).  The Droid has a sensor from a different manufacturer, with different behavior.  Other phones will likewise have different sensors.”Dianne HackbornAndroid framework engineer

To those who will complain, this has been tested on multiple Droids and Nexii that were both stock Android and rooted. All the Nexus One users we sampled reported similar issues on their devices. Feel free to share your own findings in the comments.

Taylor is the founder of Android and Me. He resides in Dallas and carries the Samsung Galaxy S 4 and HTC One as his daily devices. Ask him a question on Twitter or Google+ and he is likely to respond. | Ethics statement

    Most Tweeted This Week

  • http://michael-lipson.com/ Michael

    This was also the case with the G1, back when the kind folks over at XDA were trying to port MT to early Android devices.

    • http://cobaltdrillbitset.com magnum

      Yesterday I noticed it would pinch zoom in the browser when I rolled my thumb across the surface. That’s strange and unexpected.

      Hopefully it will have answers for this one. Questions: http://bit.ly/nexus-phone-problems

      • http://Sameforme Match

        I have the same problem on my Nexus one!

  • http://Website dude

    Oh, I think that explains why I’m having problems with the on screen controls in snesoid when holding down more than one button.

  • http://Website chomatz

    yup it’s pretty messed up even on cyanogenmod 5

  • http://Website yee

    what about running it on the nexus one which runs a desire rom? if that will help, then maybe it can be solved by driver or software fix. if not, maybe it is a HTC thing… :(

    • http://Website Jak Crow

      I’m running the desire rom and it has the same problem.

  • MFK DGAF

    I think it has to be a software bug, because there has been touch screen accuracy tests done between the droid and the N1 in which the N1 won. http://www.geek.com/articles/mobile/iphone-beats-droid-and-nexus-one-in-touchscreen-accuracy-test-20100111/

    • http://Website dude

      that test was testing the accuracy of single touch, which works fine. Multitouch is the problem.

      • http://Website Ryan

        That test was only single touch in criss cross patterns across the screen, not multi touch.

  • http://Website Jonathan

    I never noticed the wonkiness with multitouch, but I do have issues on my Nexus One where it my touches suddenly get shifted down on the screen to the point that I’ll touch the middle of the screen, and it will think I’m touching one of the capacitive buttons below. This doesn’t happen all the time, but it happens fairly regularly. It’s annoying and occasionally frustrating.

    • http://Website otw

      Do you screen protector. Had the same problems But since i’ve removed the screen protector Everything works fine

      • http://Website Tom

        It’s not the screen protector. The same thing happens to me once in a while, but I don’t use a protector.

    • http://Website Sam Jones

      I agree that this multitouch problem is not the only problem with the Nexus One touch screen. I also have the problem where the phone registers a touch 1-3 cm below where I actually touch the screen. Locking and unlocking the phone “fixes” the issue… temporarily. It doesn’t happen very often, but it is very annoying and makes me think I paid $530+tax for something that is ‘defective’ in it’s design and/or quality in this area.

      • http://Website Jim

        I have the same problem, except sometimes the touchscreen won’t react at all until I lock and unlock the phone. Like everyone said, it only happens every now and then, but enough to annoy me.

  • http://Website Daniel

    This is a known hardware problem: the Synaptics screen HTC uses tracks each axis independently, and it gets confused when the points tracked get too close within an axis. After that, it can only guess which measuring belongs to which point, and it often guesses wrong (the part about guessing can be improved by software somewhat). All current HTC models use the same technology. I don’t know about Motorola’s phones.

    Excellent description here: http://lukehutch.wordpress.com/2009/01/10/full-working-multitouch-on-the-t-mobile-g1-android-phone/

    • http://androidandme.com Taylor Wimberly

      I know it happened back then with the hack, but that was old hardware and not Android 2.0 which added full support for multitouch.

      • http://Website Will S

        How does this test react on other similar HTC hardware (with similar screen technology).

        Although there is a limitation with the Nexus One screen hardware, shouldn’t it be possible with drivers or software to minimizing the problem? (For example, by making assumptions of pairing the coordinates by comparing to previous pairing locations and/or movements. In other words, if the points cross and axis, assume the points are going to continue to move in the same direction.)

    • http://Website Daniel

      Here’s a message from Dianne Hackborn (Android framework engineer) confirming this:

      http://groups.google.com/group/android-developers/msg/70e9dd235d519955

      • http://androidandme.com Taylor Wimberly

        Really sad the N1 has the same touchscreen as the G1.

  • http://www.typhon4android.org Mike Leahy

    This doesn’t surprise me too much.. A bummer no doubt and hopefully big G fixes it before pushing out 2.1 to the ecosystem. IE hopefully this is a temporary N1 bug with the current 2.1 OS release.

    My assumption is that this is a software issue. As far as design of the Android event system goes I thought it was silly to combine the touch and trackball system into one event / MotionEvent. This seemingly was an early and not fully baked architecture decision before multitouch support that led to quick implementation which now adds unnecessary complexity in having one event type serving 2+ different types of input sources.

    If the bug isn’t in MotionEvent (I’d like to believe it isn’t though I’ve not inspected further) it certainly could be at a lower software level feeding the event system though

    In Typhon I have a generic event system that can translate JInput (desktop input API), AWT events (SE Java), and Android events into non-platform specific events. This allows input control code for a game to be shared and not rewritten when deploying to these respective environments. I split things off to a separate trackball/mouse event and touchscreen event in this system from the received Android MotionEvent. The Typhon system also potentially in the situation of errant multitouch input can provide an entry point to do device dependent filtering or tracking/fixing of bad data for affected devices / firmware versions if indeed it is a software error.

    Wouldn’t it be nice if it just worked right the 1st time.. I do wonder sometimes how deep the QA is regarding the Android dev team et al. Something like this shouldn’t be missed so easily.

    I’ll write a little test here too as I’m just working on multitouch support for 2D/3D nav overlays on devices without a keyboard and I’m mainly working on the N1 currently.

    Hrmmm.. Just more to be concerned about in the ongoing Android fragmentation saga.. :(

    • http://www.typhon4android.org Mike Leahy

      @Daniel — Thanks for the link and heads up.. Indeed if the problem is at the hardware level for HTC devices, etc. that means that software filtering will have to come into play. It remains to be seen if big G will include that though… Quite likely not at least for now.

      Also I didn’t mean to say Android is architected poorly, so hopefully that isn’t misconstrued. It is very well done, but there are points where one can see the additive dev process having to deal with initial architecture design decisions.. MotionEvent being one of those exposed to upper level devs working with the API.

  • http://Website RM

    Great video. Nice work Tayor (and your coding friend) for bringing this to light.

  • http://Website l3reak

    Wow… between this and the 3G connectivity issues, I’m feeling more and more comfortable that I bought a Droid instead of an N1. What’s with all the big flaws in the supposed flagship device?

    • http://Website teleknEsis

      I bet you also feel real comfortable every time you are in the middle of a phone call and switch to an app that uses data. Ohhhhh wait. That’s right. You CAN’T do that on the Droid because of Verizon’s network…..

  • http://Website Zer0-9

    I’m pretty sure this is a hardware issue, same as the G1 had with multitouch. Similar application was used to show that while the touchscreen supported tracking two touch points it had this issue of “guess work” and those exact same errors would occur.

    Using the Droid I can only get the two points to swap when I pass very close to one another but it only swaps the colors and continues to read the position correctly.

  • http://www.typhon4android.org Mike Leahy

    Grrrr… Yes this is much worse than I even expected and like Robert I am just about to implement on axis joystick/controller/nav overlays for Typhon intended for game development. I was just starting tonight actually!

    This effectively breaks multitouch for all intents and purposes. While it may not be a problem with the Android software stack it really doesn’t matter at the end of the line where the problem occurs and all developers are pinched. This is a hardware fragmentation issue and only will confuse devs especially since Google is not going to make an effort (quite likely) to point out this problem beyond a message on the developers email list that will soon be buried. It doesn’t matter where the problem occurs as the API contract is simply broken. Google is lazy to claim it’s not their problem. It very much is their problem as the N1 is their flagship device.

    Grrrr. And I paid an artist to make some nice graphics for nav/joystick overlays. At least there is the trackball for the N1 which alleviates dual control requirements, but still.

    The only way at this point that I can think of making it work is to indeed filter the MotionEvent data with delta/differential values and have a threshold to reset the delta if it jumps too far. As to the axis alignment issue that is a difficult one as one needs to ignore input from one of the axis aligned input points and make a decision on which one to follow.

    Erm… _fragmentation bomb_, now with axis aligned shrapnel!

  • http://Website Jak Crow

    What’s interesting is that the axis swap is 100% consistent. I wonder if it would be possible to compensate for this.

  • http://Website Mweulink

    Now, i hope everyone is that smart as mike, just when u program an multi touch program for Android, let the points reset when they come to close to eachother, and when they go away from eachother reset it again, between that, program the part as it officially need to do, ok for games it makes the game easyer and for the programmer more diffecult, cause you have to let the program guess what the user would do, but you can do it this way by using lesser side-by-side fungeren actions.
    Hope this is usefull, till Google fixes this problemen,u have to find an work around tho.

    Greets,
    Mark

  • http://Website cece

    Does the HTC Desire have exactly the same screen as the Nexus one ?

    That’s a real shame this lack of real multitouch capabilities was “hidden” by Google.
    Even Eric Tseng when asked (numerous times) about lack of multitouch on the Nexus, told that they did not activated multitouch in Google’s apps because they did not think this was needed (sic), but developpers could use it. No, he did not really lied technically speaking, but this was obviously not telling the whole truth.

  • http://Website Will S

    (REPOST since this initial post was posted as a response to a specific user accidently)
    ———————————————–

    How does this test react on other similar HTC hardware (with similar screen technology).

    Although there is a limitation with the Nexus One screen hardware, shouldn’t it be possible with drivers or software to minimizing the problem? (For example, by making assumptions of pairing the coordinates by comparing to previous pairing locations and/or movements. In other words, if the points cross and axis, assume the points are going to continue to move in the same direction.)

  • http://haydentheandroid.blogspot.com haydenTheAndroid

    I love my Nexus, but now I know not to bother with certain types of games that may use multi-touch controls :/

  • ontheFritz

    This makes me feel kind of sick. Multitouch was a big issue for me, but it looked for awhile like it was a software issue – so I bought one. Something really needs to be done.

  • http://Website Westy

    Yeah man Snes/Gensis emulators are almost unplayable because of this. I Think we need to make a major stink about this to get them to fix it or do a recall.

    • http://Website Terrell

      That is if Apple doesn’t win their little patent battle.

  • http://Website Terrell

    I’m glad I know all this now before I buy my Nexus and think that there is something wrong with just my phone. Overall I still think it’s a good phone. I do agree that GOOG should have been a little more prepared for something like this. Maybe waiting to release the N1 with multi-touch already installed instead of implementing it later. Hope there is some kind of fix for it before I purchase my phone :-/

  • http://Website Thundaar

    The touch panel in the N1 is a Synaptics ClearPad 2000. No more than two points can register at once. It supports pinch zoom and pivot. The problem with axis flipping looks like a driver issue.

  • http://www.typhon4android.org Mike Leahy

    @Jak Crow
    >What’s interesting is that the axis swap is 100% consistent. I wonder if it would be possible to compensate for this.

    You are very correct in stating this deficiency is 100% consistent. The good thing is that with reliable consistency even though it is reliably wrong the issue can be mitigated or reduced via better / more intelligent software filtering.

    @Will S
    >How does this test react on other similar HTC hardware (with similar screen technology).

    It will react the same as the issue is in the hardware chosen for the touchscreen. See the update quote from Dianna Hackborn in the main content above. The G1 and the Ion/MyTouch3G will behave the same if/when upgraded to 2.X

    >Although there is a limitation with the Nexus One screen hardware, shouldn’t it be possible with drivers or software to minimizing the problem?

    Most definitely. Quite likely a perfect fix is not possible, but a solution that minimizes the impact for a particular touchscreen is possible. I’m already working on it to include this support in my Typhon middleware. The thing though is that Google won’t provide this fix at the Android OS level as it is device dependent and as we know there are going to be zillions of Android devices. I can’t wait to see devices with even worse touch screens that the current HTC crop.

    @haydenTheAndroid
    >I love my Nexus, but now I know not to bother with certain types of games that may use multi-touch controls :/

    From a consumer perspective this is precisely why I am going to try and build a brand around my Typhon middleware. Apps built on top of Typhon will perform better since Typhon reduces Android fragmentation concerns and provides a more stable runtime for apps to perform uniformly across the Android ecosystem. If you see a Typhon powered app you can bet it will likely provide a better experience on any given Android device than one not using Typhon.

    @Westy
    >Yeah man Snes/Gensis emulators are almost unplayable because of this. I Think we need to make a major stink about this to get them to fix it or do a recall.

    I’m working on integrating Typhon input control into Kwaak3 right now and hopefully that example will help in contacting devs working on emulators and other similar apps to conceivably integrate Typhon as well. This is a major concern that Typhon / EGR Software / myself is going to take on…

    @Terrell
    >I’m glad I know all this now before I buy my Nexus and think that there is something wrong with just my phone. Overall I still think it’s a good phone. I do agree that GOOG should have been a little more prepared for something like this. Maybe waiting to release the N1 with multi-touch already installed instead of implementing it later. Hope there is some kind of fix for it before I purchase my phone :-/

    Sadly there is no hope for the N1 to receive an update. If such an update were to occur it would be a refresh of the device and be called the N2. The N1 is a superb phone, but the parts list is sub standard. Google simply didn’t make a fuss to HTC about this in specifying the hardware requirements for their “superphone”; goodness there is one bit of hyperbole that is getting further debunked. This is just one more touch lesson for the big G.

    I will be LMAO if the HTC Legend which is HTC’s Snapdragon / 2nd gen Android device produced solely by/for themselves has an improved touchscreen without these issues. I am also interested in the optical trackball as it really can only be better that the G1/N1 $1 trackball which simply performs bad. I’m betting you will be able to swipe the optical trackball and press the button at the same time which is impossible on the G1/N1. My other main gripe about the N1 is the small touch areas for the back/menu/home/search buttons compared to the Droid.

    Some folks balked at Google using HTC as a demo ground with the G1/Ion et al before producing the N1/”superphone”, but if the Legend turns out to be superior in every way I say HTC turned the table around on big G.

    @Thundaar
    >The touch panel in the N1 is a Synaptics ClearPad 2000. No more than two points can register at once. It supports pinch zoom and pivot. The problem with axis flipping looks like a driver issue.

    I do believe it is a limitation of the ClearPad 2000 itself. Since it has been available from 2007 on I don’t think a driver issue would be overlooked like this. Sure anything is possible, but… Also it is interesting to note that the ClearPad 2000 quite likely does not accurately indicate the touch area; IE it’s impossible to distinguish if it is a fingertip or the palm of the hand touching the screen.

    An interesting thread here:
    http://forum.xda-developers.com/showthread.php?t=629224

    • http://Website Anthony

      Hey Mike, I’m interested in the Typhon Framework, what’s with not having a email notification feature on your holding page. You expect me to remember to come back an look at some point in the future?

      • http://www.typhon4android.org Mike Leahy

        Done, thanks for the heads up; do get in contact! I’m still deep in the pit (whodathunk there was quick san… ::cough:: multitouch madness at the bottom!) with the Android engineering side as things go and getting the proper site up is last on the list before launch. I really do intend to launch before Google I/O and get a 2nd launch page version up with a teaser video soon.

        • http://www.typhon4android.org Mike Leahy

          Err.. yes.. I meant HTC Desire and not HTC Legend above as far as HTC’s attempt to release their flagship 2nd gen Snapdragon device under their own brand specifically. It will be interesting to compare it with the Nexus One.

  • http://Website Laurie

    So, it looks like this is NOT the SUPERPHONE after all; but, multitouch is not a big issue with me

  • http://Website Marco

    No it is not a superphone. It’s a Corolla with Ferrari engine. That’s all. We will see the limitations of the phone soon when more and more game developers publish their games and they won’t run properly on the N1. Luckily I don’t use my phone for gaming.
    Lesson learned. Next time I am more careful with HTC phones…

    • http://Website hafeez

      “Lesson learned. Next time I am more careful with HTC phones…”

      I have a HTC Hero, so yeah.

  • Pingback: One thing the Droid has on the N1 - Droid Forum - Verizon Droid & the Motorola Droid Forum()

  • http://Website Yahma

    Seems that Synaptics makes a distinction between “multi-touch” and “two-finger touch”.

    The Clearpad 3000 supports multi-touch (up to 10 fingers).
    The Clearpad 2000 in our Nexus one supports two-finger touch gestures. Two-finger interaction and gestures (i.e., Pinch, Pivot Rotate).

    See Synaptics website: http://www.synaptics.com/solutions/products/clearpad

    I hope the issue with the axis swapping can be fixed in software, as it seems the hardware should support it as long as no more than two fingers are used.

    • http://www.typhon4android.org Mike Leahy

      Indeed. I think it is very apt to define “multitouch” as any number within reason, but certainly more than two but not more than 10 given that most of us have 10 fingers. We’ve got time to create the “galacticphone” for our unknown brethren from the stars with more than 10 digits…

      Interestingly enough the 2.1 source hard codes 5 max touch values to be stored in MotionEvent (BASE_AVAIL_POINTERS) and there are only 3 ACTION_POINTER_UP or DOWN constants to indicate “primary pointers”. Yes you can define the proper values for more, but that is beyond the constants defined in MotionEvent.

      Dual-touch w/ limitations is a fair non obfuscated way to describe the Clearpad 2000 / Nexus One. It doesn’t quite have the same ring though as saying it supports multitouch.

      To not answer the question / defer that the Nexus One supports multitouch is not exactly honest to the consumer or the developer community.

      Sure the Android API supports multitouch, albeit in a convoluted way, but not all 2.X devices / initial 2nd gen do as we now have a clearer understanding.

      • http://Website Yahma

        Cyanogen wrote over on xda… “Interestingly, there is a hack in the framework (which is enabled on the Droid, but not on the N1) that can be enabled by setting config_filterTouchEvents. With it disabled (the default), I get the axis-flipping problem. Enabling it fixes this, but there are still issues with the points “sticking” when they cross.”

        Perhaps the axis flipping issue is related to the filtering bits that are enabled by default on the droid, but not on the N1.

  • http://www.typhon4android.org Mike Leahy

    Ok… Perhaps some more thoughts on this issue. And yeah this is probably my longest post on Android & Me; deal with it.. ;P This will get a little dev oriented, but what the heck.. First I absolutely want to state that I really like my N1. I have firmly moved away from my G1 now and use the N1 as my personal phone in addition to dev duties.

    For all intents and purposes the hardware multitouch limitations of the N1 is not going to overly affect current app experiences, but it is behind the times for innovative multitouch applications and certainly not worthy of a “superphone”. Pinch/zoom and rotation will certainly work just fine for the most part which is the current day mainstream usage for multitouch.

    Problems will arise for game developers and other more exotic / creative apps. At best these issues can be reduced via software filtering, but ultimately will require new and better hardware to enable more engaging apps.

    Now regarding my dev concerns about Android and how it is being developed over time. The addition of multitouch is a kludge and one doesn’t need to look further than how it was tacked onto MotionEvent which is a top level API event to receive touch _and_ trackball events.

    The way multitouch support was implemented into MotionEvent is very non object oriented. In fact at best it seems tacked on and sure while it works the top level API does not reveal anything about how the underlying hardware will respond. This is very much kitchen sink development and you could even say retarded.

    In fact there is no way to query or predict hardware behavior without creating a separate code path that uses the OS version, device family, and/or device name to determine behavior. Like with several other areas of the Android API we are simply stuck now with the way multitouch was implemented / added on (tacked on really) to MotionEvent. MotionEvent being one of the more egregious examples in the Android API. If you examine the source there is a bunch of bit twiddling involved now. There really should be an expanded reference not only in the API docs for MotionEvent, but a clear tutorial in the resources section of the Android developer site. This would at least be fair to developers. As things stand now supporting multitouch is an arduous task for each developer and when it comes down to it the technical limitations imposed by various hardware is quite detrimental to the situation. This isn’t a situation a beginner or even intermediate developer will have an easy go with regarding implementing anything comprehensive.

    Personally I was just about to start implementation of a dual control axis aligned overlay for game development for devices without a keyboard. While I looked over the MotionEvent API when 2.X was released at no point in looking at the API docs and even the MotionEvent code itself indicates incomplete support to the degree that the N1 and similar touchscreen tech imposes. Had I not seen this thread on Android & Me I would have been tearing my hair out once again when things errantly behaved on the N1 and I would have run into it with the axis aligned controller overlays. My only recourse would have been turning to the Android developers email list to find out buried in a thread the actual cause after hours of trial and error. In fact I’m sure I would have run it on the Droid and have been dumb founded that things worked compared to the N1. Ack.. No fun.. I would have wasted hours being stumped before looking to the Android developers email list quite likely.

    I’m still partially reeling over the horribly broken OpenGL implementation in the original 2.0 release hence 2.0.1 a month later. My large/main client who I was actually white labeling Typhon through at the time dropped me because of the delay incurred wishing to point their finger solely at me for any delay despite the engineering reality… hmph.. pointy haired folks can suck! ;P ok this besides the point.. ;P

    We have MotionEvent and a lacking API because a deeper more long term architecture analysis was not done prior to implementation at Android 1.X and neither for 2.X.

    “Object used to report movement (mouse, pen, finger, trackball) events. This class may hold either absolute or relative movements, depending on what it is being used for.”

    That is the only description in the API docs for what MotionEvent does. The key phrase of the sentence is “depending on what it is being used for” and that is not limited to just absolute or relative movements. MotionEvent may be a touch event or a trackball event too depending on what it is being used for… A more object oriented event design would have not only split up MotionEvent distinguishing whether it is a touch event or trackball event, but also whether it is an absolute or relative event. The Java SE environment got it right. There is MouseEvent and MouseMotionEvent. There were precedents and if the Android team was not rushed this surely would have been better architected.

    The crucial issue surrounding MotionEvent from an object oriented perspective is that it breaks the Observable design pattern (from the classic GOF – err Gang of Four book from the mid 90s). Listeners / event listeners can be considered an implementation of the Observable pattern. That is a one to many relationship essentially. In the case of an event system where there is potentially many separate listeners you want to be able to provide an early out. This means that once a given listener has consumed the event you stop forwarding on that event to further potential listeners. The way multitouch has been tacked onto MotionEvent breaks this early out mechanism as it is impossible to have a single listener consume just one of the possible touch event sources and mark just that touch source as consumed. IE a listener can’t utilize touch point 1 and mark it consumed and forward on the event to listener 2 that is only interested in touch point 2. Listener 2 can’t determine if all touch inputs have been potentially consumed and provide the early out before listener 3 or any number of additional listeners. It is an all or nothing (re kitchen sink) situation with MotionEvent. Either the whole event is consumed or nothing at all.

    The solution as I’m implementing it in Typhon is to apply proper OO design. Not only is there the familiar MouseEvent / MouseMotionEvent (named “mouse” because Typhon is cross platform, so this is used for the trackball!), but also TouchEvent and TouchMotionEvent. When a MotionEvent arrives at the event converter component of Typhon as a touch event it is actually split apart into several discrete TouchEvent or TouchMotionEvents depending on the data contained in the single MotionEvent. One MotionEvent can potentially generate many more discrete events. These discrete events can be handled in a much easier and OO manner.

    Also as mentioned the Typhon input converter component can take plugin components to filter/process events depending on OS version, device family, or specific device. These input filters can address not only splitting up the events, but can also contain the logic to mitigate or reduce deficiencies with a given devices short comings such as the axis aligned issue.

    A potentially creative way to use an input filter is to also provide macro functionality or turn say one key event into several in a chain.

    I will see about releasing a multitouch demo this week with any filtering improvements I may come up with and such..

    Anyway.. I recognize this is long winded and perhaps not the right forum, but heck this is the post and example data / video that helped me not waste time and get started on the OO path described above. I really like my N1 and there will be better devices soon with better hardware, etc. What really is at issue here is that developers need to make a loud noise too as it’s not just end / mainstream users that are getting the short end of the stick with the kitchen sink approach. That this is exposed at the top level API and not buried/handled at a much lower level is of reasonable concern for the future of Android. These kinds of architecture decisions should cease and proper OO design really needs to be considered. If big G continues this haphazard pace moving forward this will only increase fragmentation.

    Overall.. I really like Android and all.. So this post is not anti-Android. If anything it is very pro-Android considering that the future can be changed for the better if we all make noise in our own way I suppose.. :)

    • http://Website TuxBobble

      Hey Mike…I’m curious, are there any demo apps that run your middleware (is it release-ready yet?) currently on the market? I’m just curious to see for myself. I’m personally a Droid user, so this issue doesn’t affect me the same way it would affect an HTC user, but I’m still interested–I’m a new graduate and starting a career as a developer, not in Android, but with Android as a personal “hobby” development project.

      And I’m just curious to see if there’s a demo of any application using your middleware on the market. I.e. one version with, one without. Youtube would be fine too, even if it was just a demo of this type of application running on your middleware, detecting points accurately, comparing one to the other. It just seems like it would be a tough bug to ACCURATELY fix, although my touch/gesture algorithm knowledge is very minimal at this state in my career…

      • http://www.typhon4android.org Mike Leahy

        >Hey Mike…I’m curious, are there any demo apps that run your middleware (is it release-ready yet?) currently on the market?

        This is a fair question. There isn’t presently an app on the market. I will be putting up a beta test app that will provide a demo for multitouch and the filtering fix I’m working on quite likely by the end of next week.

        Send me a message at the contact email address on the Typhon web page and I’ll let you know when it hits the market.

        On launch of Typhon I will be releasing a comprehensive tutorial suite app that contains demos of all the tutorial content I’m releasing in addition to linking YouTube videos on the content directly inside the app. Of course there is Auriga3D as well which is a pure Java based 3D engine that loads Q3 assets.

        Likely the initial demo to show up at the end of next week or so will be called “multitouch input test” to find it on the market. I will include 2D and 3D scenarios that require axis aligned control overlays and thus will trigger the issue with the HTC devices and others with single or dual touch tech. You’ll be able to switch the filtering on and off and quite likely I’ll have additional overlays that show the actual data compared to the filtered data all in the context of a simple game scenario.

        >”I’m a new graduate and starting a career as a developer, not in Android, but with Android as a personal “hobby” development project.”

        Most excellent! Welcome to the industry and I’m sure you’ll enjoy Android dev. It is a fun and exciting community to be a part of or simply dabble with as time permits.

        >It just seems like it would be a tough bug to ACCURATELY fix, although my touch/gesture algorithm knowledge is very minimal at this state in my career…”

        Yeah.. It’s not going to be possible to fix it entirely, but through a little intelligent filtering the goal is reducing the perceived negative impact. In this case the filtering component is able to be on the Typhon clock/timing mechanism (60 hz callback) and algorithmically defined touch events can be generated when axis aligned or flipped cases are detected. The key is that with Typhon there is a middle component listeners can attach to instead of the default Android event system. This middleman event aggregator and conversion component can take other input filter plugins/components to do device/scenario specific filtering.

        For my purpose and in the multitouch input test demo app this will be reducing the impact / poor control for axis aligned controller overlays. An example is 3D nav with two overlays. One on the left controls movement (forward/backwards/strafe left/strafe right) and the on the right controls rotation/look. In this case one wants to minimize the axis aligned scenario to prevent the situation where manipulating both controllers at once will lock the other touch point/controller and cause the entity being controlled to either move or rotate depending on which touch point becomes axis aligned / locked.

        The way MotionEvent stands now it is heavyweight and requires each listener to parse it’s contents with non scalable if/else/switch logic and as mentioned without the ability to mark any of the data as consumed. An event itself should just be a conduit for data and not require heavy parsing. At most two switch statements should be necessary to parse a touch oriented event for any number of touch points, but that simply is not the case with MotionEvent. You can see in Robert’s test code which is extremely simple insofar that it only works with up to 2 touch points, but still requires multiple if/else tests. The same code if extended to more points is not scalable for say supporting up to 10 touch points. Each touch point should have separate events just carrying the data for that particular touch point.

        Err.. Also in the above post I referred to the “Observable” design pattern. I mean “Observer”. You can also find folks reference the scenario described as the listener pattern.

  • http://Website teleknEsis

    Cyanogen just posted this on xda:

    Interestingly, there is a hack in the framework (which is enabled on the Droid, but not on the N1) that can be enabled by setting config_filterTouchEvents. With it disabled (the default), I get the axis-flipping problem. Enabling it fixes this, but there are still issues with the points “sticking” when they cross.

    • http://www.typhon4android.org Mike Leahy

      Well that is positive news that at least there is some attempt at the lower level framework to handle the issue. It would be nice to see Robert’s multitouch demo with a Droid & ROM that has this setting set to false disabling the filtering. As long things are still inconsistently deployed to the ecosystem / on mainstream users devices it’s a moot point to have an unused flag/functionality at a lower level of the framework.

  • http://www.batterypoweredgames.com Robert Green

    For those of you who think that somehow the code is wrong, I posted all of the source for everyone to look at and scrutinize. It’s pretty hard to say I somehow messed up the values when I passed x1,y1 and x2,y2 directly from the touch event to a draw method that puts circles of different colors there and does nothing more, but go ahead and check out this link to be sure :)

    http://www.rbgrn.net/content/367-source-code-to-multitouch-visible-test

  • http://Website Shawn

    Could it be possible that it’s done on purpose, lets say to be different from other “multi-touch” pattern technologies, to….lets say foresee a patent infringement accusation assumption?

  • http://Website jon

    So glad that I bought a Droid. I just updated to Pete’s ERD25 Android 2.1 Rom. It’s fast even without overclocking.

    I think the Droid has always been the better of the two. I don’t care for OLED as I can barely see my Zune HD in bright sunlight. And the full QWERTY keyboard is just simply worth having.

  • http://Website Anonymous

    Droid Does!

  • http://dylandersen.me/ Dylan Andersen

    You just got main page Engadget love, Taylor. Congrats bro!

  • Pingback: Nexus One’s multitouch confused more easily than Droid’s? | CPUTER.COM()

  • http://Website G3NK1E

    Wow. You just made me love my Droid that much more! Thanks!

  • http://Website archboy69

    Now I understand why the multi-touch can be all wacky! I’ve been getting the crazy screen reaction much more lately. Especially, after long periods between rebooting. Sometimes I don’t reboot for a day or two and the touchscreen is completely unresponsive unless I reboot. I hope they fix this issue!

  • http://Website Jak Crow

    I often run into a screen problem on my N1 where touches on the bottom portion is the screen are shifted one row down. This affects using the on screen keyboard showing keypresses on the row under what I really touched. I have to play around with the screen or reboot to clear the problem. anyone else experience this?

  • http://Website Fredrik

    Will this issue arise on the screen used in the HTC DESIRE?

  • http://www.sebastian-kleinau.de Sebastian

    I am working on a FTIR Do-It-Yourself Multitouch-Table at university. From reading many papers about multitouch I know about a capacitive system called DiamondTouch where this effect also happens and is called “shadowing”.
    At the “Internation Tabletops and Surfaces 2009″ conference a paper by Berard and Laurillau was published that tries to solve that. Take a look at it (http://iihm.imag.fr/publs/2009/ITS2009_Berard_DTMultiTouch.pdf) on page 2 figure 2.
    It shows exactly the same problem as the Nexus one and indeed is caused by the hardware.

  • http://Website touchDown

    This ghosting is a limitation of the hardward and there is no SW workaround. This is due to the method of independently sensing on X and Y axis. This technology is called “self capacitance” and cannot provide the visibility to actual finger location vs phantoms when more than 1 finger is present.

    In contrast, to do true multitouch, “mutual capacitance” technology is required which has drive on one axis and sensing on the other. This provides full visiblitiy to do all points addressable.

    For the simple 2 finger gestures, 2 finger tracking using self capacitance is usually good enough but this is generally not classified as multi-touch

  • http://Website mihaelb

    Does the Desire have the same touch-screen technology?

  • http://Website Jason Vail

    I have the same behavior on the myTouch3G running CM4.2.15 with Eclair bits ported from 2.1.

  • http://Website Toby

    Does the Desire have the same touch-screen technology?

  • http://youtube.com/patsandsoxfan5 alex

    Well it does a whole lot better at multitouch than my CLIQ

  • http://Website steve

    Same multi touch problem on the mytouch 3g

  • Pingback: Remainders – The Things We Didn’t Post: Multi-Edition [Remainders] « Chezetech()

  • http://Website Matt

    This explains some of the weird keyboard behavior I’ve seen on my Hero. Very disappointing that they used such shoddy hardware.

  • http://Website james

    See this: Proves the app software was faulty to begin with.

    http://www.androidcentral.com/throwing-fuel-nexus-one-and-moto-droid-multitouch-fire

    • http://Website mihaelb

      I think you misunderstood his point…he meant to say that the software they originally used (to demonstrate the Nexus One getting confused with multipoint on occasion) showed a lot more problems than there actually are with various programs. The author of that article used a different touch-tracking software, which showed a lot less problems.

  • http://Website raimchakar

    still no answer about Desire? Is it the same manufacturer of the display?

    • http://Website Touchdown

      I don’t know what’s in the Desire, but I do know that the one that works well has an Atmel controller and the one that has ghosting problems is a Synaptics controller

  • Pingback: A closer look at HTC’s touch sensors – Android and Me()

  • Pingback: A closer look at HTC’s touch sensors | Androidheadlines.com()

  • http://looris.net Lo’oris

    Keep pressed in the lower left corner.
    Then press in the upper right.
    It will work.

    But as soon as you release your right finger, for a moment the bottom right will detect a ghost press.

    This might be a major problem in games, but even if it’s an hardware issue, it looks like the kind of problem that could be corrected via software.

  • http://hejp.co.uk/ hejp

    This is quite a big let down. I won’t be buying a another HTC phone.

    Having said though just making sure that the controls aren’t level on a particular axis shouldn’t that hard…

  • Pingback: HTC Incredible and EVO 4G to feature new maXTouch sensors – Android and Me()

  • http://Website Ahmed Eltawil

    I don’t know why you guys make it a big deal. The multi-touch on the Nexus One works like a charm for most (if not all) types of actions on the screen. If you will be going deep into real-time data coming from the screen’s multi-touch capability, then yes, you might see some inconsistency or issues, but you can also get similar issues if you try to deeply test many other hardware on several other popular smartphones.

    It’s like someone is intentionally trying to find a problem on a particular hardware so he’s digging deeper into its guts. Well guess what guys, nothing is perfect.

    Just enjoy your Nexus One for what it promised to do and does well. Don’t get picky.

    • http://www.typhon4android.org/ Mike Leahy

      >The multi-touch on the Nexus One works like a charm for most (if not all) types of actions on the screen.

      The most rudimentary of 2 finger actions like pinch/zoom.. That is about it.

      True multitouch is important for games and many innovative and creative multimedia applications.

      >but you can also get similar issues if you try to deeply test many other hardware on several other popular smartphones

      Not on the iPhone, the Motorola Droid and now the HTC Incredible & EVO 4G.

      In this case the N1 was improperly specified by Google to HTC. I guessing, but lets say a fair conjecture is that Google had plenty of foresight into the availability of multitouch APIs when they told HTC to make the N1 given that they knew it’d launch with a 2.x Android OS. Since the Motorola Droid has a capable touch screen the N1 should not have lack one of similar quality or better.

      >Just enjoy your Nexus One for what it promised to do and does well. Don’t get picky.

      Tell that to all the folks that have a 2 year contract. I’m a developer and have many Android phones, but it’d perturb me if I was on a 2 year contract especially now just a few months later the HTC Incredible & EVO 4G support it just fine.

      It would have been better if Google PR leading up to the N1 launch didn’t dodge & defer every question regarding multitouch. If Google came out and said up front the N1 supports dual touch w/ limitations then it would have matched the actual experience. I’m afraid “dual touch w/ limitations” isn’t as “sexy” as multitouch.

  • Pingback: Oops! Google Nexus One Has a Major Multitouch Problem()

  • Pingback: Mobility Digest - Google closes up cell shop.()

  • Pingback: Information Technology Leader » Blog Archive » Android 2.2 rumors: blazing speed, tethering, full Flash support, and more()

  • Pingback: Android 2.2 Rumors: Tethering, Flash, & More! | LimeWedge.net()

  • Pingback: عالم الحاسب والتقنيه » أرشيف المدونة » Nexus One يعاني من مشكلة في اللمس ا()

  • Pingback: Samsung Galaxy S to also feature Atmel maXTouch sensors – Android and Me()

  • Pingback: Samsung Galaxy S to also feature Atmel maXTouch sensors | Android Application [dot] us()

  • Pingback: jake's blogh()

  • Pingback: High-end Android phones benchmarked with Quadrant | News URL()

  • Pingback: High-end Android phones benchmarked with Quadrant « GUYZCAVE()

  • Pingback: Android Evolved: The Sprint EVO 4G review – Android and Me()

  • Pingback: Android Evolved: The Sprint EVO 4G review | Android Application [dot] us()

  • http://wearepharaoh.com alex grande

    Developers who are building for the android platform and who have purchased a nexus one should be sent a new phone. A friend spent 8 hours trying to fix that bug before finding this blog post.

  • Pingback: How to get rock solid multi-touch input finger tracking on iOS « Code Dojo()

  • http://www.kacaudah.com Joel Lucear

    I am really enjoying the theme/design of your web site. Do you ever run into any web browser compatibility issues? A couple of my blog visitors have complained about my blog not working correctly in Explorer but looks great in Safari. Do you have any recommendations to help fix this problem?

  • http://www.kacaudah.com Vito Tewell

    Hey! I just wanted to ask if you ever have any trouble with hackers? My last blog (wordpress) was hacked and I ended up losing months of hard work due to no data backup. Do you have any methods to protect against hackers?

  • http://www.squidoo.com/sony-ericsson-xperia-arc-x12- Sony ericsson xperia arc x12

    maybe nexus one not can be perfect

  • http://Website Nexus lover

    I will waiting for new Dual core android phones nexus phones

  • Pingback: The four strangest bugs and bungles in the history of Android | CD DISK()

  • Pingback: The four strangest bugs and bungles in the history of Android | Andriod()

  • Pingback: motorola droid has better touch screen than nexus one? | Droid X2 Life: A Droid X2 Community Blog - All about Android and the DROID X2 lineup of phones, Rooting, Apps, Reviews and Videos.()

  • Pingback: Nexus One Multitouch inferior to Droid's - Network Wiring()

  • Pingback: Nexus One v/s Droid Touch screen | Geekword()