)]}'
{
  "log": [
    {
      "commit": "75ebb37fafcaea7692d46b5abdbcd1465d88eea2",
      "tree": "6fe86077a69e6d16bd61d4fde8560c96a18a7f6a",
      "parents": [
        "765ddb4bf42634cc729017503833c3b077e4f29c"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Mar 15 16:27:29 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Mar 21 20:45:03 2013 -0700"
      },
      "message": "Add APP_SWITCH to app switch input dispatching optimization\n\nChange-Id: I8a95fbf311ebd62bcdaaeecfacaea7996ddaec74\n"
    },
    {
      "commit": "074b8b7cf19d128f16e0de12bc2fc58e7438ec37",
      "tree": "f772ea5caeadb85c46980cba75d4ef1cc8bac816",
      "parents": [
        "c8dc8eb3275a6d05e27824f322796e97e5e50e2f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 31 19:01:31 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 31 19:01:31 2012 -0700"
      },
      "message": "Eliminate potential reentrance from unregisterInputChannel.\n\nEnsure that all callbacks into the window manager policy occur\non the input dispatcher thread in the right place.  This fixes\na potential deadlock that may occur if the window manager\nunregisters an input channel while holding its own lock.\n\nThe change is simply to defer running asynchronous commands\n(usually callbacks into the policy) until the next iteration\nof the dispatch looper thread.\n\nBug: 7382388\nChange-Id: I90095580d717fcddb2209ef332df56400f837a34\n"
    },
    {
      "commit": "1e3b98d47df596d0c4eadbdf60143709f8465b28",
      "tree": "ed63fa39f6d2db3b3a3fd9caf61174129198c6cc",
      "parents": [
        "1f7a09b5df9f859781d9cfa0053fad44c72c2168"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 30 18:58:59 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 01 14:27:34 2012 -0700"
      },
      "message": "New internal API to eliminate poke locks.\n\nAdded a new WindowManager.LayoutParams inputFeatures flag\nto disable automatic user activity behavior when an input\nevent is sent to a window.\n\nAdded a new WindowManager.LayoutParams field userActivityTimeout.\n\nBug: 7165399\nChange-Id: I204eafa37ef26aacc2c52a1ba1ecce1eebb0e0d9\n"
    },
    {
      "commit": "bcc046af4ef171aa3aa3c6b64efb5cafc1e46cd3",
      "tree": "497724ac54d4a380b5f466ea48a3a96265446754",
      "parents": [
        "580ee8b0c6e1aea1e2e1d60499b603b9168b44f0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 27 20:46:43 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 27 21:42:57 2012 -0700"
      },
      "message": "Bundle correlated switch changes atomically.\n\nThis is a prerequisite for headset jack detection on Manta.\n\nBug: 6548391\nChange-Id: I549a194344511c0cee578b00f6a9ab5fdbdfb99c\n"
    },
    {
      "commit": "83d616a9c7b9505153d258511eb5c16b552e268d",
      "tree": "4df9620550008dc0e3e0daf21f442b9fe6cc8051",
      "parents": [
        "7a8cce3d8a6fb781d840ddf60324a301f5a3f2d9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 09 20:33:43 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 10 15:48:47 2012 -0700"
      },
      "message": "Make input system aware of multiple displays.\n\nThe input system needs to know about the window that has\nfocus, even if it is on a secondary display.  So now we\nsend it the list of all windows and indicate which display\nthey are on.  We filter the list of windows as necessary\nwhen delivering touch events.\n\nTo keep things simple, monitor input channels and input\nfilters are not supported except on the main display.\nWe also do not pass the display id to applications; it is\nonly used inside the input system for now.\n\nProperly scale touch coordinates based on the viewport.\nThis will be needed to ensure that touch works on external\ndisplay as well as when the internal display is being used\nto simulate a different resolution.\n\nChange-Id: I1815579a52fcc852c519b5391fc7ab8767c2dc59\n"
    },
    {
      "commit": "b696de5c10ebcc7bf42d8487fc0e56e0e937754d",
      "tree": "3339fd190bad6be36c5e2ba8f57ebc11a5bb972b",
      "parents": [
        "155fc70252fd9ccee1f05da4e6966a99ec86d499"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 27 15:38:50 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 27 18:14:56 2012 -0700"
      },
      "message": "Move and rename user activity event type constants.\n\nChange-Id: Ie565808796773b6896e71ddfac6aaaf8031de846\n"
    },
    {
      "commit": "22aa51202652efbd55094217a046b8e5ecb7afe2",
      "tree": "19e5d1d7b7349c7255d46499bfa7d2593dd3f6b7",
      "parents": [
        "c4637d3efbbeb3e204691da96c357b5fea4ae2f1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 17 12:01:06 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 17 15:51:30 2012 -0700"
      },
      "message": "Capture input dispatcher\u0027s last ANR state in bug report.\n\nSome ANR bugs are very difficult to localize because by the time\nthe bug report has been captured, the relevant information is\ngone.  Work around this by capturing a log of the input dispatcher\u0027s\nstate at the exact time of the ANR before anything has changed\nand include this information in the bug report.\n\nAlso fixed a nit related to some format strings that had\nimproper field widths specified.\n\nBug: 6680398\nChange-Id: I5323bf18ec5e47a767cd053209753cc46852bf4c\n"
    },
    {
      "commit": "265f1ccc5128319d81eee70ee2d2ae81573efb11",
      "tree": "eb9ccd9eca60ccf645c22651e40850fecc1b5ed7",
      "parents": [
        "68cefd201809372a547257a273b805cabbd0da68"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 11 18:01:06 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 11 18:05:31 2012 -0700"
      },
      "message": "Improve ANR diagnostics.\n\nWhen an ANR occurs, log the associated reason.\n\nWhen an event takes too long to process (currently more than 2 seconds)\nlog basic information about the event including how long it actually\ntook.\n\nDump the contents of the inbound, outbound and wait queues as part\nof dumpsys input.\n\nBug: 6574842\nChange-Id: I9ab754c320f609cb86fe266c469a61e7032dfed6\n"
    },
    {
      "commit": "8249fc61837db488191213ac85355287cf8b4fdd",
      "tree": "e9b5f09ae2fac930313bb1878c818f7d6a4343ab",
      "parents": [
        "53d003f0e77291e7382c4871e0828014b470ab9f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu May 24 18:57:32 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu May 24 19:34:39 2012 -0700"
      },
      "message": "Don\u0027t ANR on hover, scroll or if a window goes away.\n\nPrevents ANR on hover or scroll events.\n\nPrevents ANR in the case where one finger touches a window which\nis subsequently removed then a second finger comes along and tries\nto touch something.\n\nChange-Id: I985ccb70cd86659992328f14f8a705f3f05ea2e5\n"
    },
    {
      "commit": "fd23e3ed976b22b9a92ddb2cb3a46f9d2a0ce23f",
      "tree": "b3d9f4d12fe2d93ba9979e6d66b1d9f4de016178",
      "parents": [
        "af67fc65bf113b028ff33e71cd6a45810018c273"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 13:34:28 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 13:34:28 2012 -0700"
      },
      "message": "Fix bugs in fallback key handling.\n\nIf a fallback key is generated using a key plus a modifier,\nthen it\u0027s possible we might get a different fallback key\ngenerated if the modifier has changed.  PhoneWindowManager\nneeds to remember which fallback is last generated for a\ngiven key code so that it can apply the same fallback action.\n\nWhen generating cancellation events, it\u0027s important to have\npreserved the policyFlags of the original event.  Otherwise\nwe may not dispatch the cancellation properly.  For example,\nsome actions are not performed if the POLICY_FLAG_TRUSTED\nis not specified.\n\nRemember the metaState associated with a key event so we can\ninclude it when canceled.\n\nTell the policy when a fallback is being cancelled so that it\ncan clean up its state.\n\nAfter a SEARCH shortcut is invoked, clear the flag indicating\nthat a shortcut is pending.  This is to prevent SEARCH from\ngetting stuck down in the case where we might forget to send\nthe up.  (Shouldn\u0027t happen anymore after the prior fixes.)\n\nBug: 5616255\nChange-Id: I68f0a9679c7af464eaf31c099f2aa50b53fecf1f\n"
    },
    {
      "commit": "c042ee2acd8529b95c5dc99240d626e61d2500cd",
      "tree": "4af0331cce7c05242025c6c02506a5addd2c3ee9",
      "parents": [
        "a7771df3696954f0e279407e8894a916a7cb26cc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 08 13:03:42 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue May 08 13:58:32 2012 -0700"
      },
      "message": "Disable input dispatch until boot finished.\n\nBug: 6263070\nChange-Id: I25e15e3d8af8eb3343c7b684fec345337d9f6aab\n"
    },
    {
      "commit": "f44e39493c471b5e6a0807778c7a6439ea1b8adc",
      "tree": "d07153558b48cf8ec07d752a0e527bf5679056e2",
      "parents": [
        "80a76276dc9440ffad30dc4c820eb7d65f4df368"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 20 11:33:27 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 20 11:33:27 2012 -0700"
      },
      "message": "When ANR happens, only remove ANR\u0027d window.\n\nThe system bar uses input event injection to inject BACK keys\ninto the application.  If the receiving application ANRs, we\nused to clear the touch state unconditionally.  Doing so would\nprevent the system bar from receiving the ACTION_UP event so\nthe back button would continue to appear pressed until pressed\nagain.\n\nNow we are more careful to only remove the specific ANR\u0027d\nwindow from the touch state.  Other windows should continue\nto receive touch events as usual.\n\nChange-Id: If86bfc323e2c7aed82ca1334bc67da649953168f\n"
    },
    {
      "commit": "481c1570dc5cdf58265b53f657801709dd05d1df",
      "tree": "7e70a03aeab58afe04a0ce0365255f735bf184bf",
      "parents": [
        "43ea54bdc343a913f62885304796e4ab1bca4ef1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 09 14:41:15 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 09 15:43:50 2012 -0800"
      },
      "message": "Add Java wrappers for new atrace functionality.\n\nInstrument a few parts of the input dispatcher and the\nview hierarchy.\n\nChange-Id: I49285c9fb3502253baa1ffed60f521b8c24fccaf\n"
    },
    {
      "commit": "b93a03f841d93498bfea6cc92a22faa34bce1337",
      "tree": "b5c2e1c097ad9dc4a3580ee661223794e0560f60",
      "parents": [
        "e97df97b6cb5e4bff8f9da9ecff7cddb7d04ff41"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 15:34:57 2012 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 17 15:36:10 2012 -0800"
      },
      "message": "frameworks/base refactoring.\n\nFirst step. Move libui includes to their new home: androidfw.\n\nChange-Id: Ic042b52fdba72f30edc3cc6339bf30b4c1b99662\n"
    },
    {
      "commit": "91e328984c0d1e0f95b3d37f779d9d4fa9bfe8f8",
      "tree": "d34bec78b0c35e3d35110564f39c3a05050d41f5",
      "parents": [
        "58aedbc9bea13415e2d42cf7c9fe8a7efd243e66"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 14 15:56:29 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 14 15:57:59 2012 -0800"
      },
      "message": "Clean up InputChannel file descriptor data type.\n\nFile descriptors are ints.\n\nChange-Id: Ie36733bf36ddfeaa9a09ef6ebd7bd2f1788f5d27\n"
    },
    {
      "commit": "0952c30ac279d5f4cdc032fcbafa372213aa6d86",
      "tree": "f180a4e1d2c3cf301817c3db75008a201fd4b4e5",
      "parents": [
        "2d34e0cfe7e2586b75a6f2c6646dd2e1e52c973f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 13:48:59 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 14:04:24 2012 -0800"
      },
      "message": "Don\u0027t serialize motion events.\n\nOn reflection, only key events need to be serialized.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\nChange-Id: I028b4eac97497d012036cb60ffbac4cb22d3966c\n"
    },
    {
      "commit": "072ec96a4900d4616574733646ee46311cb5d2cb",
      "tree": "9172f3e3295f9d4ff3517a47dec360c2f0a99948",
      "parents": [
        "1adee11b5e644c74a2ed40344f4836de3bd3ac56"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 07 14:46:57 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:41 2012 -0800"
      },
      "message": "Implement batching of input events on the consumer side.\n\nTo support this feature, the input dispatcher now allows input\nevents to be acknowledged out-of-order.  As a result, the\nconsumer can choose to defer handling an input event from one\ndevice (because it is building a big batch) while continuing\nto handle input events from other devices.\n\nThe InputEventReceiver now sends a notification when a batch\nis pending.  The ViewRoot handles this notification by scheduling\na draw on the next sync.  When the draw happens, the InputEventReceiver\nis instructed to consume all pending batched input events, the\ninput event queue is fully processed (as much as possible),\nand then the ViewRoot performs traversals as usual.\n\nWith these changes in place, the input dispatch latency is\nconsistently less than one frame as long as the application itself\nisn\u0027t stalled.  Input events are delivered to the application\nas soon as possible and are handled as soon as possible.  In practice,\nit is no longer possible for an application to build up a huge\nbacklog of touch events.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I42c01117eca78f12d66d49a736c1c122346ccd1d\n"
    },
    {
      "commit": "1adee11b5e644c74a2ed40344f4836de3bd3ac56",
      "tree": "634e5fd7ce6f3e7508cfdf5ba9d752bd4e83d90e",
      "parents": [
        "d1c48a0525d05021036d4b14e937e221c0ae1318"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 07 10:25:41 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:41 2012 -0800"
      },
      "message": "Optimize dispatcher for back-to-back finished signals.\n\nMinor tweak to the dispatcher to handle as many finished signals\nin a receive callback as possible instead of going back to\nthe Looper and waiting for the next poll() to hit the callback\nagain.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I8471107371693e21ce8ce7cca1e8d79ba4ca2351\n"
    },
    {
      "commit": "d1c48a0525d05021036d4b14e937e221c0ae1318",
      "tree": "8026832e22d65f633657216488cc89cd54629025",
      "parents": [
        "8b4be56030c3b8c93dfa45bccac7365f90f377ce"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 19:12:47 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:41 2012 -0800"
      },
      "message": "Dispatch multiple touch events in parallel.\n\nThis change enables the input dispatcher to send multiple touch\nevents to an application without waiting for them to be acknowledged.\nEssentially this is a variation on the old streaming optimization\nbut it is much more comprehensive.  Event dispatch will stall as\nsoon as 0.5sec of unacknowledged events are accumulated or a\nfocused event (such as a key event) needs to be delivered.\n\nStreaming input events makes a tremendous difference in application\nperformance.  The next step will be to enable batching of input\nevents on the client side once again.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\nChange-Id: I025df90c06165d719fcca7f63eed322a5cce4a78\n"
    },
    {
      "commit": "8b4be56030c3b8c93dfa45bccac7365f90f377ce",
      "tree": "18388eb8a60024a2b566e27fb62d39f3f3e69037",
      "parents": [
        "28b5cf1c33df847d667b8974ba07c4157a49b48a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 16:31:05 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:41 2012 -0800"
      },
      "message": "Delete premature optimization.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I5c182f6e17d468bf3033125b2094b2baa5b94e81\n"
    },
    {
      "commit": "28b5cf1c33df847d667b8974ba07c4157a49b48a",
      "tree": "ca82ec2d78a7a5ebb5b80eeebcc6929db0dd761a",
      "parents": [
        "59f1ff99786e9d4a94270d6752aa3ca61e10f0a6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 16:26:21 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:40 2012 -0800"
      },
      "message": "Delete dead code.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I9f8b93f6a25ddd872f993366b57bab404c93bede\n"
    },
    {
      "commit": "59f1ff99786e9d4a94270d6752aa3ca61e10f0a6",
      "tree": "03a2d9385256ec3f7a392b984131092f282bca48",
      "parents": [
        "9831d90db8fba7e967d22b1f86eea1d6ac831541"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 16:23:50 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:40 2012 -0800"
      },
      "message": "Delete latency tracking information in the Connection.\n\nThe information gathered here will no longer be valid once we\nstart dispatching multiple events at a time to the same connection.\nMoreover, we are more concerned with end-to-end latency, which we\ncan measure with sufficiently high accuracy in other ways.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I49a0c9876b64af56b40e96e0d98c45f325da2a73\n"
    },
    {
      "commit": "9831d90db8fba7e967d22b1f86eea1d6ac831541",
      "tree": "16b990120c420482eb60fcacae153cf009ae2cec",
      "parents": [
        "e9bb9be9e46523ed901e38cfa83f4630f6496418"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 15:55:26 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:40 2012 -0800"
      },
      "message": "Remove active connection tracking.\n\nThe dispatcher no longer needs to track which connections are\nactive except perhaps for diagnostic purposes, so we might as well\nremove this code.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: Ibadc830b7b792a59b9244d0a6e85f320c4947109\n"
    },
    {
      "commit": "e9bb9be9e46523ed901e38cfa83f4630f6496418",
      "tree": "697a4870df9e540ecb13575f54d8f3e478c26761",
      "parents": [
        "cbee6d6ede0499fb4a2c00bfc00d5db8d9ed5139"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 06 15:47:55 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:40 2012 -0800"
      },
      "message": "Simplify input target handling in the dispatcher.\n\nSince we no longer stream events to the application, we don\u0027t need to\nkeep the current list of input targets around longer than it takes\nto begin the dispatch cycle.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I5824b04e564c8a4dec991598292441e46c331905\n"
    },
    {
      "commit": "cbee6d6ede0499fb4a2c00bfc00d5db8d9ed5139",
      "tree": "2ccbec05bbcd99c514673407ca21fb58fc7dd687",
      "parents": [
        "3241b6b7bd7eff64f0118ba2d636030e505a98f9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Feb 03 20:11:27 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:40 2012 -0800"
      },
      "message": "Rewrite input transport using sockets.\n\nSince we will not longer be modifying events in place, we don\u0027t need\nto use an ashmem region for input.  Simplified the code to instead\nuse a socket of type SOCK_SEQPACKET.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: I05909075ed8b61b93900913e44c6db84857340d8\n"
    },
    {
      "commit": "3241b6b7bd7eff64f0118ba2d636030e505a98f9",
      "tree": "9116e5f5ee32645312d8cfc16c12491ec0a28876",
      "parents": [
        "d4762334f103055b3aa59d97d027ace7c5950b6e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Feb 03 15:08:02 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 10:28:39 2012 -0800"
      },
      "message": "Remove batching and streaming from the input dispatcher.\n\nDon\u0027t worry, these features will be moving to a different part of\nthe pipeline.  We\u0027re just getting them out of the way for now so\nwe can make deeper changes to how the input dispatcher works.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\n\nChange-Id: If97de923c8165776882eef23f5204cc448dad0fc\n"
    },
    {
      "commit": "308028049a75b36d5ed525c0bcef441da850c2a5",
      "tree": "fd5f6c8563d10381ad192934d26818f9494e7325",
      "parents": [
        "28587f445a2af6d94d1b215e019e8bcc377c17a1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Feb 03 13:35:13 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 07 18:38:11 2012 -0800"
      },
      "message": "Remove the input dispatcher throttle.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\nChange-Id: Iab33594bc5df8aa05232ef64c64e98fc61c5bf52\n"
    },
    {
      "commit": "112b5f52c5a4b6743eeb7b26a8896c7636c74455",
      "tree": "b9e6ce9e78630475cea99044392dbb3c183626c4",
      "parents": [
        "75ea64fc54f328d37b115cfb1ded1e45c30380ed"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:32:06 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:33:42 2012 -0800"
      },
      "message": "Improve watchdog monitor for InputReader and InputDispatcher.\n\nTry harder to test for liveness.  There are situations where\nthe lock might not be held but the input system is stuck in\na callback into the window manager policy that has hung.\n\nBug: 5094994\nChange-Id: Iff88655512a5dc8bbb4615be65f4115e975c020b\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "ace13b17866dc9136aeecf6dfaf7077f37434469",
      "tree": "0ec5d01ef83b4d5148525f5befa28ca026b294c7",
      "parents": [
        "fd10d5cf56e5b1ba7692400e4fe4ae26b61f3285"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 14:12:03 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer.\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I5ada57e7f2bdb9b0a791843eb354a8c706b365dc\n"
    },
    {
      "commit": "efd3266b719eed5f1b217021c0a9e76e4b274b06",
      "tree": "f76032f2a0bdfdc9910860063455116a9c792687",
      "parents": [
        "9e8e40cb5f8aeb0702002eee60d1ce394bf699ee"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 08 15:13:06 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 18:30:28 2011 -0800"
      },
      "message": "Input improvements and bug fixes.\n\nAssociate each motion axis with the source from which it comes.\nIt is possible for multiple sources of the same device to define\nthe same axis.  This fixes new API that was introduced in MR1.\n(Bug: 4066146)\n\nFixed a bug that might cause a segfault when using a trackball.\n\nOnly fade out the mouse pointer when touching the touch screen,\nignore other touch pads.\n\nChanged the plural \"sources\" to \"source\" in several places in\nthe InputReader where we intend to refer to a particular source\nrather than to a combination of sources.\n\nImproved the batching code to support batching events from different\nsources of the same device in parallel.  (Bug: 3391564)\n\nChange-Id: I0189e18e464338f126f7bf94370b928e1b1695f2\n"
    },
    {
      "commit": "924c4d47774fa7d8a5ce659d12291ef7df82ee05",
      "tree": "0e28a65ce51d22439116d8c56b091d1ae232998a",
      "parents": [
        "696e66e44b89ca812137a31a1eab09bb8e84aa95"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 07 16:40:47 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 02:46:45 2011 -0800"
      },
      "message": "Support POLICY_FLAG_ALT et. al.  (DO NOT MERGE)\n\nChange-Id: Ida3b8300764623662052f80095973186cb9d4616\n"
    },
    {
      "commit": "f634ded277f246bd9568e9b7dcad40790767c6ab",
      "tree": "dbcebd2019a56b2d301e4264bdf02032d94408f1",
      "parents": [
        "6e71c954faff34b78a2952436b4f48d84a8c20cd"
      ],
      "author": {
        "name": "makarand.karvekar",
        "email": "makarand.karvekar@motorola.com",
        "time": "Wed Mar 02 15:41:03 2011 -0600"
      },
      "committer": {
        "name": "Rebecca Schultz Zavin",
        "email": "rebecca@android.com",
        "time": "Thu Mar 03 17:01:43 2011 -0800"
      },
      "message": "Set last event time to previous event batch delivery time to apps\n\nDetermination of the last event time. Currently, uses\nthe time that the first event in the previous batch that\nwas sent from hardware. This produces inconsistent timing\nintervals for event delivery to apps. Now, use the time that the\nprevious batch was delivered to the application.\n\nOriginal Author: Stephen Moore \u003csteve.moore@motorola.com\u003e\nSigned-off-by: makarand.karvekar \u003cmakarand.karvekar@motorola.com\u003e\n\nChange-Id: I2a3701915702d622dc04fbf4bbd4918a9ebe8856\n"
    },
    {
      "commit": "e2e012683d6f35f5eedfd0c39167ea78e32e2650",
      "tree": "9dc51c3b108de52fd7bc374ae79fa88e930282eb",
      "parents": [
        "55acdf7dcd0cf5b9aacfe48808e98056c7d60e5b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 20:34:30 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 20:34:30 2011 -0800"
      },
      "message": "Only set KeyEvent long press flag when repeat count equals 1.\n\nThis fixes a Gingerbread regression.\n\nBug: 3507021\nChange-Id: I8c2acb35be718fea7e996175c1407e84315d17ef\n"
    },
    {
      "commit": "56194ebec6212e229f4ccdaa4b187166d20013ef",
      "tree": "51276000061ba703b6ddda32ecce3ce10a06f4f5",
      "parents": [
        "05dc66ada6b61a6bdf806ffaa62617ac5394695d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 19:23:13 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 19:57:07 2011 -0800"
      },
      "message": "Wake screen from external HID peripherals.\n\nAdded some plumbing to enable the policy to intercept motion\nevents when the screen is off to handle wakeup if needed.\n\nAdded a basic concept of an external device to limit the scope\nof the wakeup policy to external devices only.  The wakeup policy\nfor internal devices should be based on explicit rules such as\npolicy flags in key layout files.\n\nMoved isTouchEvent to native.\n\nEnsure the dispatcher sends the right event type to userActivity\nfor non-touch pointer events like HOVER_MOVE and SCROLL.\n\nBug: 3193114\nChange-Id: I15dbd48a16810dfaf226ff7ad117d46908ca4f86\n"
    },
    {
      "commit": "33bbfd2232ea9eaae9a9d87a05a95a430f09bd83",
      "tree": "88e8e2513676dccf07b9764522a681aae370f020",
      "parents": [
        "d752c3b3e6c576ed1f18e86a7b18c33dc7c65791"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 24 20:55:35 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Feb 25 17:06:07 2011 -0800"
      },
      "message": "Add support for mouse hover and scroll wheel.\n\nDispatch ACTION_HOVER_MOVE and ACTION_SCROLL through the View\nhierarchy as onGenericTouchEvent.  Pointer events dispatched\nthis way are delivered to the view under the pointer.  Non-pointer\nevents continue to be delivered to the focused view.\n\nAdded scroll wheel support to AbsListView, ScrollView,\nHorizontalScrollView and WebView.  Shift+VSCROLL is translated\nto HSCROLL as appropriate.\n\nAdded logging of new pointer events in PointerLocationView.\n\nFixed a problem in EventHub when a USB device is removed that\nresulted in a long stream of ENODEV errors being logged until INotify\nnoticed the device was gone.\n\nNote that the new events are not supported by wallpapers at this time\nbecause the wallpaper engine only delivers touch events.\n\nMake all mouse buttons behave identically.  (Effectively we only\nsupport one button.)\n\nChange-Id: I9ab445ffb63c813fcb07db6693987b02475f3756\n"
    },
    {
      "commit": "bfaf3b91709ef35e0d5901b186edd7c2a9729161",
      "tree": "9ecdcc0702b8314ba836508d39a5c754b9537a28",
      "parents": [
        "cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 22 15:00:50 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 22 15:00:50 2011 -0800"
      },
      "message": "Be more precise about tracking fallback keys.\n\nOnly initiate fallback key handling if the first key down was\nnot handled and there is no other fallback key already in progress.\nThis prevents spurious fallbacks from being generated when\napplications handle the initial down but not repeated downs or the up.\n\nChange-Id: I8a513896cf96b16dc502cd72291926d5532aa2ab\n"
    },
    {
      "commit": "cc0c159e9b3dd4e0f48da0ce3e33d2c68a651413",
      "tree": "7a4e3c578e3e0f2c01fef4d64e721d81c851748e",
      "parents": [
        "6f2fba428ca5e77a26d991ad728e346cc47609ee"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Feb 19 05:07:28 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Feb 19 06:14:21 2011 -0800"
      },
      "message": "Add new hover move action and scroll wheel plumbing.\n\nAdded support for tracking the mouse position even when the mouse button\nis not pressed.  To avoid confusing existing applications, mouse movements\nare reported using the new ACTION_HOVER_MOVE action when the mouse button\nis not pressed.\n\nAdded some more plumbing for the scroll wheel axes.  The values are\nreported to Views but they are not yet handled by the framework.\n\nChange-Id: I1706be850d25cf34e5adf880bbed5cc3265cf4b1\n"
    },
    {
      "commit": "ebbd5d14ad3b1e762d9fcfa026e19413cc857e05",
      "tree": "7f449489b302fddd176f6ab9f85c8e38024fed90",
      "parents": [
        "3b93d3fc1e56eada95246f9ee102c563d22df6d0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 17 13:01:34 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 17 13:01:34 2011 -0800"
      },
      "message": "Fix a regression with MotionEvent parceling.\n\nAlso added some more unit tests.\n\nChange-Id: I413654294d1a998eec056884e6df5eaa50f3daf4\n"
    },
    {
      "commit": "91c69ab01539f7ba28708f41ec1835cc2920d0a0",
      "tree": "04f5dc37a0fa3f18a18ba08916efe0c33a1de300",
      "parents": [
        "c3451d4a4479b6244bd6d1dadf289a8d44bdcca2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 14 17:03:18 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 15 19:14:37 2011 -0800"
      },
      "message": "Add support for arbitrary axes in MotionEvents.\n\nThis change makes it possible to extend the set of axes that\nare reported in MotionEvents by defining new axis constants.\n\nThe MotionEvent object is now backed by its C++ counterpart\nto avoid having to maintain multiple representations of the\nsame data.\n\nChange-Id: Ibe93c90d4b390d43c176cce48d558d20869ee608\n"
    },
    {
      "commit": "58a2da843f2f22f406df8df1f011738eb8b7fcb1",
      "tree": "716c12630d5d9fe98e29e197287dc950eaa4a01c",
      "parents": [
        "30bc34f191ca8a009af313fc751e5b4bff6e39a1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 25 16:02:22 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 25 16:02:22 2011 -0800"
      },
      "message": "Fix crashes caused by some input devices.\n\nThe touch screen sometimes reports more than 10 pointers even though that\u0027s\nall we asked for.  When this happens, we start dropping events with more\nthan 10 pointers.  This confuses applications and causes them to crash.\nRaised the limit to 16 pointers.\nBug: 3331247\n\nThe default behavior was to identify all touch devices as touch screens.\nExternal devices that are plugged in are more likely to be touch pads\nnot attached to a screen.  Changed the default to be a touch pad\nand renamed some internal constants to avoid confusion.\n\nA certain mouse happens to also behave like a touch pad.  That caused\nproblems because we would see multiple concurrent traces of motion events\ncoming from the same input device so we would batch them up.\nAdded code to ensure that we don\u0027t batch events unless they come from\nthe same *source* in addition to coming from the same *device*.\n\nDue to batching or misbehaving drivers, it\u0027s possible for the set of\npointer ids to be different from what we expect when it comes time to\nsplit motion events across windows.  As a result, we can generate motion\nevents with 0 pointers.  When we try to deliver those events, we cause\nan error in the InputTransport so we tear down the InputChannel and kill\nthe application.\nAdded code to check out assumption about pointer ids and drop the\nevent gracefully instead.\n\nPatched up the tests to take into account the change in default behavior\nfor identifying touch screens and touch pads.\n\nChange-Id: Ic364bd4cb4cc6335d4a1213a26d6bdadc7e33505\n"
    },
    {
      "commit": "fbf097732137a32930d151f7ba6816a5b870c32a",
      "tree": "1f05823ea1cb06aaa3ab0954cdde614b370f30e6",
      "parents": [
        "115ad16551c9cf9551f44cbea59f3edf83e4a340"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jan 16 14:06:57 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jan 16 18:58:49 2011 -0800"
      },
      "message": "Support non-rectangular input regions.\n\nThis enables the system bar to carve out a region through which\nevents will be sent to the IME behind it.\n\nBug: 3238092\nChange-Id: I69b855a8d9b5b3ee525266c0861826e53e5b5028\n"
    },
    {
      "commit": "928e054931d357326613c78e62f4d850b7c442ff",
      "tree": "28367a3b3d9b11f31a97c9016ab64e22f05c4c47",
      "parents": [
        "b3fbd7e0fd44a72fb7ccba0959481b8a806608b7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 10 11:17:36 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 10 17:23:05 2011 -0800"
      },
      "message": "Prevent events from getting backlogged.\n\nThis change implements two heuristics.\n\n1. When events are older than 10 seconds, they are dropped.\n\n2. If the application is currently busy processing an event and\n   the user touches a window belonging to a different application\n   then we drop the currently queued events so the other application\n   can start processing the gesture immediately.\n\nNote that the system takes care of synthesizing cancelation events\nautomatically for any events that it drops.\n\nAdded some new handle types to allow the native dispatcher to\nindirectly refer to the WindowManager\u0027s window state and app window\ntoken.  This was done to enable the dispatcher to identify the\napplication to which each window belongs but it also eliminates\nsome lookup tables and linear searches through the window list\non each key press.\n\nBug: 3224911\nChange-Id: I9dae8dfe23d195d76865f97011fe2f1d351e2940\n"
    },
    {
      "commit": "95712850665492af670824abdba77f0944d984d1",
      "tree": "0a25154afa5a90fc0798f256e548fa2fde781d5d",
      "parents": [
        "c91d8c3ea5d2a3a065f7d5074817689713ea6dda"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 04 19:41:59 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 04 19:41:59 2011 -0800"
      },
      "message": "Only allow touch events from one device at a time.\n\nReject movements from other devices when one device is already down.\nThis fixes jittery behavior when the user moves the mouse and touches\nthe screen at the same time.\n\nChange-Id: I99151c8f2596a3139720f776bcbc559d4b314878\n"
    },
    {
      "commit": "b4ff35df5c04aec71fce7e90a6d6f9ef7180c2ad",
      "tree": "e4473f1b22e3051a8f82239256148820d4e097d5",
      "parents": [
        "a5af5d6b122b5d7337e6640deabf7886689679eb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jan 02 16:37:43 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 04 17:31:24 2011 -0800"
      },
      "message": "Mouse pointer integration.\n\nAdded support for loading the pointer icon from a resource.\n\nMoved the system server related bits of the input manager out\nof libui and into libinput since they do not need to be linked into\napplications.\n\nChange-Id: Iec11e0725b3add2b905c51f8ea2c3b4b0d1a2d67\n"
    },
    {
      "commit": "83c09685f2e62bc3cf7e71bc61d903f4b9ccaeb4",
      "tree": "c8bc2824e0d2e2b353b3d16ecf5836ab8fd9e67c",
      "parents": [
        "dd830c21149c336139b28560c0e6fba9f3d0e0fc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 23 17:50:18 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Dec 29 13:19:53 2010 -0800"
      },
      "message": "Add initial support for cursor-based pointing devices.\n\nSome parts stubbed out but you can plug in a mouse and move\na green cursor around to interact with the UI.\n\nChange-Id: I80d597a7f11d3bd92041890f74b3c77326975e6e\n"
    },
    {
      "commit": "00045a7e6fbed88f3325d2bbb048dc96a082078c",
      "tree": "8ed9e639f96aacbd798716895a1a70fbdd9afda2",
      "parents": [
        "957d85ec046651a8b0549b62021079ddcc0b8f53"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 09 18:10:30 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 09 18:14:23 2010 -0800"
      },
      "message": "Fix race condition in fallback key processing.\n\nNeed to ensure that the channel is still valid before proceeding.\n\nBug: 3271482\nChange-Id: Ia6863cbedd9b53cbc5c9c8815e9ea90bef3d2218\n"
    },
    {
      "commit": "49ed71db425c5054e3ad9526496a7e116c89556b",
      "tree": "3d3b28bdaf76d5cc531fd3b52fcbb0efb32a05ba",
      "parents": [
        "f30c8287525ac049d4d7589a330be5713256046b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Dec 06 17:13:33 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Dec 07 17:35:26 2010 -0800"
      },
      "message": "Add support for fallback keycodes.\n\nThis change enables the framework to synthesize key events to implement\ndefault behavior when an application does not handle a key.\nFor example, this change enables numeric keypad keys to perform\ntheir associated special function when numlock is off.\n\nThe application is informed that it is processing a fallback keypress\nso it can choose to ignore it.\n\nAdded a new keycode for switching applications.\n\nAdded ALT key deadkeys.\n\nNew default key mappings:\n- ESC -\u003e BACK\n- Meta+ESC -\u003e HOME\n- Alt+ESC -\u003e MENU\n- Meta+Space -\u003e SEARCH\n- Meta+Tab -\u003e APP_SWITCH\n\nFixed some comments.\nFixed some tests.\n\nChange-Id: Id7f3b6645f3a350275e624547822f72652f3defe\n"
    },
    {
      "commit": "9065504a63d6bf37bf621191fda1d1fe4da76ee3",
      "tree": "500948db3ef54c52fc65f52f4ab4a220e4504009",
      "parents": [
        "d6a46103bfbed17451abf0fb608d7b778597846c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 16:01:32 2010 -0800"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    }
  ],
  "next": "1f2451007c660091b7b090c1ea332f9044515d2d"
}
