)]}'
{
  "log": [
    {
      "commit": "214f459b2c35ac0d95ad8ae9e2a68b94807ceba0",
      "tree": "c9070f7a5d0e8acf07c7a8603cb253edf4d0aabe",
      "parents": [
        "4130554b452a8462a83f97051240f1aec8590650"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 22 17:21:17 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 19 14:16:09 2012 -0800"
      },
      "message": "Remove no longer needed EventHub usleep() optimization.\n\nThis optimization is no longer needed now that the kernel evdev\ndriver\u0027s poll() implementation only wakes up the poll after\nthe final sync.\n\nChange-Id: If237776861df9cfac3086e744d3bbf3484d4c53b\n"
    },
    {
      "commit": "4130554b452a8462a83f97051240f1aec8590650",
      "tree": "d947199bac924e8068be8d81cd3b105a9ea6a129",
      "parents": [
        "6534c0e0548332801cffaa0977af165025030297"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 05 11:14:13 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 19 14:08:48 2012 -0800"
      },
      "message": "Fix line wrapping.\n\nChange-Id: I41199d1145d2435eee046a7e5006dcdce0986821\n"
    },
    {
      "commit": "c0cb3dc2c16883f19bf1caf652b2fcdb55a1a856",
      "tree": "fb6e5d716f4c07e49463aba171d0201fcd777347",
      "parents": [
        "dc89357810976556d20483c7fe161b68ed4d2acf"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 12 18:30:12 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jan 12 18:30:12 2012 -0800"
      },
      "message": "Fix a few memory leaks in the input dispatcher.\n\nBug: 5862398\nChange-Id: Iae3284a223b8307f541a7987f90f5b28e70b9244\n"
    },
    {
      "commit": "ec193dec4d9ca2cfc8295c4becfe950a906a15ed",
      "tree": "c93578b9568a1b9f5b7b4b3d20732857d4e3a6c4",
      "parents": [
        "5c17a820f9e46e0756c11795b3e6f89105f2f539"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 18:35:44 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 21:36:22 2012 +0000"
      },
      "message": "Rename LOG_ASSERT to ALOG_ASSERT  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157519\n\nBug: 5449033\nChange-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3\n"
    },
    {
      "commit": "3762c311729fe9f3af085c14c5c1fb471d994c03",
      "tree": "7d4caccad80ac7327c7bff96dafc857d5f4631ad",
      "parents": [
        "7a939077bd14521c7d351af98df7ed75a8ec9c15"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\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": "6215d3ff4b5dfa52a5d8b9a42e343051f31066a5",
      "tree": "fa31802ed64676368447b67d20567fc1e806c79d",
      "parents": [
        "c9c76a82c6d0bf2362044d899013832882f32c94"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "message": "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156801\n\nBug: 5449033\nChange-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea\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": "fa7fa9a5ba796eabb2dadb8e2ce1b97da38e939e",
      "tree": "69f1929304b224494121d8e592078f269028e1f3",
      "parents": [
        "ec3a88dee2c7d77c09eaad0c297f077744033d48",
        "944c985b4199e6e029568ea87004c9727e469cc0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Dec 09 14:25:38 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Dec 09 14:25:38 2011 -0800"
      },
      "message": "am 944c985b: am e0e9fd98: Merge \"Fix system hotkey handling.\" into ics-mr1\n\n* commit \u0027944c985b4199e6e029568ea87004c9727e469cc0\u0027:\n  Fix system hotkey handling.\n"
    },
    {
      "commit": "68b909d8acd92343fa0b1dff2f77fcd9d9991f9f",
      "tree": "73df34f562dafe3807615c773530dedce3d83ae0",
      "parents": [
        "eb3e4b98a45722d5d1ea73e45d86c119d678bb05"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 07 16:36:01 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 07 21:37:16 2011 -0800"
      },
      "message": "Fix system hotkey handling.\n\nFixed a problem where the key up for the ALT or META key was not\ndelivered to the task switcher dialog because it was deemed\nto be inconsistent with the window\u0027s observed state.  Consequently\nthe dialog would not be dismissed when the key was released.\n\nMoved global hotkey handling for META+* shortcuts and ALT/META-TAB\ninto the window manager policy\u0027s interceptKeyBeforeDispatching\nmethod.  This change prevents applications from hijacking these\nkeys.\n\nThe original idea was that these shortcuts would be handled only\nif the application did not handle them itself.  That way certain\napplications, such as remote desktop tools, could deliberately\noverride some of these less important system shortcuts.\nUnfortunately, that does make the behavior inconsistent across\napplications.  What\u0027s more, bugs in the onKeyDown handler of\napplications can cause the shortcuts to not work at all, for\nno good reason.\n\nPerhaps we can add an opt-in feature later to enable specific\napplications to repurpose these keys when it makes sense.\n\nBug: 5720358\nChange-Id: I22bf17606d12dbea6549c60d20763e6608576cf7\n"
    },
    {
      "commit": "221096fdd6963a0f7090b928cfb92b9267f32d7a",
      "tree": "300e2781bf3720d2b7e57611d6691c9fe9ea521a",
      "parents": [
        "8e56e1f3459703a9b9f5a13676428eeda68bb73f",
        "4c0e0dd29dcce33e7521b11d01d21d9431f3b264"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 15 19:43:35 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 15 19:43:35 2011 -0800"
      },
      "message": "am 4c0e0dd2: am 3e7497b4: Merge \"Eliminate hw.keyboards system properties.\" into ics-mr1\n\n* commit \u00274c0e0dd29dcce33e7521b11d01d21d9431f3b264\u0027:\n  Eliminate hw.keyboards system properties.\n"
    },
    {
      "commit": "1e08fe90df18930691b0c2ec22e5db25d7fcb4cf",
      "tree": "772ffaafe6917d37ee65f5ed3d653230557bdc80",
      "parents": [
        "9058435dc1a741030c042c4d6f2512f5d1605e5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 15 17:48:10 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 15 18:00:10 2011 -0800"
      },
      "message": "Eliminate hw.keyboards system properties.\n\nStop using system properties to publish information about\nthe key character map path.  Instead, we can retrieve it\non demand by asking the window manager.\n\nIt was possible to exhaust the supply of system properties\nwhen repeatedly adding and removing input devices.\n\nBug: 5532806\nChange-Id: Idd361a24ad7db2edc185c8546db7fb05f9c28669\n"
    },
    {
      "commit": "fbca596721ea19daa2972639095898ce62100490",
      "tree": "6dec24bb8d7b40c7d6c5a38b07b5872ff8d77c23",
      "parents": [
        "28a5ec9613a824d2ec15ce5e5cec77a6fcf444d5"
      ],
      "author": {
        "name": "David Deephanphongs",
        "email": "dpanpong@google.com",
        "time": "Mon Nov 14 14:50:45 2011 -0800"
      },
      "committer": {
        "name": "David Deephanphongs",
        "email": "dpanpong@google.com",
        "time": "Tue Nov 15 11:10:07 2011 -0800"
      },
      "message": "Modify getState to prefer AKEY_STATE_DOWN and AKEY_STATE_UP over AKEY_STATE_UNKNOWN.\n\nFor the getState() routines that operate on multiple devices / mappers:\nReturn AKEY_STATE_DOWN (or AKEY_STATE_VIRTUAL) if any of the devices/mappers\nhave the key down.\nOtherwise, return AKEY_STATE_UP if at least one device/mapper returns AKEY_STATE_UP.\nOtherwise, return AKEY_STATE_UNKNOWN.\n\nChange-Id: I1ef6251d73af916b51f408a41c5e4adf5bdc237a\n"
    },
    {
      "commit": "a965f083d09bf247cbfc880c0435e4a04c3e4e18",
      "tree": "990e4f0b59e84d950ff9e5bdfd0badafd3a125c7",
      "parents": [
        "ea427b0c87a52d5e770f50856401a81ff2658cc4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 07 16:12:43 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 08 20:24:21 2011 -0800"
      },
      "message": "Delete dead code.\n\nChange-Id: Ia78e338a363ab82f9c0b45ce324c2a7cfa8d8246\n"
    },
    {
      "commit": "71f2cf116aab893e224056c38ab146bd1538dd3e",
      "tree": "75a9162a0ea00830184b12a9ca51d3a1a040a5bb",
      "parents": [
        "1da79501066a74b630c8aa138db0f86ab6c690bb"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Oct 26 09:57:54 2011 +0100"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "905805ad7ce18a386076fff99264f821bbad9f83",
      "tree": "82d377b8a88dc04db0b9b7c6c61228464a1f75b8",
      "parents": [
        "1eb08f0acb0220d5ad03579c566a00497b665816"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 12 13:57:59 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 12 14:34:23 2011 -0700"
      },
      "message": "Improve screenshot chord debouncing.\nBug: 5011907\n\nIntroduce a 150ms delay in handling volume down keys\nwhile waiting to see if a power key will follow.\n\nDon\u0027t trigger the screenshot chord if both volume up and\nvolume down are pressed together.\n\nDon\u0027t trigger the long-press power menu if volume keys are\nalso pressed.\n\nRequire the user to press both keys in the chord within\nthe debounce time and continue long-pressing them in order\nto trigger the screenshot action.\n\nChange-Id: I248968d37b73c09d6d08e7f62667c443eba32da0\n"
    },
    {
      "commit": "e8b7f4a20c43d8f55d0cf85a94363b764ba598b8",
      "tree": "09800860eb177aeec4db251548ffb9ddc74fefec",
      "parents": [
        "9547d03ef1228406ad4eb6db31dbcf58be1e4655"
      ],
      "author": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Mon Sep 26 23:31:27 2011 -0700"
      },
      "committer": {
        "name": "Dima Zavin",
        "email": "dima@android.com",
        "time": "Thu Sep 29 11:28:17 2011 -0700"
      },
      "message": "eventhub: print debugginf info when removing device\n\nChange-Id: I40bbbd3867e8c7ac7d6fb38e1c72432bb4963316\nSigned-off-by: Dima Zavin \u003cdima@android.com\u003e\n"
    },
    {
      "commit": "bfcb60ab0f696c8ef70830c365550e62fe2808bf",
      "tree": "62501853dd40e4194e94bb689c46e1da335f6e66",
      "parents": [
        "9fefa3c716e9c8d7dfb6c851c91e37e37732a955"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 08 18:51:14 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 08 18:53:42 2011 -0700"
      },
      "message": "Adjust layers for system overlays.\n\nPrevent system overlays from showing above the notification bar.\n\nAllow secure system overlays to be fullscreen, for the pointer\nlocation view.\n\nShow the drag layer above the notification bar.\n\nChange-Id: Ic8d663792a243cca2cd9952d241d001e0357d551\n"
    },
    {
      "commit": "3cdfc4d94f6af82953f0e722ade882197c72da58",
      "tree": "a01091f6e941a4c837eed171d6757b4e45203dc0",
      "parents": [
        "d318b73e8e7832f257797ce08b3eea02780b7909",
        "9ee285afe740ff13d176c9d8430979dfd9575a23"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 31 15:18:59 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 31 15:18:59 2011 -0700"
      },
      "message": "Merge \"Support composite touch / joystick devices better.\""
    },
    {
      "commit": "9d4bc852ea459c2a4347a87ce0357b3328a25db8",
      "tree": "30f7154a210380d638c54107cd670681cd557d72",
      "parents": [
        "16b241a58f1ec4b317647b6fd0ad9b5cc3f7ba3d",
        "cc4f7db698f88b633a286d8ab1105b28a474cd09"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 31 13:01:16 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 31 13:01:16 2011 -0700"
      },
      "message": "Merge \"Fix input channel leak. Bug: 5156144\""
    },
    {
      "commit": "9ee285afe740ff13d176c9d8430979dfd9575a23",
      "tree": "c63a5a7d49029e1b677ccd7dbe3f7527e5420221",
      "parents": [
        "cc4f7db698f88b633a286d8ab1105b28a474cd09"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 31 12:56:34 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 31 12:56:34 2011 -0700"
      },
      "message": "Support composite touch / joystick devices better.\n\nThis change enables the joystick input mapper to handle any axes\nthat are not claimed by the touch input mapper, which makes\nauxiliary controls such as wheels / knobs accessible.\n\nChange-Id: I01ee7f342ac91acfcb4ccb6676fd52b3d5bf31a0\n"
    },
    {
      "commit": "cc4f7db698f88b633a286d8ab1105b28a474cd09",
      "tree": "02ec7d914ab182e912af5c147ebc7483a719c6de",
      "parents": [
        "ad4d2c99ed3a08a5090c38e9dd906df8fb894614"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 30 20:34:48 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 30 21:40:28 2011 -0700"
      },
      "message": "Fix input channel leak.\nBug: 5156144\n\nInput channels could leak or simply live longer than they should\nin some cases.\n\n1. Monitor channels (used by the pointer location overlay) are never\n   unregistered, so they would leak.\n\n   Added code to handle failures in the receive callback by closing\n   the input channel.\n\n2. The DragState held onto its input window and application handles\n   even after the input channel was disposed.\n\n   Added code to null these handles out when they are no longer needed.\n\n3. Input channels previously used as input event targets would stick\n   around until the targets were cleared (usually on the next\n   event).\n\n   Added code to detect when the input dispatcher is in\n   an idle state and to proactively clear the targets then\n   to ensure that resources are released promptly.\n\n4. Native input window handles held onto the input channel even\n   after the input window was removed from the input dispatcher.\n   Consequently, the input channel would not be disposed until\n   the input window handle itself was freed.  Since the input\n   window handle is held from managed code, this meant that the\n   window\u0027s input channel could stick around until the next GC.\n\n   Refactored the input window handle to separate the properties\n   (info) and identify (handle) state into different objects.\n   Then modified the dispatcher to release the properties (info)\n   when no longer needed, including the input channel.\n\n7. The pointer location overlay does not actually use its\n   standard input channel, only the monitor input channel.\n\n   Added INPUT_FEATURE_NO_INPUT_CHANNEL to allow windows to\n   request that they not be provided with an input channel\n   at all.\n\nImproved some of the error handling logic to emit the status\ncode as part of the exception message.\n\nChange-Id: I01988d4391a70c6678c8b0e936ca051af680b1a5\n"
    },
    {
      "commit": "e81056f35041de24adad9bc5384b9e8f72bf95f6",
      "tree": "5baaf4f7f3d90042eedcbe2a281699cc4fa3a008",
      "parents": [
        "be1a0493a8bf589137874bec4222297fbb712185"
      ],
      "author": {
        "name": "Max Braun",
        "email": "braun@google.com",
        "time": "Tue Aug 30 14:35:45 2011 -0700"
      },
      "committer": {
        "name": "Max Braun",
        "email": "braun@google.com",
        "time": "Tue Aug 30 14:40:43 2011 -0700"
      },
      "message": "Pick up device configuration \"device.internal \u003d 0\". Before, only \"device.internal \u003d 1\" had an effect.\n\nChange-Id: Ie88ed66e0841418c147bed2e23806405bdd17ad6\n"
    },
    {
      "commit": "8d3feb6292ba7e87adeb4982e8cf27114a8ee2e4",
      "tree": "5dd588235d15c57f2dd6aa4ea0dd550fb2b3e249",
      "parents": [
        "df7e2644992c5828be94980b4243ac9f1f48b177",
        "daf4a127ba2af82a3fb477044b872719a0ab1827"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 29 14:04:31 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 29 14:04:31 2011 -0700"
      },
      "message": "Merge \"Add a \"show touches\" option for demos and presentations. Bug: 4569045\""
    },
    {
      "commit": "deffe07c225c15ce780fad4a500d082f2dbdabea",
      "tree": "a7ff5ec9cf65f51258d2202b3e26902e247d9b7a",
      "parents": [
        "9b9783ad60d31f3df5d2524e13abc1437d5b6f7d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 26 18:38:46 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 26 18:38:46 2011 -0700"
      },
      "message": "Prioritize INPUT_PROP_DIRECT first.\n\nIf the device tells us it\u0027s really direct, then it\u0027s direct.\n\nChange-Id: I83875cf47e865ff6f0def149ad0c68db24d9dc4a\n"
    },
    {
      "commit": "daf4a127ba2af82a3fb477044b872719a0ab1827",
      "tree": "2147e705a6b912683abd7169910acb548413d946",
      "parents": [
        "9b9783ad60d31f3df5d2524e13abc1437d5b6f7d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 26 17:14:14 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 26 17:14:14 2011 -0700"
      },
      "message": "Add a \"show touches\" option for demos and presentations.\nBug: 4569045\n\nChange-Id: I8726ea292dd7def790a5e40d7d7e58968974f896\n"
    },
    {
      "commit": "c28306ad4ac9ce7a7d5f10c2e38d422ffc309a1f",
      "tree": "b44fd57c3691bc6c4319334752a89fe7966de087",
      "parents": [
        "aaee52cfa8bb1d0070b69cd4087be63dd2c0fee9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 21:32:42 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 21:32:42 2011 -0700"
      },
      "message": "Improve input device wake heuristics.\nBug: 5205674\n\nOnly wake the device on positive interactions from the user\nsuch as button presses, movement, initial touch down events.\nIn particular, do not wake the device on up events since the\ndriver might synthesize them on power off, causing the device\nto wake up again for no good reason.\n\nChange-Id: I767f553ea36d110e6f3a10611b324487ba7d880d\n"
    },
    {
      "commit": "9cc695c5796cf93b414fd7627eb049b7b57d15be",
      "tree": "f5333563eb7b189a8c78af7409d4a795936e3e13",
      "parents": [
        "ea6892e02e10a57673a42f0922ad28694595dcaa"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 18:35:04 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 18:42:06 2011 -0700"
      },
      "message": "Clean up InputDispatcher debugging.\n\nChange-Id: I020e834bfb541a1f274e26a72705f96f4307dddf\n"
    },
    {
      "commit": "ea6892e02e10a57673a42f0922ad28694595dcaa",
      "tree": "3f848783f217758c31e3491fef6fd84b7bf8cf52",
      "parents": [
        "2a4c5acc27e546f11e578e9982d8c33deb6b88fb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 17:31:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 23 17:49:49 2011 -0700"
      },
      "message": "Support BTN_TOOL_*TAP as synonyms for BTN_TOOL_FINGER.\nBug: 5205301\n\nSome drivers report one finger as BTN_TOOL_FINGER, two as\nBTN_TOOL_DOUBLETAP, three as BTN_TOOL_TRIPLETAP and four\nas BTN_TOOL_QUADTAP.  Since we care about the tool type,\nwe need to handle _DOUBLE/_TRIPLE/_QUAD tap in the same way\nwe handle _FINGER.\n\nChange-Id: I8eb83d2a2bada9ac32d07619c7eea84e924316b8\n"
    },
    {
      "commit": "a66cee134e2ad8a6d100e0e3eefa2c2a341ed7cc",
      "tree": "10d2b17244e51e87357bf32cea28596565da56b0",
      "parents": [
        "65fd251c3913fc921468a3dad190810db19eb9df"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 19 16:04:30 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 19 16:04:30 2011 -0700"
      },
      "message": "Fix tap gesture on touch pads.\n\nChange-Id: I92b23e5971d4b98b173aacd64fe03ce9f0755c88\n"
    },
    {
      "commit": "65fd251c3913fc921468a3dad190810db19eb9df",
      "tree": "7cc9e086b96a4e2c77ec5b77aab6bed5679e89f0",
      "parents": [
        "c0a2222552f48a2543a64a4cbe913d0b9ffc3cbf"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 18 11:20:58 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 19 15:02:26 2011 -0700"
      },
      "message": "Input system bug fixes, particularly for stylus.\nBug: 5049148\n\nFinished stylus support, including support for indirect stylus\nand mouse tools.\n\nAdded TILT axis.  When stylus tilt X/Y is available, it is transformed\ninto an orientation and tilt inclination which is a more convenient\nrepresentation and a simpler extension to the exiting API.\n\nTouch devices now only report touch data using a single input\nsource.  Previously touch devices in pointer mode would report\nboth absolute touch pad data and cooked pointer gestures.\nNow we just pick one.  The touch device switches modes as needed\nwhen the focused application enables/disables pointer gestures.\nThis change greatly simplifies the code and reduces the load\non the input dispatcher.\n\nFixed an incorrect assumption that the value of ABS_(MT_)DISTANCE\nwould be zero whenever the stylus was in direct contact.  It appears\nthat the correct way to determine whether the stylus is in direct\ncontact (rather than hovering) is by checking for a non-zero\nreported pressure.\n\nAdded code to read the initial state of tool buttons and axis values\nwhen the input devices are initialized or reset.  This fixes\nproblems where the input mapper state might have the wrong initial\nstate.\n\nMoved responsibility for cancelling pending inputs (keys down,\ntouches, etc.) to the InputDispatcher by sending it a device reset\nnotification.  This frees the InputReader from having to synthesize\nevents during reset, which was cumbersome and somewhat brittle\nto begin with.\n\nConsolidated more of the common accumulator logic from\nSingleTouchInputMapper and MultiTouchInputMapper into\nTouchInputMapper.\n\nImproved the PointerLocation output.\n\nChange-Id: I595d3647f7fd7cb1e3eff8b3c76b85043b5fe2f0\n"
    },
    {
      "commit": "755bd67a5081727ae1bbee2d39863b464a8b4f35",
      "tree": "b5ef3bdea69aabb912d7b00aa6986b7784586cec",
      "parents": [
        "751b85e8c3b5ff07eaaa6bdbd32517dcdc8f27aa",
        "d9be36c897680361da2daadba9bbc9da3c16329b"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Aug 16 17:03:24 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 16 17:03:24 2011 -0700"
      },
      "message": "Merge \"Don\u0027t crash if a drag recipient throws an uncaught exception\""
    },
    {
      "commit": "d9be36c897680361da2daadba9bbc9da3c16329b",
      "tree": "097fbf3074d35133c91c7a95890c6eb8deb37166",
      "parents": [
        "154aa355f0ed0374a4b4db222419639ec1a385fe"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Aug 16 16:09:33 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Aug 16 16:09:33 2011 -0700"
      },
      "message": "Don\u0027t crash if a drag recipient throws an uncaught exception\n\nThere turn out to be two distinct bugs leading to runtime restarts.\n\nThe first, dating from at least Android 3.1, is that following certain kinds\nof app crashes we properly clean up the drag-state bookkeeping, but aren\u0027t\nprepared in the case of the drag-target timeout clock firing with a now-\nnull drag state in effect.  We now catch that edge condition and don\u0027t NPE\n(and note that there was already similar code around the separate timeout\nwhen an app is *starting* the drag process).\n\nThe second bug is that some new-in-ICS code in the input channel management\nwasn\u0027t prepared for certain cases where the current touch window could have\nbecome unusable and its input channel torn down summarily in the case of the\naforesaid app crash during drag.  The code now makes sure that there really\nis an input channel that needs to be flushed / cancelled prior to attempting\nthat operation.\n\nFixes bug 5173534\n\nChange-Id: Idaae158ecfb4b93456ab1425769b669962893c00\n"
    },
    {
      "commit": "abb4d446a10b2defd342b1a2fa6462b52b82cdef",
      "tree": "838ace2ab9aa023cae8ff4ffe827547e813eb657",
      "parents": [
        "0a0ab128a65900a23f1018a14f5cbecec6443dd3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 15 12:55:32 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 15 12:55:32 2011 -0700"
      },
      "message": "Fix blocked event handling in InputDispatcher.\nBug: 5161854\n\nThe InputDispatcher contains code to recover from ANRs more quickly\nwhen the user touches a different application.  When triggered,\nit sets mNextUnblockedEvent to the next event it should dispatch\n(to the next application).  All prior events are dropped.\n\nThis change fixes a bug where mNextUnblockedEvent could potentially\nnever be reset back to NULL if the inbound queue was drained\nfor some reason.\n\nChange-Id: I21be2f02c9fc770bd260ea414db8bb184df89ada\n"
    },
    {
      "commit": "063097545e6a273952463803d1a2fab2cb590d4e",
      "tree": "0155ff6d5cfaf58cf038ad53a24693c3cd90ad00",
      "parents": [
        "8bcbbefa3b4e149099b2057547543ea95a7be400"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 17:10:06 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 17:10:06 2011 -0700"
      },
      "message": "Ensure outValue is set, even when an error occurs.\n\nChange-Id: If883f60cde28792bd0e108597ced49d69d13136e\n"
    },
    {
      "commit": "8bcbbefa3b4e149099b2057547543ea95a7be400",
      "tree": "79483141865d98beea4de3792a7541202978db46",
      "parents": [
        "a1f89ceec076392da409e9f389b33e62e1d92da6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 15:49:09 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 15:54:54 2011 -0700"
      },
      "message": "Exorcise notification panel ghosts.\nBug: 5105599\n\nDon\u0027t clear slot data when slot is no longer in use.\n\nThe kernel will not resend absolute slot values if they are\nunchanged, even if the slot was previously marked unused.\n\nBecause the protocol is stateful, this could cause problems if\nevdev drops events (marked by SYN_DROPPED) since we cannot\nquery the initial values of the slots, but there\u0027s nothing\nwe can do.\n\nChange-Id: Ie13e68097fb8ed2542c2f60338b499082cf9e77f\n"
    },
    {
      "commit": "a1f89ceec076392da409e9f389b33e62e1d92da6",
      "tree": "22f2ca9b7498db4a3df1cf444214769e0ca968df",
      "parents": [
        "45bd6086cc112b2a2cf192af01c7f444867b7f75"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 00:05:01 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 11 14:57:50 2011 -0700"
      },
      "message": "Improve touch device configuration.\nBug: 5064702\n\nThis change improves compatibility with standard touch device\ndrivers.  All existing touch device IDC files will need to\nbe updated because the input system now assumes that the\ntouch device drivers implement the multitouch input\nprotocol correctly and use the appropriate axes.\n\nChange-Id: I93aad0e011efea74fbc7fa3da31f7967aff8136c\n"
    },
    {
      "commit": "89ef0720ee8e0ac6ae1758faa917e4d6c9606fb4",
      "tree": "2c239993b3d2702dd8becc03a738f1b151a4c4f1",
      "parents": [
        "ba421dddfd558b34726df5dfbf8a3bf748e285b1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 16:25:21 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 16:25:21 2011 -0700"
      },
      "message": "Add input system to Watchdog.\nBug: 5094994\n\nChange-Id: I153866958efc64ac19bda8b997c1c9f6ad425ec4\n"
    },
    {
      "commit": "ba421dddfd558b34726df5dfbf8a3bf748e285b1",
      "tree": "ad126d5ac4ce99681e8828344f8051ef369546fe",
      "parents": [
        "d87c6d5fd5e620ecb1a7a401d2b31c6cf2e1a851"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 15:07:05 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 15:17:37 2011 -0700"
      },
      "message": "Fix getSwitchState and others to check bitmasks.\nBug: 5149443\n\nRemoved some dead code and unnecessary checks, such as checks\nfor non-nullity of arrays that used to be dynamically allocated\nonce upon a time but are now part of the Device object itself.\n\nChange-Id: I531116e816772d7c5030d22da0c8e1d7dcfba778\n"
    },
    {
      "commit": "d87c6d5fd5e620ecb1a7a401d2b31c6cf2e1a851",
      "tree": "ab48f92be24decba74d368ac669a555c96a9f929",
      "parents": [
        "eee00495f5c65340bff80e8afa8090b3b18619de"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 14:55:59 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 10 14:55:59 2011 -0700"
      },
      "message": "Use BTN_TOUCH or BTN_TOOL_* to determine if touch active.\nBug: 5064702\n\nShould not include stylus buttons in the condition.\n\nChange-Id: If4d78a875b77da8bd59672d6fdbf5353004d0023\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": "00fd1fc9b38a2e59b5ab5ad3f19a6e581dc5f428",
      "tree": "4611d25d95b5cf8d4778d0be2f05bba42124633d",
      "parents": [
        "06a2895b58d6d8ecc3fc5dffa8c5d8c4f95216a5",
        "d84d6c7b1acb527c289b5ed7fcebe2ee6a5a01ff"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Jul 27 18:29:26 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 27 18:29:26 2011 -0700"
      },
      "message": "Merge \"Fix uses of all-subdir-makefiles\""
    },
    {
      "commit": "d84d6c7b1acb527c289b5ed7fcebe2ee6a5a01ff",
      "tree": "78cac894c9a960085b37df16d3de0efe85453cae",
      "parents": [
        "070ce94b9fd91d1bb22161a85178440cb46d8ece"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Jul 27 16:59:08 2011 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Jul 27 16:59:08 2011 -0700"
      },
      "message": "Fix uses of all-subdir-makefiles\n\nWe should use all-makefiles-under instead.\nall-subdir-makefiles can be used only before any \"include\" statement.\nBefore this change, both subdirs were actually not included.\n\nChange-Id: I6bf35d07f294a5012c9322096f999ac26e37432f\n"
    },
    {
      "commit": "5ea29ab7efa9a9ae22345f15a7cb9be3c5e1bbf5",
      "tree": "4403ea968de41dad277a7eb08ce00d65d43f1e3f",
      "parents": [
        "bc68a59c024bdb745dac8e2ec7408a9f30595f1a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 27 11:50:51 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 27 11:50:51 2011 -0700"
      },
      "message": "Reset input dispatcher targets when focus changes apps.\n\nThis fixes an issue where an ANR can occur in a newly focused\napplication through no fault of its own, simply because\nthe previous app took a little while to transfer focus to\nthe new app.\n\nBug: 4584620\nChange-Id: If3227eb68d92a09a108e9de7f0afcbd9a5dbdead\n"
    },
    {
      "commit": "bc68a59c024bdb745dac8e2ec7408a9f30595f1a",
      "tree": "9b3cfa4dc30eb787cbd828e97f7d816d5a91e68d",
      "parents": [
        "49754db5a304d995c1cc108ff6f19e4ba4265572"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 25 12:58:12 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 25 20:10:12 2011 -0700"
      },
      "message": "Report the external display size to the input reader.\n\nThe input reader needs this information so that it knows how to\ninterpolate touches on an external touch screen.\n\nChanged Display so that it asks the WindowManager what the real\ndisplay size is (as opposed to the raw display size).  This means\nit now takes into the forced display size set by\nadb shell am display-size.\n\nReplaced all calls to getRealWidth() / getRealHeight() /\ngetRealMetrics() in the WindowManager and replaced them with direct\nusages of the mCurDisplayWidth / mCurDisplayHeight so that the WM\ndoesn\u0027t end up making a reentrant Binder call into itself.\n\nFixed the table status bar HeightReceiver so that it updates the\nheight on all configuration changes since it is possible that the\ndisplay size changed independently of an external HDMI display\nbeing plugged / unplugged.\n\nImproved the Display class documentation to make the distinctions\nbetweeen the various sizes clearer.\n\nChange-Id: I3f75de559d3ebffed532ab46c4ae52c5e7f1da2b\n"
    },
    {
      "commit": "49754db5a304d995c1cc108ff6f19e4ba4265572",
      "tree": "cb09f23e7dd81ea505f90962fd550e36afbbc422",
      "parents": [
        "44e504e089b7483448c386741c5ee31d2c325400"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 17:37:58 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 25 20:04:18 2011 -0700"
      },
      "message": "Handle stylus buttons and tool types.\n\nAdded TOOL_TYPE_ERASER.\n\nRefactored the InputReader to share more code between the\nvarious input mappers that handle button states and to\nsimplify the accumulator implementations by having each\none only handle a single type of input.\n\nRemoved the concept of direct/indirect tool types from the API.\nIf we add it back, it should be done in a manner that is orthogonal\nto the tool type itself, perhaps as a flags field on the pointer.\nThe device source may well provide sufficient information anyhow.\n\nChange-Id: I811c22d95e8304269b6ee4f6d11a6b04f3cfc1b2\n"
    },
    {
      "commit": "44e504e089b7483448c386741c5ee31d2c325400",
      "tree": "d2dba32f30f669dd4cbe0dedf48aa324cfd17fc8",
      "parents": [
        "ae65c17959042edd5f1b44e7653d1a775bbfceec"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 21 19:16:41 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 25 20:04:17 2011 -0700"
      },
      "message": "Drop hack for drivers that emit zero ABS_MT_TOUCH_MAJOR.\nBug: 5064702\n\nWhen using Linux MT Protocol A, drivers are supposed to omit\nfingers that go up and to send an empty sync with no fingers\n(can be just an SYN_MT_REPORT / SYN_REPORT) when no fingers\nremain.\n\nThis makes Android more compliant with the protocol standard.\n\nChange-Id: I5775feb14ab7db015824a32b1e2c015da239385d\n"
    },
    {
      "commit": "ac386073df2514b79a2ca169f4a89f129733002f",
      "tree": "a3ac8faca1a1f1dc118403b019bd05f652de52a8",
      "parents": [
        "cf4cfc6fc88f204e2e496e37337f7e70809bbf6f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "message": "Remove unimplemented memory pool.\n\ndlmalloc does such a great job that we don\u0027t need a pool anyways.\n\nChange-Id: I105b28c4a5c491543959190c7c0a9de75a5b8052\n"
    },
    {
      "commit": "612891e07bf578a6c4e1b08200f21d8d861ab5ec",
      "tree": "ca78e3180545f3facd4a9aa7640c1a88075f61fa",
      "parents": [
        "6069139356ceb4d257f749954a2220b1f4fbf9cb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 15 20:44:17 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 15 20:54:03 2011 -0700"
      },
      "message": "Add support for orientationAware touch pads.\nBug: 5038388\n\nChange-Id: I9c571b1542299334d2d64c5b33e456ec20ebc0ae\n"
    },
    {
      "commit": "6069139356ceb4d257f749954a2220b1f4fbf9cb",
      "tree": "beb0f34a8b9e1078df11aa9bdd182a48ae27bae8",
      "parents": [
        "1af6d27b9eb7ae65ca927b5842a375e00880df9c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 15 19:08:26 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 15 19:08:26 2011 -0700"
      },
      "message": "Remove more edge flag cruft.\n\nChange-Id: I4f9f4f4cc7c771a918aee82a941a3e86ecfe48fe\n"
    },
    {
      "commit": "a6111377e1edbc5d63fc2a7205d58b2d9c21d978",
      "tree": "fd15617bca88b09376203299dcdad291cc3eefce",
      "parents": [
        "a79f4b7df9d6d80b9371ba289040a60fa93bb87c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 21:48:23 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 21:48:23 2011 -0700"
      },
      "message": "Remove edge slop support.\n\nThe edge slop feature was added a long time ago for a specific\ndevice that had severe non-linear touch response issues near\nthe edges of its touch screen.  The feature is not useful on\nmodern hardware that is property calibrated.\n\nChange-Id: I26716cbc7411c31883ddb4bb4ddd981027790d0f\n"
    },
    {
      "commit": "9302c8796fc4dcda08d4bd1e11733848fd4fafaf",
      "tree": "1008e3db6ba1eb6ee02b7bf8c4a648a13a0b741d",
      "parents": [
        "14fcf900ce65e5c8c952c95ee12041f8de16fbb7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 13 22:51:29 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 04:11:21 2011 -0700"
      },
      "message": "Refactor input dispatcher use of window/app handles.\n\nThis change moves the cached window and application input state\ninto the handle objects themselves.  It simplifies the dispatcher\nsomewhat because it no longer needs to fix up references to\ntransient InputWindow objects each time the window list is updated.\n\nThis change will also make it easier to optimize setInputWindows\nto avoid doing a lot of redundant data copying.  In principle, only\nthe modified fields need to be updated.  However, for now we\ncontinue to update all fields in unison as before.\n\nIt turns out that the input dispatcher was inappropriately retaining\npointers to InputWindow objects within the mWindows InputWindow\nvector.  This vector is copy-on-write so it is possible and the\nitem pointers to change if an editing operation is performed on\nthe vector when it does not exclusively own the underlying\nSharedBuffer.  This bug was uncovered by a previous change that\nreplaced calls to clear() and appendVector() with a simple use\nof operator\u003d which caused the buffer to be shared.  Consequently\nafter editItemAt was called (which it shouldn\u0027t have, actually)\nthe buffer was copied and the cached InputWindow pointers became\ninvalid.  Oops.  This change fixes the problem.\n\nChange-Id: I0a259339a6015fcf9113dc4081a6875e047fd425\n"
    },
    {
      "commit": "023e8c72e9f5ab882f8413c6073e34531a7a794a",
      "tree": "7da170ec0070b2769f4c2d7dcb49cef2d43e562b",
      "parents": [
        "3ac60ada279e2cd24001c0f084982b7e14532ea6",
        "b99a82437cc999ecee143b82482dae36c13049f3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 13 13:00:38 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 13 13:00:38 2011 -0700"
      },
      "message": "Merge \"Revert \"fix a weird use of Vector::appendVector()\"\""
    },
    {
      "commit": "b99a82437cc999ecee143b82482dae36c13049f3",
      "tree": "9c0d9cadab1a2ddc91a56b0a16a23f026c1ccb09",
      "parents": [
        "198fd888add624cf9e53ce31b776568a5d069916"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 13 12:51:11 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 13 12:51:11 2011 -0700"
      },
      "message": "Revert \"fix a weird use of Vector::appendVector()\"\n\nThis reverts commit 198fd888add624cf9e53ce31b776568a5d069916\n\nThis change seems to have exposed some other bugs.\nBug: 5026631"
    },
    {
      "commit": "8c55a9a57e4f13ec420c3de7b3abfdcf454f6633",
      "tree": "f72fd5b0d50af585d7d4c644f84a288dffbc2946",
      "parents": [
        "067b873f7cc3d1b3e83604b78f8c0dc769f870b1",
        "bd882b1c8708686d373c56e07e6bb8b1cb6ffd9e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jul 12 12:15:07 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 12 12:15:07 2011 -0700"
      },
      "message": "Merge \"Remove the simulator target from all makefiles. Bug: 5010576\""
    },
    {
      "commit": "bd882b1c8708686d373c56e07e6bb8b1cb6ffd9e",
      "tree": "b17fbae7a6ff475ab37be48046d0540d594f84fb",
      "parents": [
        "3f9dd287b99340efaaa257759e71a8f81b2ed113"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "message": "Remove the simulator target from all makefiles.\nBug: 5010576\n\nChange-Id: I04d722f258951a3078fe07899f5bbe8aac02a8e8\n"
    },
    {
      "commit": "198fd888add624cf9e53ce31b776568a5d069916",
      "tree": "400599b48d7125b7548cb4646759c1d04f949300",
      "parents": [
        "cf7e3a5984e1709004d3e1138780d60f97f46e75"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 11 16:26:36 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 11 16:26:36 2011 -0700"
      },
      "message": "fix a weird use of Vector::appendVector()\n\noperator\u003d is way more efficient.\n\nChange-Id: I61c9adb1413bed230801a77151b8f7000fd11471\n"
    },
    {
      "commit": "a4d1bc517207d7ca8d56f0004cd04f0f1dd4567d",
      "tree": "28c492be5daf8cbb0714e3b7e56daea9aff63795",
      "parents": [
        "6894a2947eb1f9d499fd7f1a1ec4e7098e07d25d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 19:23:40 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 19:23:40 2011 -0700"
      },
      "message": "Drop obsolete touch screen hacks.\n\nChange-Id: I47354c37ee2cc2b36340eb709bb5043b3ba78ed9\n"
    },
    {
      "commit": "6894a2947eb1f9d499fd7f1a1ec4e7098e07d25d",
      "tree": "5aaf199228185826ea5deb9200adfc1633519994",
      "parents": [
        "63acea6ad4a9316e1450dea47840f45df4aaed25"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 17:59:27 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 19:08:15 2011 -0700"
      },
      "message": "Workaround apps that make assumptions about pointer ids.\n\nModified the touch input mapper to assign pointer ids sequentially\nstarting from 0 instead of using the tracking id or slot index\nsupplied by the driver.  Applications should not depend on this\nordering but some do.  (sigh)\n\nBug: 4980884\nChange-Id: I0dfeb3ac27c57a7102a13c960c760e2a02eb7669\n"
    },
    {
      "commit": "2717eff2ac04bed60e5fd577bcb8ec1ea7c2ccde",
      "tree": "4a9c6d1b14c4a9f80f386ae2578763942b0d046b",
      "parents": [
        "d0c18aabac682709e47b9b4a2fdd19cbb6820b7c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 30 23:53:07 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 02:59:26 2011 -0700"
      },
      "message": "Query input device for initial slot index.\n\nThis fixes a problem where touches can get stuck because the\ndriver and the framework have different ideas of what the\ninitial slot index is.  The framework assumed it was slot 0\nbut it could in principle be any slot, such as slot 1.  When\nthat happened, the framework would start tracking the first\ntouch as slot 0, but it might never receive an \"up\" for that slot.\n\nChange-Id: Idaffc4534b275d66b9d4360987b28dc2d0f63218\n"
    },
    {
      "commit": "d6401253183213ec6d07caae4ab778d6e1db7155",
      "tree": "c7f476056c2077fc4c17d89339431f012295e878",
      "parents": [
        "6e24576b6b10336e37c6447a5e2dbde5ea332da6",
        "2e45fb6f951d0e0c68d4211fe68108d2230814bc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 29 21:20:36 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 29 21:20:36 2011 -0700"
      },
      "message": "Merge \"Fix joystick and trackpad regression.\""
    },
    {
      "commit": "2e45fb6f951d0e0c68d4211fe68108d2230814bc",
      "tree": "1219299e2e1d4ea119dc1f244e19d04adfd6995b",
      "parents": [
        "6d18419a3c4a37213737d6372930b720b566b70e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 29 21:19:05 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 29 21:19:05 2011 -0700"
      },
      "message": "Fix joystick and trackpad regression.\n\nChange-Id: I33b6756f95a6b0725ffa210f341da3c98426491b\n"
    },
    {
      "commit": "439863f3b3e725b5de1cba4940a21900369961c0",
      "tree": "90ab56432c2436c3392b02ba08876c86796a36ef",
      "parents": [
        "f1bfa84ccf61cad2b6ea9f2e6a612a54a38b79bc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 28 19:09:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 29 15:05:41 2011 -0700"
      },
      "message": "SF transactions are now O(1) wrt IPC instead of O(N).\n\nChange-Id: I57669852cbf6aabae244ea86940a08a5a27ffc43\n"
    },
    {
      "commit": "aba321aa6f1be57beac70bd540812eea1c8262c5",
      "tree": "3e879b4cde45b6acc44d46de367db84060216368",
      "parents": [
        "8134681b25dfff814ffeaad8ff70e84316c1869f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 28 20:34:40 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 28 20:34:40 2011 -0700"
      },
      "message": "Add some logging code to track down touch issues.\n\nChange-Id: I9bd7af6b93f82a83c6863986d21e7a222d97e4ae\n"
    },
    {
      "commit": "8134681b25dfff814ffeaad8ff70e84316c1869f",
      "tree": "f18a057883c84db1dddd63767dff0b226d8a3e43",
      "parents": [
        "53ca3f13e70fda98aa9f39bb0c15afaf435e3904"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 28 20:08:48 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 28 20:10:40 2011 -0700"
      },
      "message": "Improve input event consistency invariants.\n\nFixed some issues where inconsistent streams of events could\nbe generated by the dispatcher, particularly when switching from\nhovering with one device to hovering with another.\n\nFixed a bug where the touch pad would fail to generate a new\nHOVER_MOVE following a tap event.  As a result, the hover event\nstream would not resume until the user touched the touch pad\nagain.\n\nChange-Id: I444dce84641fb12e56a0af84c931520771d6c493\n"
    },
    {
      "commit": "53ca3f13e70fda98aa9f39bb0c15afaf435e3904",
      "tree": "3e6dc47b4bf8fa93d5cd1d79c8cdf4a00f506f66",
      "parents": [
        "9df32619f376768c408969a40d40c54324e30b99"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 27 18:36:00 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 27 21:35:59 2011 -0700"
      },
      "message": "Hover and stylus API cleanup.\n\nAdded missing setOnHoverListener method.\nRemoved BUTTON_STATE_ERASER.\n\nChange-Id: I5d820d0a8e47fe5fd2d88e9fd9fc3fc6ce0dea0d\n"
    },
    {
      "commit": "474dcb5c3ddff737c4ac9fc44a1f7be569605e5f",
      "tree": "5fc1710768966b240ded5e6e62e51f77d7e57c55",
      "parents": [
        "93fa9b30b91f75ee161d0791ff17f98d1a603812"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 14 20:22:50 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 14 22:07:31 2011 -0700"
      },
      "message": "Add support for disabling pointer gestures.\n\nMade it possible for individual windows to disable pointer gestures\nwhile the window has focus using a private API.\n\nCleaned up the InputReader configuration code to enable in-place\nreconfiguration of input devices without having to reopen them all.\nThis change makes changing the pointer speed somewhat nicer since the\npointer doesn\u0027t jump back to the origin after each change.\n\nChange-Id: I9727419c2f4cb39e16acb4b15fd7fd84526b1239\n"
    },
    {
      "commit": "93fa9b30b91f75ee161d0791ff17f98d1a603812",
      "tree": "b396a5af94c2ba0c50c05b4045dc880a7e0e6a52",
      "parents": [
        "c391a9888c6c3038a53fd53c330a65f68ff09a28"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 14 17:09:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 14 21:37:53 2011 -0700"
      },
      "message": "EventHub code cleanup.\n\nUse epoll_wait() instead of poll().\nDropped all support for non-Linux platforms.\nAdded a wake-up protocol so that the InputReader can wake up\nthe event loop immediately as needed.\n\nChange-Id: Ibf84337bcceb3c2df068c5c637de42a319786d66\n"
    },
    {
      "commit": "98db5fabdad86dca379740d8050697950b9f026c",
      "tree": "d73d51bed473f165d74eb6cac1aee571fce3b183",
      "parents": [
        "b3a2d1330716812784aee91b6d6275764b5e4210"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 08 15:37:10 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 13 18:05:18 2011 -0700"
      },
      "message": "Allow touches to slide out of the navigation bar.\n\nChange-Id: I73cabba3d62f47829bf6217700ace56a27c42b1d\n"
    },
    {
      "commit": "b3a2d1330716812784aee91b6d6275764b5e4210",
      "tree": "e7f97e16ba9076a77d64acd94ebb32ad0d9fbede",
      "parents": [
        "10e78c9df09378c7d1ef1be9a8c42659ccce1eb7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 12 18:14:50 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 13 18:05:15 2011 -0700"
      },
      "message": "Take advantage of updated linux/input.h kernel headers.\n\nChange-Id: I72d2ef82de5c504d46b0cdb57aa43bbd0d769174\n"
    },
    {
      "commit": "7a9db181a64e0e752a447c6408639bbb33c412fc",
      "tree": "02eda27ab6a57ef402997226358f0fb510f9ab10",
      "parents": [
        "038b737c7561e6a92edcd6267f1299d2602f1920"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Jun 02 15:16:05 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 10 22:53:16 2011 -0700"
      },
      "message": "No position information for outside touches\n\nWhen a window registers to listen for outside touches, it doesn\u0027t need\nthe position information for touches that land outside of its activity\nfor normal use cases.\n\nThis patch uses the foreground window\u0027s UID as a filter to determine\nwhether to pass the position information. This will allow applications\nto continue to rely on touch information for inputs that were directed\nat one of its other windows.\n\nBug: 4541250\nChange-Id: If16eb1ec8404b797d991859eef55ac0a20a355a3\n"
    },
    {
      "commit": "9429e6ebe427e1bde01391d53f323ec33d540a14",
      "tree": "c8c0374f32a2f32425bd530840094070deb0e364",
      "parents": [
        "023180409516b463b7358ec42bd3a810b2e225c3",
        "92110af24a9a93b73264560b57f55f45ec65dab5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Thu Jun 09 11:56:21 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 09 11:56:21 2011 -0700"
      },
      "message": "am 92110af2: am 5f0b1721: am 25bd8abc: Merge \"Fix swipe gesture cosine calculation. Bug: 4124987\" into honeycomb-mr2\n\n* commit \u002792110af24a9a93b73264560b57f55f45ec65dab5\u0027:\n  Fix swipe gesture cosine calculation. Bug: 4124987\n"
    },
    {
      "commit": "cb0c55ed37495dfd5b04a80c9e024f91ba926109",
      "tree": "c9b3d8d195036ac9026989e2640cdba59bbd30f0",
      "parents": [
        "72c7362080c355c538ae2c46ac03501689e73736",
        "e046555b4d92179327d12d888be967fff5c027ca"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 17:52:53 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 07 17:52:53 2011 -0700"
      },
      "message": "am e046555b: am fd324486: am 5cb05eea: Merge \"Fix build.\" into honeycomb-mr2\n\n* commit \u0027e046555b4d92179327d12d888be967fff5c027ca\u0027:\n  Fix build.\n"
    },
    {
      "commit": "051e8f2bfa3ada8ee64d8a4f4d69ad9286209516",
      "tree": "5bf5b2e3d168fa9a8e490edc1c64f667920b3b30",
      "parents": [
        "774ed9d9537c15482e8baca2f2890c5d2f4ffe75",
        "55cc25c12c45e8ffb65d2275cc0b6941b68db9df"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 17:52:22 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 07 17:52:22 2011 -0700"
      },
      "message": "am 55cc25c1: am 797dc698: am b92dcf9c: Merge \"Simplify spot tracking logic. Bug: 4124987\" into honeycomb-mr2\n\n* commit \u002755cc25c12c45e8ffb65d2275cc0b6941b68db9df\u0027:\n  Simplify spot tracking logic. Bug: 4124987\n"
    },
    {
      "commit": "774ed9d9537c15482e8baca2f2890c5d2f4ffe75",
      "tree": "a22195f0a2d7e97ce86126610a0ece0d9f579460",
      "parents": [
        "f5969553727e7a9058820291439403bb3f9b327f",
        "8b2c00144ac262a6fbdbbac1ed8dfe813b883f81"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 07 17:48:39 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 07 17:48:39 2011 -0700"
      },
      "message": "resolved conflicts for merge of 8b2c0014 to master\n\nChange-Id: I33a5a2949dc6c2d09e8196ba8c7128caa7ac2361\n"
    },
    {
      "commit": "6674d9bf0a53387df0cf8482458cf5f9ab274ec0",
      "tree": "97da2f8df8afc3a22b1d954e9b96a776d3f9477a",
      "parents": [
        "9181a5f40cf5ac7d413d5bc3bd6c15cc6d13705f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 16:50:14 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 16:50:14 2011 -0700"
      },
      "message": "Fix swipe gesture cosine calculation.\nBug: 4124987\n\nRecent changes introduced a multiplication factor into the\ndistance calculation which ended up being absent from the\ndot product calculation.\n\nChange-Id: Ia367912b9ac09b6285d5a498a0c271563c9e9e39\n"
    },
    {
      "commit": "9181a5f40cf5ac7d413d5bc3bd6c15cc6d13705f",
      "tree": "a73332b2f19cca7dd987db6d998be8ae5290c6fc",
      "parents": [
        "ac55c2b1ea5c4a1284bf06744380bf32e6aeb7d6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 21:04:14 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 21:04:14 2011 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I9ea07637058e2aa74d20d881bc21fea305cc869e\n"
    },
    {
      "commit": "cb5ffcf0e41d2597401208221c61589547a00f3d",
      "tree": "b418a886481f1c5fb0b392c016c1a38cd0f6ce7b",
      "parents": [
        "bb3fcba0caf697f1d238a2cbefdf1efe06eded99"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:03:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:06:19 2011 -0700"
      },
      "message": "Simplify spot tracking logic.\nBug: 4124987\n\nSince spots are now one-to-one with the touch gesture points,\nwe can eliminate a lot of redundant logic that assumed they weren\u0027t.\n\nChange-Id: Ic60d8d0898c285317f480bc8fb17fb9797770e69\n"
    },
    {
      "commit": "bb3fcba0caf697f1d238a2cbefdf1efe06eded99",
      "tree": "61dccaf85759b22557e978672b81bd686089e087",
      "parents": [
        "7f5b99676f2fda710c2182cae16f6b9094a1d98c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 19:23:05 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 19:23:05 2011 -0700"
      },
      "message": "Touch pad improvements.\nBug: 4124987\n\nOnly show one spot per touch point instead of one spot per\nfinger for multitouch gestures.\n\nTweaked the pointer acceleration curves.\n\nDissociated the hover/tap timeouts from the \"tap\" timeout\nsince they mean very different things.\n\nChange-Id: I7c2cbd30feeb65ebc12f6c7e33a67dc9a9f59d4c\n"
    },
    {
      "commit": "b12682270aebc110c9518bddae7a8aecc070cad7",
      "tree": "9e69a1c0d84d36b0a3e76036ddc9792e96ad73c2",
      "parents": [
        "7218d830e27d81141588cd6e37f206d141a18f62"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 03 17:06:16 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 03 17:08:09 2011 -0700"
      },
      "message": "Use pointer mode instead of spots for SEMI_MT touch pads.\n\nThe spot-based presentation relies on being able to accurately\nlocate and distinguish two or more fingers on the touch pad.\nWe can still do gesture recognition without distinct multitouch\nbut it doesn\u0027t make sense to show spots because we can\u0027t be sure\nthat the spots will appear in the right places.\n\nChange-Id: Ia282d77000bf3b50d395273a1f0ac0bbe55b3c6f\n"
    },
    {
      "commit": "7218d830e27d81141588cd6e37f206d141a18f62",
      "tree": "fae19a482a9c238fb94b1f46e7b37daf4f18a3ab",
      "parents": [
        "a742f854901b8306d3696c9e9b7881c207130a01",
        "ca2b552d981239043a575dfc9db86966492d0f9e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 03 15:50:27 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jun 03 15:50:27 2011 -0700"
      },
      "message": "resolved conflicts for merge of ca2b552d to master\n\nChange-Id: I2f3693a59042ac5aa2d7bcdc3a504c78dc99a18b\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": "f3b57def9345d6d3cac3604d6a970f6d48f345ec",
      "tree": "e4a0926992c2ed61953a07f329693dd0e6590b25",
      "parents": [
        "201e6606e78c67e8d94b131f43789c5d8aaf3beb",
        "7e193916c033bc952222ca808916b2dc4b4b557d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 03 12:13:24 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 03 12:26:54 2011 -0700"
      },
      "message": "resolved conflicts for merge of 7e193916 to master\n\nChange-Id: If06892419319c3a2d4ab6b03dd3ceb99b83803b5\n"
    },
    {
      "commit": "60a126a4c8f3bd1a36feb567ddd02a01ab298d54",
      "tree": "977c35c7f8f4f55a828a01c592e24f8b3977fbd5",
      "parents": [
        "501017eb8fb44bff2d32e68f56544ca8976749d9",
        "441a9c28f5831974905a3aee238d741461138ed5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 02 18:31:47 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 02 18:31:47 2011 -0700"
      },
      "message": "Merge \"Fix ABS_MT_SLOT handling.\""
    },
    {
      "commit": "441a9c28f5831974905a3aee238d741461138ed5",
      "tree": "94463fef02fd262c78695a62ebb8436796753ee3",
      "parents": [
        "8f40e5871213afb63ae4b68a44dd09e0a014e417"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 02 18:22:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 02 18:29:10 2011 -0700"
      },
      "message": "Fix ABS_MT_SLOT handling.\n\nShouldn\u0027t reset the current slot index to 0 after each SYN_REPORT.\n\nChange-Id: I370e4770f8ae0ce598369ecbaf64772c13e02d46\n"
    },
    {
      "commit": "1a84fd1fb7a51f3fe4f8865e1cdd09f3490f696c",
      "tree": "cf9491aedb10c8355e62ae8384db0e9f005beb1c",
      "parents": [
        "19c97d46fb57f87ff45d9e6ea7122b4eb21ede8c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Thu Jun 02 01:26:32 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Thu Jun 02 15:39:21 2011 -0700"
      },
      "message": "Add a preference panel for mouse speed.\n\nBug: 4124987\nChange-Id: I3ce175d268a1d043cf5878481261b1049a15a149\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": "b530abcff5ae8e5ebb75ec6aa42b7c7c190e98a5",
      "tree": "f5386df4f29aea3a8ef67ee92283590aa3cc6829",
      "parents": [
        "e129509422a17733bf286c8b0c5af28f9cd1643b",
        "3f5b95b05efcf7ab2e8f193649b841dc1786f2ef"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 31 16:03:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 31 16:03:07 2011 -0700"
      },
      "message": "am 3f5b95b0: am a4e74744: am fa574c0e: Merge \"Touch pad UX improvements.\" into honeycomb-mr2\n\n* commit \u00273f5b95b05efcf7ab2e8f193649b841dc1786f2ef\u0027:\n  Touch pad UX improvements.\n"
    },
    {
      "commit": "214eaf48878bba00cbd5831871bcbd82632b6e34",
      "tree": "e981793f6a27d6aa789d92fe49ea346433452ae0",
      "parents": [
        "4e3f7206eb0af14d3da4c03bdf9918161774e726"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Thu May 26 19:17:02 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 31 15:00:59 2011 -0700"
      },
      "message": "Use ViewConfiguration to seed input system configuration.\n\nFix bug where the pointer presentation would be updated on\nany input reader timeout rather than only when a pointer gesture\nis in progress.\n\nBug: 4124987\nChange-Id: Ie9bba4a0b3228d55e45e65fa2ede5cd6ba887a08\n"
    },
    {
      "commit": "4e3f7206eb0af14d3da4c03bdf9918161774e726",
      "tree": "e215aef3d33b636e7478ff0a3be97d0f4a3d7aa0",
      "parents": [
        "2a108403803bd30bee1c019060c208fb8c52c10c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 31 15:00:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 31 15:00:58 2011 -0700"
      },
      "message": "Button state should reflect actual buttons. (DO NOT MERGE)\n\nBug: 4124987\nChange-Id: If0585bd1432c8c61ed0c9a6a4f6de4a62e3f6e53\n"
    },
    {
      "commit": "538881e18323a0c983bd8809f8c3b1cdeeeab8a6",
      "tree": "da646d2cb739b3eb72ee78360b062ccda762dc07",
      "parents": [
        "2cb7981e70dd1d4e4368dbef8797d336e0797b61"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 18:23:38 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 19:08:49 2011 -0700"
      },
      "message": "Touch pad UX improvements.\n\nFade the pointer spot when swiping or performing a freeform\ngesture.\n\nSupport configuring the gesture mode in the device IDC file.\n\nAdded workaround for devices that report individual finger\nmovements one at a time instead of all at once.\n\nBug: 4124987\nChange-Id: I44628b00382ad59306e4ec5c4717d69cc6fbebb8\n"
    },
    {
      "commit": "2cb7981e70dd1d4e4368dbef8797d336e0797b61",
      "tree": "4dbab6702f87bedd2c1898690857abd5d5521155",
      "parents": [
        "b416e241db85b678cdfcdee1c74a7f356a5554ef"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 18:52:21 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 18:53:49 2011 -0700"
      },
      "message": "Fix deadlock in dispatcher. (DO NOT MERGE)\n\nThis regression was caused due to a bad cherry-pick / merge.\n\nChange-Id: I79e84285bbfd4cd4b66681461543fb185b60d3ba\n"
    },
    {
      "commit": "b416e241db85b678cdfcdee1c74a7f356a5554ef",
      "tree": "0cc3e409f5c0ed645027bf3c2f86663496659442",
      "parents": [
        "325bd07b311f8ba68079000e9fe8afbcc076d7b6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 24 15:17:57 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:18 2011 -0700"
      },
      "message": "Fix bug reporting presence of orientation axis. (DO NOT MERGE)\n\nChange-Id: I20aecca392d2843601e6e0ec4ac913c8ccdbbf89\n"
    },
    {
      "commit": "325bd07b311f8ba68079000e9fe8afbcc076d7b6",
      "tree": "294be252cd5b4a197e8709b014f436bedaf200d0",
      "parents": [
        "86ea1f5f521981d075aef56f11693e4f3bc32fdb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 21:20:10 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:17 2011 -0700"
      },
      "message": "Add tap/drag touchpad gesture. (DO NOT MERGE)\n\nThe mapper sends a DOWN when the finger is released then starts\na short timer.  If the finger is not pressed again before the timer\nelapses, then the mapper sends an UP to complete the tap.  If the\nfinger is pressed again then the mapper starts sending MOVEs\nas part of a drag.\n\nDouble/triple taps work as intended because we also start watching\nfor a new tap when the finger is pressed again.  If a new tap\noccurs the old tap is also finished.  So each individual finger\nshort press/release cycle constitutes a distinct tap.\n\nChange-Id: Id0a6ee10dd27e723f6cb04e56b43939abe9e940c\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": "a6dbfdd3a858aac52cc87f80f91e8eef7d613605",
      "tree": "2807e5662e74b090e880588f39cdc1caf4e01e0e",
      "parents": [
        "5ced76a14350db56f1a80f00076f8be3d982c389"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 11:54:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:16 2011 -0700"
      },
      "message": "Add a sprite controller. (DO NOT MERGE)\n\nRefactored PointerController to extract the surface management\ncode to a new component called a SpriteController so that it can\nbe used to move finger tracking spots around the screen as well.\nThe SpriteController is designed to fully decouple the client from\nany latency introduced by surface transactions and drawing.\nAll sprite updates are performed asynchronously on the Looper using\na copy of the sprite state.\n\nAdded a stub SpotController implementation for touch pad UX.\nIt will be implemented in a subsequent patch.\n\nFixed a little bug in pointer orientation changes when entering\nDISPLAY_ORIENTATION_90 the x offset was clobbered.\n\nChange-Id: I6d59d80df9af61e93af50290e7776337d10c9d5a\n"
    },
    {
      "commit": "5ced76a14350db56f1a80f00076f8be3d982c389",
      "tree": "e4999223efed26ef0864761a1a47bafaf99e1dac",
      "parents": [
        "7157f6fe13ab7e2fef44cc33c95d1c531418220f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 24 11:23:27 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:16 2011 -0700"
      },
      "message": "Coalesce input events that arrive faster than 333Hz. (DO NOT MERGE)\n\nSome drivers report individual finger updates one at a time\ninstead of all at once.  When 10 fingers are down, this can\ncause the framework to have to handle 10 times as many events\neach with 10 times as much data.  Applications like\nPointerLocation would get significantly bogged down by all\nof the redundant samples.\n\nThis change coalesces samples that are closely spaced in time,\nbefore they are dispatched, as part of the motion event batching\nprotocol.\n\nIncreased the size of the InputChannel shared memory buffer so\nthat applications can catch up faster if they accumulate a\nbacklog of samples.\n\nChange-Id: Ibc6abf8af027d9003011ac75caa12941080caba3\n"
    },
    {
      "commit": "7157f6fe13ab7e2fef44cc33c95d1c531418220f",
      "tree": "f0c10ae8a4fbd2fa351c61f824eea908fbf45e90",
      "parents": [
        "d0132e8e187ebf69bf4d2d6d0ef0027ff3f7a727"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Apr 06 17:19:48 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:15 2011 -0700"
      },
      "message": "Allow batching samples onto the pending motion event. (DO NOT MERGE)\n\nThis enlarges the window of opportunity for batching to\nencompass time spent for the window to become ready (while it is\nbusy processing the last event).\n\nChange-Id: I8870cc3081d27a4de659fb4e375f888fe966460b\n"
    },
    {
      "commit": "524ee64b91bc123e1ccfc881a0f1a1e84722251d",
      "tree": "c3f358e5a7afc91dd63265e01ecbf3db781f58eb",
      "parents": [
        "22d789d580a4ab5bed83c0ed698d2f5bc721e176"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 29 15:11:34 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 24 15:21:46 2011 -0700"
      },
      "message": "Support chorded fallback keys. (DO NOT MERGE)\n\nAlso be more careful about canceling fallback keys during focus\ntransitions, when the application handles the key, or when the\npolicy decides to do something different.\n\nFixed a crash due to JNI CallObjectMethod returning an undefined\nvalue (not null) when an exception is thrown.\n\nFixed a crash due to the policy trying to create a Dialog for\nrecent apps on the dispatcher thread.  It should happen on the\npolicy\u0027s Looper instead.\n\nBug: 4187302\nChange-Id: I043f82913830f411b3bb4018d6422467b6ca454f\n"
    },
    {
      "commit": "22d789d580a4ab5bed83c0ed698d2f5bc721e176",
      "tree": "9d848a0918aa939b457a6fa92bedf43612a50cba",
      "parents": [
        "dbf8d27f4c32e20e132e90ad713c6ebaf71d7756"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 25 11:58:46 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 24 15:21:46 2011 -0700"
      },
      "message": "Fix focused application handle. (DO NOT MERGE)\n\nFix a bug where we were always setting the focused application\nhandle to NULL.  This broke ANR processing while starting\napplications and caused input events to be dropped while\nstarting applications.\n\nBug: 4174573\nChange-Id: Ice7ce3a2b65219568a8227fc1383bafb294666b5\n"
    }
  ],
  "next": "dbf8d27f4c32e20e132e90ad713c6ebaf71d7756"
}
