)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "dbf8d27f4c32e20e132e90ad713c6ebaf71d7756",
      "tree": "a7dbe3db8501916c9b564c12bd997b59335c9182",
      "parents": [
        "68d6075b4ad2205c10064c78cde552e3210cca91"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 18 18:14:26 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 24 15:21:21 2011 -0700"
      },
      "message": "Optimize EventHub to process events in big chunks. (DO NOT MERGE)\n\nWhen 10 fingers are down, reduces the CPU time spent by the InputReader\nthread from ~30% to ~5% on Stingray.\n\nChange-Id: I42ee5c67b8521af715cbab43e763a4af4eb1f914\n"
    },
    {
      "commit": "9f2106f2bcbb82cd2d8a80f24ab0cdafeb6b5d8f",
      "tree": "c56c07e40287e938646796046515db1deab1a703",
      "parents": [
        "80fd47ce75253dcdc2cfa85d7a3f42634b923a47"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 24 14:40:35 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 24 14:40:35 2011 -0700"
      },
      "message": "Disable pointer debug logging.\n\nChange-Id: I00628fa369cb1b179a1907f9cb19de8ca4c755ab\n"
    },
    {
      "commit": "80fd47ce75253dcdc2cfa85d7a3f42634b923a47",
      "tree": "1edece586e3143d7f4e27e2f497f6d629365628a",
      "parents": [
        "ebed7d6e35f7f960e6e6add2b8ab7c7a31a511c3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 24 01:07:44 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 24 14:39:19 2011 -0700"
      },
      "message": "Input device protocol enhancements.\n\nAdded support for Linux multitouch protocol B (slots).\n\nAdded support for using the device\u0027s input properties as a hint\nto determine the intended usage of a touch device.\n\nAdded support for the ABS_MT_DISTANCE axis.\n\nFixed a bug reporting the presence of the orientation axis.\n\nChange-Id: Icf7b5a5a0f1a9cdf6ad2b35be8ea0c1a35815d48\n"
    },
    {
      "commit": "68d6075b4ad2205c10064c78cde552e3210cca91",
      "tree": "a8f8e79d5bddb76dd0578a02c17646a05021bbd9",
      "parents": [
        "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:20:42 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated. (DO NOT MERGE)\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: I89c1171c9326c6e413042e3ee13aa9f7f1fc0454\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": "ae7bc6529a40cdc25c65c28b76266e0c873861c4",
      "tree": "fff4abf8b4cb9b9100c4deefb4bb7f8724584e7e",
      "parents": [
        "dce3e2e120e029bd0f88e5e5cd760cd787b580e1",
        "0d9288d7848e144fdf7afbd7284254dae3d13d43"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Fri May 13 15:22:35 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 13 15:22:35 2011 -0700"
      },
      "message": "am 0d9288d7: am 2bdb756c: am 4fb76253: Fix bounds check. Bug: 4413945\n\n* commit \u00270d9288d7848e144fdf7afbd7284254dae3d13d43\u0027:\n  Fix bounds check. Bug: 4413945\n"
    },
    {
      "commit": "4fb76253f255f0adb8a64835af37bb9176ee4016",
      "tree": "2585ba2501180f9b02a0ab6bc45a4df668ae4bbc",
      "parents": [
        "0ed2e845db3f6bc7bc12a08ada18363942c2fb3d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Fri May 13 12:51:12 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Fri May 13 12:51:12 2011 -0700"
      },
      "message": "Fix bounds check.\nBug: 4413945\n\nAlso remove dead code from header file.\n\nChange-Id: I4e9fc9d7f8612fedb436e62649d308bd737ed138\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": "2ba3e80f942d35695310f8dde8c16d9687447e47",
      "tree": "2bd575b860b214f5b5cd2cf19e25abb6dc066e6b",
      "parents": [
        "2bb51bb203c117649db10ad8bd497f199ca797b0",
        "037b54cf3c85a41087f8346dd66cd426b132d899"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 11 10:59:54 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 11 10:59:54 2011 -0700"
      },
      "message": "resolved conflicts for merge of 037b54cf to master\n\nChange-Id: I1bc2827596a349963d8aa2b63b3f7801f155668a\n"
    },
    {
      "commit": "e7d25b74b0f5c8ad32225c7a3e98a0d1717eb7c7",
      "tree": "652330584e9291210cd781f118afeb8625ef92f3",
      "parents": [
        "0c6cbf410a642f6e9cea7cca0a6e53a4a3cdd324"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 09 21:19:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 09 21:19:26 2011 -0700"
      },
      "message": "Fix scaling of batched motion events.\n\nChange-Id: I1e070c936f7b2e8f1bb7ebae62b1df0aa6998b82\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": "8956dbbc5f292d8b79072ae73b25f2114c8c7479",
      "tree": "c4519bd579f2520324a7e759e96dbf93f9168fac",
      "parents": [
        "6d8a98afb0bda0d8a38b8839af94918c76a8fd2c"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@android.com",
        "time": "Fri Apr 22 07:55:02 2011 -0400"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@google.com",
        "time": "Wed Apr 27 15:00:31 2011 -0400"
      },
      "message": "On-screen navigation bar (separate from the status bar).\n\nIn Honeycomb we introduced navigation controls in the status\nbar, for xlarge devices without physical buttons. What about\nphones? The status bar is pretty cramped already, and\nbesides, it\u0027s at the top of the display most of the time,\nnot at the bottom where your thumb is likely to be.\n\nEnter the navigation bar. It\u0027s a new window type that\nappears atop almost everything (including the keyguard); the\nwindow manager subtracts its rectangle from the default\nvisible rectangle of other windows (including the status bar\nand notification shade).\n\nHowever, it behaves (on phones) like the status bar in that\napplications that request fullscreen windows can get access\nto those pixels. Well, almost; they need cooperation from\nthe navigation bar implementation to make the navbar\ndisappear, just like the status bar.\n\nThe current SystemUI implementation of the navigation bar on\nphones is still rough, but it has the basics:\n\n + back, home, and menu keys (NB: we\u0027re showing menu all the\n   time right now because checking the api level of the\n   package owning the top window is currently a poor\n   indicator of whether the app requires the menu key)\n + it tries to stick to the same physical end of the device,\n   regardless of device orientation (on a phone, this is\n   the strip of land closest to the microphone)\n\nChange-Id: Ic613a3351220af0bbfbdef63e1d99cbefd5ed1c2\n"
    },
    {
      "commit": "6d8a98afb0bda0d8a38b8839af94918c76a8fd2c",
      "tree": "7383d53c17c9f405c1e6bd41227c2504cf75ff2a",
      "parents": [
        "1bde6f428e8742cbd8cc72c26967d32f10979694"
      ],
      "author": {
        "name": "Daniel Sandler",
        "email": "dsandler@google.com",
        "time": "Wed Apr 27 14:07:12 2011 -0400"
      },
      "committer": {
        "name": "Daniel Sandler",
        "email": "dsandler@google.com",
        "time": "Wed Apr 27 14:08:17 2011 -0400"
      },
      "message": "Make InputWindow.h\u0027s window types align with WindowManager.java\u0027s.\n\nChange-Id: Ia4919e02882ebc682c80bfaae1fa775606f17098\n"
    },
    {
      "commit": "5db1314192b462f3666455fdae42a96ec2918ce9",
      "tree": "008b1830d7e9aef13f1b4d56a7096b6629192a6c",
      "parents": [
        "b104800b6cfaec78e5912015c63f8fc6a2437d0e",
        "9638e5c167be321643bf3f3ee39e3fb45541fb3b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 21 17:14:18 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 21 17:14:18 2011 -0700"
      },
      "message": "Merge \"Get rid of the \"pid\" parameter from createSurface\""
    },
    {
      "commit": "9638e5c167be321643bf3f3ee39e3fb45541fb3b",
      "tree": "ec79a54e7f44db04b4b5cc7f09ba944f6836a258",
      "parents": [
        "2a231f8435dba525c838779e0fd44710ea23cd98"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 20 14:19:32 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 20 14:26:11 2011 -0700"
      },
      "message": "Get rid of the \"pid\" parameter from createSurface\n\nChange-Id: I28635e3f803e6abe965d79998e305f54a202465d\n"
    },
    {
      "commit": "79ac969d7a84b7198f9ed814cc0b2f0b7e11a662",
      "tree": "0dad92305f9171d8f7e0aebd2eb1a2b1ccfbf265",
      "parents": [
        "3f14891fc9e764d97de07b109f066aedfff90c2e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 21:20:10 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 21:20:10 2011 -0700"
      },
      "message": "Add tap/drag touchpad gesture.\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: Iaa51182edee4378162a66adfd746088e93af2a30\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": "5541de9ea3513a12d1ac2ad07e7e04a3aa7741a0",
      "tree": "3ac3cd85bf588df25aed0a0df29e70629a096547",
      "parents": [
        "5008e92d1fd573d926cd55c39ca723a6fbdf7c4b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 11:54:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 14:08:29 2011 -0700"
      },
      "message": "Add a sprite controller.\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: Ib25d162d577c9b354cb74d5d761c3c9f9f438d42\n"
    },
    {
      "commit": "4e91a180be46c0c7c3bf398d4df4cbe2404216b5",
      "tree": "2e96b54a039a917cb0b4b13f318500e3b5f39396",
      "parents": [
        "f6989da7c7727ad433b75ad2c8d8d23c2651f70b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 07 11:38:09 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 07 13:11:16 2011 -0700"
      },
      "message": "Coalesce input events that arrive faster than 333Hz.\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\nAdded logging code to help measure input dispatch and drawing\nlatency issues in the view hierarchy.  See ViewDebug.DEBUG_LATENCY.\n\nChange-Id: Ia5898f781f19901d2225c529a910c32bdf4f504f\n"
    },
    {
      "commit": "f6989da7c7727ad433b75ad2c8d8d23c2651f70b",
      "tree": "6e128a7ed1e164a12fe155d6855743fb85b44490",
      "parents": [
        "5487500cf3d9f6d7703ce0704cb91837aa95d716"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Apr 06 17:19:48 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Apr 06 17:19:48 2011 -0700"
      },
      "message": "Allow batching samples onto the pending motion event.\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: I3fb5a394ab1b85d6591192678168ca6e35dd9d53\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": "0029c66203ab9ded4342976bf7a17bb63af8c44a",
      "tree": "a0d5f54ff6f88dae18179d1621dd2c87f1fa8d27",
      "parents": [
        "6e6cd7a5660af1a4b5a9ad091c41ef1c72ad2000"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 30 02:25:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 30 16:55:15 2011 -0700"
      },
      "message": "Add input filter mechanism for accessibility.\n\nThis patch adds a mechanism for capturing, filtering, transforming\nand injecting input events at a very low level before the input\ndispatcher attempts to deliver them to applications.  At this time,\nthe mechanism is only intended to be used by the accessibility\nsystem to implement built-in system-level accessibility affordances.\n\nThe accessibility input filter is currently just a stub.\nIt logs the input events receives and reinjects them unchanged,\nexcept that it transforms KEYCODE_Q into KEYCODE_Z.\n\nCurrently, the accessibility input filter is installed whenever\naccessibility is enabled.  We\u0027ll probably want to change that\nso it only enables the input filter when a screen reader is\ninstalled and we want touch exploration.\n\nChange-Id: I35764fdf75522b69d09ebd78c9766eb7593c1afe\n"
    },
    {
      "commit": "6e923274c593bb52232321fc9ebbd966657e69f8",
      "tree": "68fd47b67dee5d821d8357bacb7024dcab4eaa71",
      "parents": [
        "5c8eff3308c79f25bfe07d00c214f665581e5d7e",
        "da3d5a91b6b311ed77f2707d4456c1f18b84d73b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 29 16:19:46 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 29 16:19:46 2011 -0700"
      },
      "message": "Merge \"Support chorded fallback keys.\""
    },
    {
      "commit": "da3d5a91b6b311ed77f2707d4456c1f18b84d73b",
      "tree": "20ff48478df49e47372c89431ff6dc7e0671059d",
      "parents": [
        "a2cc28d732577dd48a02de637c635e9764400248"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 29 15:11:34 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 29 16:16:55 2011 -0700"
      },
      "message": "Support chorded fallback keys.\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: I659a3fd1bd2325ed36d965f9beb75dacb89790c9\n"
    },
    {
      "commit": "696257ccf315a1da042787c5b2d1f80c7146fc94",
      "tree": "39c185c6f97540243e5d071e545343822f46f2cc",
      "parents": [
        "1be6cce70175bd90744498d5fca95e3f9eec1cf6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 25 18:42:40 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 25 18:42:40 2011 -0700"
      },
      "message": "merge libsurfaceflinger_client into libgui\n\nthis is the first step in unifying surfacetexture and surface.\nfor this reason the header files were not moved, as most of them\nwill eventually go away.\n\nNOTE: currently we keep libsurfaceflinger_client.so as an empty\nlibrary to workaround prebuilt binaries wrongly linking against\nit.\n\nChange-Id: I130f0de2428e8579033dc41394d093f4e1431a00\n"
    },
    {
      "commit": "a2cc28d732577dd48a02de637c635e9764400248",
      "tree": "fa94a7753206ae1f7ffb0332ef9ca6d9c4867058",
      "parents": [
        "c33d8d49e44358d72f19e7f7730c03d3902fa1f2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 25 11:58:46 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 25 15:06:17 2011 -0700"
      },
      "message": "Fix focused application handle.\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: Icd7b8c4c49ed73c41978f3ff076c2e5cd839a802\n"
    },
    {
      "commit": "a032cc008618b83ecbbede537517d1e7998e3264",
      "tree": "735a1f6f5fd7dc5607a0edb18a85abc831e5b7de",
      "parents": [
        "e9f66af90a886cc55fc20c14375d8572bdf6dbd3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 07 16:56:21 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 24 15:37:04 2011 -0700"
      },
      "message": "Add MotionEvent.HOVER_ENTER and HOVER_EXIT.\n\nThe input dispatcher sends a HOVER_ENTER to a window before dispatching\nit any HOVER_MOVE events.  For compatibility reasons, the window will\n*also* receive the HOVER_MOVE.  When the pointer moves into a different\nwindow or the pointer goes down or when events are canceled for some reason,\nthe input dispatcher sends a HOVER_EXIT to the previously hovered window.\n\nThe view hierarchy behavior is similar.  All views under the pointer\nreceive onHoverEvent with HOVER_ENTER followed by any number of HOVER_MOVE\nevents.  When the pointer leaves a view, the view receives HOVER_EXIT.\nSimilarly, if a parent view decides to capture hover by returning true\nfrom onHoverEvent, the hovered descendants will receive HOVER_EXIT.\n\nThe default behavior of onHoverEvent is to update the view\u0027s hovered\nstate by calling setHovered(true/false).  Views can query their current\nhovered state using isHovered().\n\nFor testing purposes, the hovered state is mapped to the pressed\ndrawable state.  This will change in a subsequent commit with the\nintroduction of a new hovered drawable state.\n\nChange-Id: Ib76a7a90236c8f2c7336e55773acade6346cacbe\n"
    },
    {
      "commit": "df66797771550d243500943e1b9a177667f77f7a",
      "tree": "43fa0b1cd8800901158635fa8bad2bd967900329",
      "parents": [
        "e3d0022be8363411f27dc493d45b966be6d31efe",
        "b7198743ab3976b30d4655c1e065ca33e372b6af"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 18 19:06:51 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 18 19:06:51 2011 -0700"
      },
      "message": "Merge \"Optimize EventHub to process events in big chunks.\""
    },
    {
      "commit": "b7198743ab3976b30d4655c1e065ca33e372b6af",
      "tree": "ec0181b1438fb1fe08ab31d4e3c4c8731e2b2ca8",
      "parents": [
        "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 18 18:14:26 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 18 19:04:09 2011 -0700"
      },
      "message": "Optimize EventHub to process events in big chunks.\n\nWhen 10 fingers are down, reduces the CPU time spent by the InputReader\nthread from ~30% to ~5% on Stingray.\n\nChange-Id: Icdf7c91cd5d9039ac3beb38ba9021a05e7fabc80\n"
    },
    {
      "commit": "6ed6f6d82d7b9f8d82f3ab3a9f718a0e59ffa476",
      "tree": "4376f402d02d4fea5371ccebb11d78e44171af2b",
      "parents": [
        "315f19be8ef26fee77db2455f8c2997680755f6d",
        "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "message": "Merge \"Refactor how timeouts are calculated.\""
    },
    {
      "commit": "2120617f2fb10035022d1a3e76836a278a0e6a18",
      "tree": "f5de58fa47f2b0f50133a9a5b8d16e83e5746e91",
      "parents": [
        "0f3340cf992f5a40a6011c15154d9c907bdf65ab",
        "14438b81a1fe4d7ebdf8977f3d80a1dd1867c5ad"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Mar 17 18:06:51 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 17 18:06:51 2011 -0700"
      },
      "message": "am 14438b81: am 970bad67: am be368de7: Merge \"Fix missing AOSP copyright headers for more files\" into honeycomb-mr1\n\n* commit \u002714438b81a1fe4d7ebdf8977f3d80a1dd1867c5ad\u0027:\n  Fix missing AOSP copyright headers for more files\n"
    },
    {
      "commit": "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c",
      "tree": "5f19b7bd1c42abf7e145637ed3459cf377fa94b9",
      "parents": [
        "843e29d3751017267b96565c543df0301c31a9f7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 17:29:09 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated.\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: Iec2045baaf4e67690b15eef3c09a58d5cac76897\n"
    },
    {
      "commit": "199d1c131d29b5356f71fbd7826a592c1dd8575f",
      "tree": "b02c7ab5a0662020447a3324c7a09c1d4294c5e0",
      "parents": [
        "2f1f2248c8439adbd686810e306c55f9e6a5abc3"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Mar 17 11:48:13 2011 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Thu Mar 17 14:43:12 2011 -0700"
      },
      "message": "Fix missing AOSP copyright headers for more files\n\no Update the copyright date on InputDispatcher_test.cpp and InputReader_test.cpp\n  because these two files were moved from other places to the current location,\n  and were actually created in 2010.\n\nbug - 4119349\n\nChange-Id: Ic93b81ddafb58e9e72a2e9e02ca3d9f173d6dca7\n"
    },
    {
      "commit": "8cb373ad858cdb19060cfa2fee43afca9c791ab4",
      "tree": "3c670036da5d0696cc00b986f110b2990c1e3290",
      "parents": [
        "48e122891afec8bfadaa9d7fdf731b8f711b5b91",
        "e5feed7e5ded92b8af4b5548144b6b8a45491a61"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:03:56 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 17 01:03:56 2011 -0700"
      },
      "message": "am e5feed7e: am 244eb34a: am d98f8aff: Merge \"Fix dangling pointer when device closed just after opening.\" into honeycomb-mr1\n\n* commit \u0027e5feed7e5ded92b8af4b5548144b6b8a45491a61\u0027:\n  Fix dangling pointer when device closed just after opening.\n"
    },
    {
      "commit": "8e9d4431d6a97a08d7dc9612c68ffd0812dfdc68",
      "tree": "37fbaf7f7503d8269dc8bedf7d3d153b8e475314",
      "parents": [
        "0837fde9fd9e29f8ef66a3fe00764e15a6f3d515"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Mar 12 19:46:59 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 00:36:35 2011 -0700"
      },
      "message": "Fix dangling pointer when device closed just after opening.\n\nBug: 4088239\nChange-Id: I210b918370357560a5ace8ea8dd7601255487e88\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"
    }
  ],
  "next": "9e8e40cb5f8aeb0702002eee60d1ce394bf699ee"
}
