)]}'
{
  "log": [
    {
      "commit": "6b7fcc8f6754f0bf7a406834a6dc066710a9de51",
      "tree": "5dea685569aaba5d36f7cb9576c649f9c832486a",
      "parents": [
        "8ca4642b7460057be0ee8ba97633d6fb1dfcd532",
        "75701e8fc92285680637f69e0f004741919ddc10"
      ],
      "author": {
        "name": "Jeffrey Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed Feb 06 20:56:07 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 06 20:56:07 2013 -0800"
      },
      "message": "am 75701e8f: am 7eb4db35: am b9185fd1: Merge \"Fix PointerCoords Parcel incorrectly storing values as Int32\"\n\n# By Ilya Polenov\n# Via Android Git Automerger (2) and Gerrit Code Review (2)\n* commit \u002775701e8fc92285680637f69e0f004741919ddc10\u0027:\n  Fix PointerCoords Parcel incorrectly storing values as Int32\n"
    },
    {
      "commit": "1df477acf60538f9de18bd597e090d075fa83509",
      "tree": "a163bd932074c49b9fac6792ca85d12569559dd5",
      "parents": [
        "b06870bf49055721bd43b5bbd742feb8422fc071"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Jan 31 16:19:18 2013 -0800"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Feb 01 16:29:59 2013 -0800"
      },
      "message": "Add initial plumbing for brightness keys\n\nChange-Id: I595e8a25e6c245e4b22f06df9a8acdbb75e4b041\n"
    },
    {
      "commit": "716f7b3f5e29adedf1cd5c11529d9cfd82246897",
      "tree": "4e38b37b38069168d527b9224bd5598ea762b7f9",
      "parents": [
        "7ad885e2e6c845dbec4f16cd71e859240741dbf9"
      ],
      "author": {
        "name": "Ilya Polenov",
        "email": "daioptych@gmail.com",
        "time": "Mon Dec 10 10:19:58 2012 +0400"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 30 10:15:00 2013 +0000"
      },
      "message": "Fix PointerCoords Parcel incorrectly storing values as Int32\n\nPointerCoords stores its values as float and its Parcel should\ndo the same. Wrong behaviour may be noticed when MotionEvent is\ninjected using Instrumentation method sendPointerSync. All its\nPointerCoords values(size, orientation, pressure, etc) will be\ncasted to integer omitting their decimal part. This fix addresses\nthis issue.\n\nChange-Id: Ifa3dfce4d5c2e6c060852f4208cb5684e827c7e6\nSigned-off-by: Ilya Polenov \u003cdaioptych@gmail.com\u003e\n"
    },
    {
      "commit": "7174a491bc1f89da65eaef3be25f3ea3f3e3bab5",
      "tree": "2171b655c03b965e92a68889ff5bdfea6da10757",
      "parents": [
        "85bd0d62830a098c1bdc720dfdcf4fe1b18b657c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 14 17:00:27 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 14 18:31:53 2012 -0700"
      },
      "message": "Improve touch event resampling.\n\nFixed a few bugs related to the id-to-index mapping for\npointer coordinates.\n\nTightened the bounds on the resampling time interval to\navoid predicting too far into the future.\n\nOnly lerp X and Y components of motion events.\n\nAlter the future to satisfy past predictions.  (Rewrite touch\nevents to conceal obvious discontinuities.)\n\nAdded a system property to control whether resampling is enabled\nfor debugging purposes.\n\nBug: 6375101\nChange-Id: I35972d63278bc4e78148053a4125ad9abeebfedb\n"
    },
    {
      "commit": "8a90e6e3174083f274538567d851f98478fc83e9",
      "tree": "2ac01015731bac0d759c8e7b6526ffa4874a369b",
      "parents": [
        "2f0957607411b99810226ad38d59cf18718b86d0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 11 12:24:35 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 11 12:32:56 2012 -0700"
      },
      "message": "Minor refactoring before starting on velocity tracker changes.\n\nBug: 6413587\nChange-Id: I5eba2bb57193bff78cb3740de5f87aca0b31d154\n"
    },
    {
      "commit": "771526c88f5cc4b56a41cb12aa06a28d377a07d5",
      "tree": "71c36f271192ee66f069f0d1130a73e91b8302b9",
      "parents": [
        "330314c6fb7c178c0f0da65d6aa8c9e7d3004568"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:13:25 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:58:42 2012 -0700"
      },
      "message": "Resample touch events on frame boundaries.\n\nBug: 6375101\nChange-Id: I8774e366306bb2b6b4e42b913525bf25b0380ec3\n"
    },
    {
      "commit": "9f25b7fdf216c9ef0bd2322cd223eeaf0d60f77f",
      "tree": "b0b509a261874435cab3f5f1a727c02b399bd91c",
      "parents": [
        "54ae14749bc7f9e73cfda35a8b49f9efa80a77fb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 14:30:49 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 18:23:58 2012 -0700"
      },
      "message": "Request key maps from input manager service.\n\nInstead of each application loading the KeyCharacterMap from\nthe file system, get them from the input manager service as\npart of the InputDevice object.\n\nRefactored InputManager to be a proper singleton instead of\nhaving a bunch of static methods.\n\nInputManager now maintains a cache of all InputDevice objects\nthat it has loaded.  Currently we never invalidate the cache\nwhich can cause InputDevice to return stale motion ranges if\nthe device is reconfigured.  This will be fixed in a future change.\n\nAdded a fake InputDevice with ID -1 to represent the virtual keyboard.\n\nChange-Id: If7a695839ad0972317a5aab89e9d1e42ace28eb7\n"
    },
    {
      "commit": "e38fdfae9196afd1bdc14c5ec6c12793af1e2550",
      "tree": "54523ccf3fc36a1b50410e2cb6e6d1f7230c40cf",
      "parents": [
        "dc0dbbd4a005f16624978b95817b33156acac526"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 06 14:51:01 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 06 14:57:19 2012 -0700"
      },
      "message": "Add a unique input device descriptor.\n\nThe purpose of the input device descriptor is to make it possible\nto associate persistent settings for each input device, such as the\nkeyboard layout.\n\nThe descriptor is a hash of the information we have about the\ndevice, such as its vendor id, product id, unique id, name,\nor location.\n\nBug: 6110399\nChange-Id: Idb80f946819b3f0dbf4e661bb0a753dbc2b60981\n"
    },
    {
      "commit": "2b6c32ca4177f1a97307f9cbd81ca485df28762c",
      "tree": "abc217f8ff191ce1ecc7c4eb9b51185b6d47625d",
      "parents": [
        "b2679481b57d87945df02983f95ff8e6c9ba5928"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 13 15:00:09 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 13 15:00:09 2012 -0700"
      },
      "message": "Fix spurious ANRs in native activities.\n\nSome native activities experienced ANRs when the input consumer\ndeferred an input event due to client-side batching.  If the\ninput channel was fully emptied then the client had no way of\nknowing that it should wake up to handle the deferred input event.\n\nThis patch also fixes some lock issues in the native activity\ninput queue implementation.  In at least one error case, it\nwas possible for a function to exit without releasing the lock.\n\nBug: 6051176\nChange-Id: I4d9d843237e69b9834f8d8b360031b677fcab8c3\n"
    },
    {
      "commit": "83c64e6b624a876436d2ef5d2f173b10407e27b4",
      "tree": "c4effc3260ab399e8fdae23baf06b076cd87a604",
      "parents": [
        "94d0024557f415b8463f085c9784a3e1d02b58c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 16:58:20 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Feb 20 22:38:43 2012 -0800"
      },
      "message": "frameworks/base refactoring\n\ncreate the new libandroidfw from parts of libui and libutils\n\nChange-Id: I1584995616fff5d527a2aba63921b682a6194d58\n"
    },
    {
      "commit": "b93a03f841d93498bfea6cc92a22faa34bce1337",
      "tree": "b5c2e1c097ad9dc4a3580ee661223794e0560f60",
      "parents": [
        "e97df97b6cb5e4bff8f9da9ecff7cddb7d04ff41"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 15:34:57 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 15:36:10 2012 -0800"
      },
      "message": "frameworks/base refactoring.\n\nFirst step. Move libui includes to their new home: androidfw.\n\nChange-Id: Ic042b52fdba72f30edc3cc6339bf30b4c1b99662\n"
    },
    {
      "commit": "8564c8da817a845353d213acd8636b76f567b234",
      "tree": "71acbd8ace822c769aef917629bf5a079f63274d",
      "parents": [
        "c42e6a0bed2c88fd03466c5104d62d7f98e68768"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "5baa3a62a97544669fba6d65a11c07f252e654dd",
      "tree": "109755e1595b438873d34b981e31f84ea64bd2a5",
      "parents": [
        "173ab4d61077c49f115b82eff34f97fda5a7273a"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "b0c71eb9f50ce06327fa6bb6219f0970e04fd856",
      "tree": "d6b88ffc318ae23124c750faf2dc0f873e97e0cf",
      "parents": [
        "1afeea0f207f8b8b781f799f5d150b70495abb1a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 16 21:40:49 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 16 21:43:58 2011 -0700"
      },
      "message": "Can\u0027t stop the fling!\nBug: 5335420\n\nFixed a bug in VelocityTracker where the output velocity was\nnot being set to zero when not available.\n\nAdded a condition to ensure that the velocity is at least\nthe minimum fling velocity before continuing.  If not, then\nthe user is trying to stop the fling and scroll more precisely.\n\nChange-Id: I36634b0c3f7a9a09cf20c33f71d41163a8e33eed\n"
    },
    {
      "commit": "b59ab9f41faafb358afb4f951de96f34a656e0b4",
      "tree": "2fe7eefa2f4a044df7440378691264b644fc93f5",
      "parents": [
        "aab55bf3e323b73062bd932682886b19c062a8a0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 14 10:53:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 14 19:16:37 2011 -0700"
      },
      "message": "Velocity Tracker II: The Revenge of Velocity Tracker\nBug: 5265529\n\nRewrote the velocity tracker to fit a polynomial curve\nto pointer movements using least squares linear regression.\nThe velocity is simply the first derivative of this polynomial.\n\nClients can also obtain an Estimator that describes the\ncomplete terms of the estimating polynomial including\nthe coefficient of determination which provides a measure\nof the quality of the fit (confidence).\n\nEnhanced PointerLocation to display the movement curve predicted\nby the estimator in addition to the velocity vector.\n\nBy default, the algorithm computes a 2nd degree (quadratic)\npolynomial based on a 100ms recent history horizon.\n\nChange-Id: Id377bef44117fce68fee2c41f90134ce3224d3a1\n"
    },
    {
      "commit": "581761d4aa0133fe7354cc9e4a5dd3d9d7258c5f",
      "tree": "b54e8f590d67a5a90d1ec19f66f58a47acee4fa4",
      "parents": [
        "bfcb60ab0f696c8ef70830c365550e62fe2808bf"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 09 15:39:35 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 09 16:04:09 2011 -0700"
      },
      "message": "Tweak VelocityTracker.\nBug: 5265529\n\nCalculate the velocity using the most recent touch sample as the\npoint of reference instead of the oldest.  This change more heavily\nweights recent touch samples and reduces the sample time window\nused for calculation.  This significantly improves the accuracy\nof fling gesture detection.\n\nChange-Id: Ib1940933e786e5f6a731552a99bcd9400741d55f\n"
    },
    {
      "commit": "be1aa8250cee7819c49741e819e81659d1d03823",
      "tree": "3041a44459110da304f930b1a3ebcbd042291999",
      "parents": [
        "ad65b46d5f6c569b588556dcf85b64d59600b175"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 27 16:04:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jul 31 15:38:09 2011 -0700"
      },
      "message": "Refactor input reader to add stylus support.\nBug: 5064702\n\nIntroduced the concept of an InputListener to further decouple\nthe InputReader from the InputDispatcher.  The InputListener\nexposes just the minimum interface that the InputReader needs\nto communicate with the outside world.  The InputReader\npasses arguments to the InputListener by reference, which makes\nit easy to queue them up.\n\nConsolidated all of the InputReader locks into one simple global\nMutex.  The reason this wasn\u0027t done before was due to potential\nre-entrance in outbound calls to the InputDispatcher.  To fix this,\nthe InputReader now queues up all of the events it wants to send\nusing a QueuedInputListener, then flushes them outside of the\ncritical section after all of the event processing is finished.\nRemoving all of the InputMapper locks greatly simplifies the\nimplementation.\n\nAdded tests for new stylus features such as buttons, tool types,\nand hovering.\n\nAdded some helpers to BitSet32 to handle common code patterns\nlike finding the first marked bit and clearing it.\n\nFixed a bug in VelocityTracker where the wrong pointer trace\ncould get cleared when handling ACTION_POINTER_DOWN.  Oops.\n\nChanged PointerCoords so it no longer stores useless zero\naxis values.  Removed editAxisValue because it is not very\nuseful when all zero value axes are absent and therefore\ncannot be edited in place.\n\nAdded dispatch of stylus hover events.\n\nAdded support for distance and tool types.\n\nChange-Id: I4cf14d134fcb1db7d10be5f2af7b37deef8f8468\n"
    },
    {
      "commit": "72c7362080c355c538ae2c46ac03501689e73736",
      "tree": "ece506fbc4beeacc5bff2a6266dbb2d00e203f8f",
      "parents": [
        "051e8f2bfa3ada8ee64d8a4f4d69ad9286209516",
        "61220e880ac4d9d76b7fd50744439e68e929c697"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 17:52:30 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 07 17:52:30 2011 -0700"
      },
      "message": "am 61220e88: am bbbab26e: am 2c180499: Merge \"Revert velocity damping. Bug: 4364920\" into honeycomb-mr2\n\n* commit \u002761220e880ac4d9d76b7fd50744439e68e929c697\u0027:\n  Revert velocity damping. Bug: 4364920\n"
    },
    {
      "commit": "ac55c2b1ea5c4a1284bf06744380bf32e6aeb7d6",
      "tree": "4bda0a1efedd7851c45ac63d54b3ca4b773a7320",
      "parents": [
        "cb5ffcf0e41d2597401208221c61589547a00f3d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:23:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:23:54 2011 -0700"
      },
      "message": "Revert velocity damping.\nBug: 4364920\n\nVelocity damping proved to be a bad idea because it would\ncause a significant ramp in velocity at the beginning of\na gesture, instead of the desired smooth behavior.  Oh well.\n\nChange-Id: Ie631946f47ef2492bd71fbed1ab44bbb39a875a8\n"
    },
    {
      "commit": "a742f854901b8306d3696c9e9b7881c207130a01",
      "tree": "f5dc2db12546bd5a0835fb62058882f7587f3e7c",
      "parents": [
        "bb718776a1f77c293d22140775706655a1605807",
        "56503b8ddfe5c82407da32e18061e725f668432d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Fri Jun 03 15:30:33 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 03 15:30:33 2011 -0700"
      },
      "message": "am 56503b8d: am 8186a5f0: am 10c3f367: Merge \"Implement pointer acceleration.\" into honeycomb-mr2\n\n* commit \u002756503b8ddfe5c82407da32e18061e725f668432d\u0027:\n  Implement pointer acceleration.\n"
    },
    {
      "commit": "19c97d46fb57f87ff45d9e6ea7122b4eb21ede8c",
      "tree": "4cb7adbcc382269d7b0eeddd0043b9a9e0c71a7a",
      "parents": [
        "2969b51132b80c873663aa2472b21d3e95845927"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed Jun 01 12:33:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Thu Jun 02 14:12:05 2011 -0700"
      },
      "message": "Implement pointer acceleration.\n\nBug: 4124987\nChange-Id: I1f31a28f1594c55302ccabe13fe3ca6d2ff71d50\n"
    },
    {
      "commit": "86ea1f5f521981d075aef56f11693e4f3bc32fdb",
      "tree": "72e1e44513d3e9e204a4fbd2855a079822e949eb",
      "parents": [
        "a6dbfdd3a858aac52cc87f80f91e8eef7d613605"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:17 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: Ib647dbd7a57a7f30dd9c6e2c260df51d7bbdd18e\n"
    },
    {
      "commit": "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b",
      "tree": "0e00adeba7368949783dd598b57b70a4936f8e9b",
      "parents": [
        "96ad3979f328a1aa098917ca1c35575e85345526"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:59 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability. (DO NOT MERGE)\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I95054102397c4b6a9076dc6a0fc841b4beec7920\n"
    },
    {
      "commit": "96ad3979f328a1aa098917ca1c35575e85345526",
      "tree": "a703eeeda8430c955738efd047616bc6a47a32e1",
      "parents": [
        "40277df7c33c0fc381eec589c768fe86de4b4404"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:38 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I7b7ddacc724fb1306e1590dbaebb740d3130d7cd\n"
    },
    {
      "commit": "fe9f8ab03a63b1037f07dd85799fbea80ec6adaa",
      "tree": "c0cfa91d0537321eeee0ede693fb414d8778a1a2",
      "parents": [
        "1abf1c59f8b15d5b4b198063b884e268bd79fb32"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 06 18:20:01 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 13 12:11:17 2011 -0700"
      },
      "message": "Add initial API for stylus and mouse buttons.\n\nAdded the concept of pointer properties in a MotionEvent.\nThis is currently used to track the pointer tool type to enable\napplications to distinguish finger touches from a stylus.\n\nButton states are also reported to application as part of touch events.\n\nThere are no new actions for detecting changes in button states.\nThe application should instead query the button state from the\nMotionEvent and take appropriate action as needed.\n\nA good time to check the button state is on ACTION_DOWN.\n\nAs a side-effect, applications that do not support multiple buttons\nwill treat primary, secondary and tertiary buttons identically\nfor all touch events.\n\nThe back button on the mouse is mapped to KEYCODE_BACK\nand the forward button is mapped to KEYCODE_FORWARD.\n\nAdded basic plumbing for the secondary mouse button to invoke\nthe context menu, particularly in lists.\n\nAdded clamp and split methods on MotionEvent to take care of\ncommon filtering operations so we don\u0027t have them scattered\nin multiple places across the framework.\n\nBug: 4260011\nChange-Id: Ie992b4d4e00c8f2e76b961da0a902145b27f6d83\n"
    },
    {
      "commit": "aa9d84c37e05f696ec158dac98ce38cf41e18314",
      "tree": "49a8e08d51840eec7ff20b624c59408f2f7523aa",
      "parents": [
        "28e77e616d8f005c8e07d6f28a83f8ca9772aedf",
        "05be6d6fe09ddfb706d1bef3b20c3d37f45e3c8a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 09 19:00:59 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 09 19:00:59 2011 -0700"
      },
      "message": "resolved conflicts for merge of 05be6d6f to master\n\nChange-Id: Ic6a6c5bb300f6f1d43f9ed550b284282b4f16212\n"
    },
    {
      "commit": "e2515eebf42c763c0a2d9f873a153711778cfc17",
      "tree": "ee159940f05c439d0524771bfbfe6b551c82c2d4",
      "parents": [
        "158e3582c03ab9e0221718da20fc8854bb9216d0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 27 18:52:56 2011 -0400"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 09 17:03:24 2011 -0700"
      },
      "message": "Better compat mode part one: start scaling windows.\n\nFirst step of improving app screen size compatibility mode.  When\nrunning in compat mode, an application\u0027s windows are scaled up on\nthe screen rather than being small with 1:1 pixels.\n\nCurrently we scale the application to fill the entire screen, so\ndon\u0027t use an even pixel scaling.  Though this may have some\nnegative impact on the appearance (it looks okay to me), it has a\nbig benefit of allowing us to now treat these apps as normal\nfull-screens apps and do the normal transition animations as you\nmove in and out and around in them.\n\nThis introduces fun stuff in the input system to take care of\nmodifying pointer coordinates to account for the app window\nsurface scaling.  The input dispatcher is told about the scale\nthat is being applied to each window and, when there is one,\nadjusts pointer events appropriately as they are being sent\nto the transport.\n\nAlso modified is CompatibilityInfo, which has been greatly\nsimplified to not be so insane and incomprehendible.  It is\nnow simple -- when constructed it determines if the given app\nis compatible with the current screen size and density, and\nthat is that.\n\nThere are new APIs on ActivityManagerService to put applications\nthat we would traditionally consider compatible with larger screens\nin compatibility mode.  This is the start of a facility to have\na UI affordance for a user to switch apps in and out of\ncompatibility.\n\nTo test switching of modes, there is a new variation of the \"am\"\ncommand to do this: am screen-compat [on|off] [package]\n\nThis mode switching has the fundamentals of restarting activities\nwhen it is changed, though the state still needs to be persisted\nand the overall mode switch cleaned up.\n\nFor the few small apps I have tested, things mostly seem to be\nworking well.  I know of one problem with the text selection\nhandles being drawn at the wrong position because at some point\nthe window offset is being scaled incorrectly.  There are\nprobably other similar issues around the interaction between\ntwo windows because the different window coordinate spaces are\ndone in a hacky way instead of being formally integrated into\nthe window manager layout process.\n\nChange-Id: Ie038e3746b448135117bd860859d74e360938557\n"
    },
    {
      "commit": "2352b978a3c94cd88f41d0d908f961333fdac1e9",
      "tree": "24f8f19e9b2895cc2c3489bf2dd7a09aaf5834db",
      "parents": [
        "f76dc56c33ba66138af70d72803cf55f881c3717"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 15:35:51 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures.\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: I5126b1e69d95252fda7f2a684c9287e239a57163\n"
    },
    {
      "commit": "b6110c2de0cd7950360aeb2c248a44e4ea5f33f5",
      "tree": "40a28f204c6910b123ffb5a001c1f8673223d330",
      "parents": [
        "bc2278b95f4012d81918b0faedea36011f122a33"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 01 16:15:13 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 01 16:15:13 2011 -0700"
      },
      "message": "Fix dispatcher crash when input monitoring enabled.\nAlso ensure that we actually log assertion failures.\n\nBug: 4203092\nChange-Id: I5c14bc41b2255f876858121f5572e2de75cabcc3\n"
    },
    {
      "commit": "2ed2462aa29c564f5231f317c27b3188da875e52",
      "tree": "63209b0ae028c1353e79d79b5e4000e7c4402ecc",
      "parents": [
        "ace13b17866dc9136aeecf6dfaf7077f37434469"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 15 19:59:47 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability.\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I2632321232c64d6b8faacdb929e33f60e64dcdd3\n"
    },
    {
      "commit": "ace13b17866dc9136aeecf6dfaf7077f37434469",
      "tree": "0ec5d01ef83b4d5148525f5befa28ca026b294c7",
      "parents": [
        "fd10d5cf56e5b1ba7692400e4fe4ae26b61f3285"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 14:12:03 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer.\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I5ada57e7f2bdb9b0a791843eb354a8c706b365dc\n"
    },
    {
      "commit": "efd3266b719eed5f1b217021c0a9e76e4b274b06",
      "tree": "f76032f2a0bdfdc9910860063455116a9c792687",
      "parents": [
        "9e8e40cb5f8aeb0702002eee60d1ce394bf699ee"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 08 15:13:06 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 18:30:28 2011 -0800"
      },
      "message": "Input improvements and bug fixes.\n\nAssociate each motion axis with the source from which it comes.\nIt is possible for multiple sources of the same device to define\nthe same axis.  This fixes new API that was introduced in MR1.\n(Bug: 4066146)\n\nFixed a bug that might cause a segfault when using a trackball.\n\nOnly fade out the mouse pointer when touching the touch screen,\nignore other touch pads.\n\nChanged the plural \"sources\" to \"source\" in several places in\nthe InputReader where we intend to refer to a particular source\nrather than to a combination of sources.\n\nImproved the batching code to support batching events from different\nsources of the same device in parallel.  (Bug: 3391564)\n\nChange-Id: I0189e18e464338f126f7bf94370b928e1b1695f2\n"
    },
    {
      "commit": "56194ebec6212e229f4ccdaa4b187166d20013ef",
      "tree": "51276000061ba703b6ddda32ecce3ce10a06f4f5",
      "parents": [
        "05dc66ada6b61a6bdf806ffaa62617ac5394695d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 19:23:13 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 19:57:07 2011 -0800"
      },
      "message": "Wake screen from external HID peripherals.\n\nAdded some plumbing to enable the policy to intercept motion\nevents when the screen is off to handle wakeup if needed.\n\nAdded a basic concept of an external device to limit the scope\nof the wakeup policy to external devices only.  The wakeup policy\nfor internal devices should be based on explicit rules such as\npolicy flags in key layout files.\n\nMoved isTouchEvent to native.\n\nEnsure the dispatcher sends the right event type to userActivity\nfor non-touch pointer events like HOVER_MOVE and SCROLL.\n\nBug: 3193114\nChange-Id: I15dbd48a16810dfaf226ff7ad117d46908ca4f86\n"
    },
    {
      "commit": "6f2fba428ca5e77a26d991ad728e346cc47609ee",
      "tree": "5dd07c24bd9b474ccfbcba4f63e078598fbd2b50",
      "parents": [
        "b1bdb64d641ac63097619e5ef08d5a25bfdc61bb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Feb 19 01:08:02 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Feb 19 05:23:10 2011 -0800"
      },
      "message": "Add new axes for joysticks and mouse wheels.\n\nAdded API on InputDevice to query the set of axes available.\nAdded API on KeyEvent and MotionEvent to convert keycodes and axes\nto symbolic name strings for diagnostic purposes.\nAdded API on KeyEvent to query if a given key code is a gamepad button.\nAdded a new \"axis\" element to key layout files to specify the\nmapping between raw absolute axis values and motion axis ids.\nExpanded the axis bitfield to 64bits to allow for future growth.\nModified the Makefile for keyboard prebuilts to run the keymap\nvalidation tool during the build.\nAdded layouts for two game controllers.\nAdded default actions for game pad button keys.\nAdded more tests.\nFixed a bunch of bugs.\n\nChange-Id: I73f9166c3b3c5bcf4970845b58088ad467525525\n"
    },
    {
      "commit": "ebbd5d14ad3b1e762d9fcfa026e19413cc857e05",
      "tree": "7f449489b302fddd176f6ab9f85c8e38024fed90",
      "parents": [
        "3b93d3fc1e56eada95246f9ee102c563d22df6d0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 17 13:01:34 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 17 13:01:34 2011 -0800"
      },
      "message": "Fix a regression with MotionEvent parceling.\n\nAlso added some more unit tests.\n\nChange-Id: I413654294d1a998eec056884e6df5eaa50f3daf4\n"
    },
    {
      "commit": "91c69ab01539f7ba28708f41ec1835cc2920d0a0",
      "tree": "04f5dc37a0fa3f18a18ba08916efe0c33a1de300",
      "parents": [
        "c3451d4a4479b6244bd6d1dadf289a8d44bdcca2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 14 17:03:18 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 15 19:14:37 2011 -0800"
      },
      "message": "Add support for arbitrary axes in MotionEvents.\n\nThis change makes it possible to extend the set of axes that\nare reported in MotionEvents by defining new axis constants.\n\nThe MotionEvent object is now backed by its C++ counterpart\nto avoid having to maintain multiple representations of the\nsame data.\n\nChange-Id: Ibe93c90d4b390d43c176cce48d558d20869ee608\n"
    },
    {
      "commit": "9065504a63d6bf37bf621191fda1d1fe4da76ee3",
      "tree": "500948db3ef54c52fc65f52f4ab4a220e4504009",
      "parents": [
        "d6a46103bfbed17451abf0fb608d7b778597846c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 16:01:32 2010 -0800"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    },
    {
      "commit": "47e6b1b5eef8ee99872f278f66bc498c4fcca0d8",
      "tree": "ef5a7c87b8dca433ea9707c1289ae7c8d2ba3787",
      "parents": [
        "735206f121cb2a11b3397870e6565178627e0aa3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 29 17:37:49 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 30 17:15:49 2010 -0800"
      },
      "message": "Support non-orientation aware keyboards and other devices.\n\nFixed a bug with dpad keys on external keyboards being rotated\naccording to the display orientation by adding a new input device\nconfiguration property called \"keyboard.orientationAware\".\n\nAdded a mechanism for overriding the key layout and key character\nmap in the input device configuration file using the new\n\"keyboard.layout\" and \"keyboard.characterMap\" properties.\n\nAlso added \"trackball.orientationAware\", \"touch.orientationAware\" and\n\"touch.deviceType\" configuration properties.\n\nRewrote the configuration property reading code in native code\nso that it can be used by EventHub and other components.\n\nAdded basic support for installable idc, kl, and kcm files\nin /data/system/devices.  However, there is no provision for\ncopying files there yet.\n\nDisabled long-press character pickers on full keyboards so that\nkey repeating works as expected.\n\nChange-Id: I1bd9f0c3d344421db444e7d271eb09bc8bab4791\n"
    },
    {
      "commit": "b0418da0e7594a8c2164a46985c5f1993632e010",
      "tree": "f73f81b31796d4f75ef6530d1fb883fccc74031f",
      "parents": [
        "c68134b74016b82e0c49c47b89d93b2d0921cbe5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 01 15:24:01 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 02 17:31:39 2010 -0700"
      },
      "message": "Add plumbing for volume mute key.\n\nFull support for the volume mute key will be implemented in a\nlater change.\n\nBug: 2912307\nChange-Id: I98c27d6360f159c8b7447e04b45f442eff87b38a\n"
    },
    {
      "commit": "85a3176704b5bfbeece9bd928369fbb76eec7dc6",
      "tree": "1a84f21c037b514c5b6717b106f5a9a2c4fd6c99",
      "parents": [
        "c0b4f6d30d962d75125628317b5f5ea622531dfe"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 01 17:01:00 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 11:50:55 2010 -0700"
      },
      "message": "Add support for secure views.\n\nAdded the MotionEvent.FLAG_WINDOW_IS_OBSCURED flag which is set by the\ninput manager whenever another visible window is partly or wholly obscured\nthe target of a touch event so that applications can filter touches\naccordingly.\n\nAdded a \"filterTouchesWhenObscured\" attribute to View which can be used to\nenable filtering of touches when the view\u0027s window is obscured.\n\nChange-Id: I936d9c85013fd2d77fb296a600528d30a29027d2\n"
    },
    {
      "commit": "5fad2675e8deee60aa91d7a96c9ac4826357f2c5",
      "tree": "a6bd559cdfc301df21693357650c3b58b95e0763",
      "parents": [
        "47471175c9d19a00d06a77aa316dcda08be97deb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 31 15:20:28 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 31 15:24:55 2010 -0700"
      },
      "message": "Remove incomplete input device enumeration NDK API.\n\nChange-Id: I32de74ff5fcf0e29179a2aee03ddabd22fa485bb\n"
    },
    {
      "commit": "6d0fec2de3601821f4f44eeb7d7deedebb2b7117",
      "tree": "9fdea32c5691a6d0bcb3085df47f42a8e6ecd565",
      "parents": [
        "b350bec514eb9fee473e4ef62680c53e992dc49b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 23 21:28:06 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 28 14:16:15 2010 -0700"
      },
      "message": "Refactor input reader to support new device types more easily.\n\nRefactored the input reader so that each raw input protocol is handled\nby a separate subclass of the new InputMapper type.  This way, behaviors\npertaining to keyboard, trackballs, touchscreens, switches and other\ndevices are clearly distinguished for improved maintainability.\n\nAdded partial support for describing capabilities of input devices\n(incomplete and untested for now, will be fleshed out in later commits).\n\nSimplified EventHub interface somewhat since InputReader is taking over\nmore of the work.\n\nCleaned up some of the interactions between InputManager and\nWindowManagerService related to reading input state.\n\nFixed swiping finger from screen edge into display area.\n\nAdded logging of device information to \u0027dumpsys window\u0027.\n\nChange-Id: I17faffc33e3aec3a0f33f0b37e81a70609378612\n"
    },
    {
      "commit": "2c6081ce3593712f30dacd990a97209c791d6ced",
      "tree": "4808bc521c207ea11ec0daceb98f77a6b47b00a0",
      "parents": [
        "c5ed5910c9ef066cec6a13bbb404ec57b1e92637"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 15 17:44:53 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 15 22:05:33 2010 -0700"
      },
      "message": "Implement native key pre-dispatching to IMEs.\n\nThis significantly re-works the native key dispatching code to\nallow events to be pre-dispatched to the current IME before\nbeing processed by native code.  It introduces one new public\nAPI, which must be called after retrieving an event if the app\nwishes for it to be pre-dispatched.\n\nCurrently the native code will only do pre-dispatching of\nsystem keys, to avoid significant overhead for gaming input.\nThis should be improved to be smarted, filtering for only\nkeys that the IME is interested in.  Unfortunately IMEs don\u0027t\ncurrently provide this information. :p\n\nChange-Id: Ic1c7aeec8b348164957f2cd88119eb5bd85c2a9f\n"
    },
    {
      "commit": "c5ed5910c9ef066cec6a13bbb404ec57b1e92637",
      "tree": "b06dfdac2d807dae78a2634007b6e627eefd0804",
      "parents": [
        "d9452ecd0ce6c8e0518055929ba1fd0712146405"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 14 18:48:53 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 15 18:32:33 2010 -0700"
      },
      "message": "Add support for new input sources.\n\nAdded several new coordinate values to MotionEvents to capture\ntouch major/minor area, tool major/minor area and orientation.\n\nRenamed NDK input constants per convention.\n\nAdded InputDevice class in Java which will eventually provide\nuseful information about available input devices.\n\nAdded APIs for manufacturing new MotionEvent objects with multiple\npointers and all necessary coordinate data.\n\nFixed a bug in the input dispatcher where it could get stuck with\na pointer down forever.\n\nFixed a bug in the WindowManager where the input window list could\nend up containing stale removed windows.\n\nFixed a bug in the WindowManager where the input channel was being\nremoved only after the final animation transition had taken place\nwhich caused spurious WINDOW DIED log messages to be printed.\n\nChange-Id: Ie55084da319b20aad29b28a0499b8dd98bb5da68\n"
    },
    {
      "commit": "fd03582995e0fce963dd0fa0669e3211b74c0dd7",
      "tree": "8f7fe0e2a437620a7cbe4e494f71fe8ccfdbe2eb",
      "parents": [
        "c0a7e690bfd32dd897ceccd04dd0fa6bf6e9cee6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 30 16:10:35 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jul 13 17:04:57 2010 -0700"
      },
      "message": "Add initial gamepad support.\n\nChange-Id: I0439648f6eb5405f200e4223c915eb3a418b32b9\n"
    },
    {
      "commit": "3c80a4a044865bdf1289c7896baffa1c082d835c",
      "tree": "557c89a685e672e44f90f55660da1f989d00a113",
      "parents": [
        "92dbad8ab0c8e242c4c3e52c339ed3296ae7901c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 29 19:20:40 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 10:49:40 2010 -0700"
      },
      "message": "Implement default key handling for native code.\n\nThe native code now maintains a list of all keys that may use\ndefault handling.  If the app finishes one of these keys\nwithout handling it, the key will be passed back off to Java\nfor default treatment.\n\nChange-Id: I6a842a0d728eeafa4de7142fae573f8c11099e18\n"
    },
    {
      "commit": "a95e4cb62f3642cb190d032dbf7dc40d9ecc6973",
      "tree": "ae4437444a3d3ebeff48dabfd1e9c11fc14620ac",
      "parents": [
        "ef730e6ececa96a3e0576140eea707f7c48cd66c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 18 18:09:33 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 22 11:21:50 2010 -0700"
      },
      "message": "First stab at attaching native event dispatching.\n\nProvides the basic infrastructure for a\nNativeActivity\u0027s native code to get an object representing\nits event stream that can be used to read input events.\n\nStill work to do, probably some API changes, and reasonable\ndefault key handling (so that for example back will still\nwork).\n\nChange-Id: I6db891bc35dc9683181d7708eaed552b955a077e\n"
    },
    {
      "commit": "5c225b1680e696ae8bbf505a1997d6f720672f74",
      "tree": "932326fd02ee91d8a64adfcc9415027646c56563",
      "parents": [
        "3a0146cd29fae3c5bc29d8d535d67826284f8cc9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 16 01:53:36 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 13:27:16 2010 -0700"
      },
      "message": "Even more native input dispatch work in progress.\n\nAdded more tests.\nFixed a regression in Vector.\nFixed bugs in pointer tracking.\nFixed a starvation issue in PollLoop when setting or removing callbacks.\nFixed a couple of policy nits.\n\nModified the internal representation of MotionEvent to be more\nefficient and more consistent.\n\nAdded code to skip/cancel virtual key processing when there are multiple\npointers down.  This helps to better disambiguate virtual key presses\nfrom stray touches (such as cheek presses).\n\nChange-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c\n"
    },
    {
      "commit": "46b9ac0ae2162309774a7478cd9d4e578747bfc2",
      "tree": "46ad021a41e25ca9f1250b709a29b724dc6b504d",
      "parents": [
        "f62c57d684b83df7d2817db976c0afdb500ae92a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 22 18:58:52 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 17:42:16 2010 -0700"
      },
      "message": "Native input dispatch rewrite work in progress.\n\nThe old dispatch mechanism has been left in place and continues to\nbe used by default for now.  To enable native input dispatch,\nedit the ENABLE_NATIVE_DISPATCH constant in WindowManagerPolicy.\n\nIncludes part of the new input event NDK API.  Some details TBD.\n\nTo wire up input dispatch, as the ViewRoot adds a window to the\nwindow session it receives an InputChannel object as an output\nargument.  The InputChannel encapsulates the file descriptors for a\nshared memory region and two pipe end-points.  The ViewRoot then\nprovides the InputChannel to the InputQueue.  Behind the\nscenes, InputQueue simply attaches handlers to the native PollLoop object\nthat underlies the MessageQueue.  This way MessageQueue doesn\u0027t need\nto know anything about input dispatch per-se, it just exposes (in native\ncode) a PollLoop that other components can use to monitor file descriptor\nstate changes.\n\nThere can be zero or more targets for any given input event.  Each\ninput target is specified by its input channel and some parameters\nincluding flags, an X/Y coordinate offset, and the dispatch timeout.\nAn input target can request either synchronous dispatch (for foreground apps)\nor asynchronous dispatch (fire-and-forget for wallpapers and \"outside\"\ntargets).  Currently, finding the appropriate input targets for an event\nrequires a call back into the WindowManagerServer from native code.\nIn the future this will be refactored to avoid most of these callbacks\nexcept as required to handle pending focus transitions.\n\nEnd-to-end event dispatch mostly works!\n\nTo do: event injection, rate limiting, ANRs, testing, optimization, etc.\n\nChange-Id: I8c36b2b9e0a2d27392040ecda0f51b636456de25\n"
    }
  ]
}
