)]}'
{
  "log": [
    {
      "commit": "7174a491bc1f89da65eaef3be25f3ea3f3e3bab5",
      "tree": "2171b655c03b965e92a68889ff5bdfea6da10757",
      "parents": [
        "85bd0d62830a098c1bdc720dfdcf4fe1b18b657c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 14 17:00:27 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 14 18:31:53 2012 -0700"
      },
      "message": "Improve touch event resampling.\n\nFixed a few bugs related to the id-to-index mapping for\npointer coordinates.\n\nTightened the bounds on the resampling time interval to\navoid predicting too far into the future.\n\nOnly lerp X and Y components of motion events.\n\nAlter the future to satisfy past predictions.  (Rewrite touch\nevents to conceal obvious discontinuities.)\n\nAdded a system property to control whether resampling is enabled\nfor debugging purposes.\n\nBug: 6375101\nChange-Id: I35972d63278bc4e78148053a4125ad9abeebfedb\n"
    },
    {
      "commit": "771526c88f5cc4b56a41cb12aa06a28d377a07d5",
      "tree": "71c36f271192ee66f069f0d1130a73e91b8302b9",
      "parents": [
        "330314c6fb7c178c0f0da65d6aa8c9e7d3004568"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:13:25 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 15:58:42 2012 -0700"
      },
      "message": "Resample touch events on frame boundaries.\n\nBug: 6375101\nChange-Id: I8774e366306bb2b6b4e42b913525bf25b0380ec3\n"
    },
    {
      "commit": "2b6c32ca4177f1a97307f9cbd81ca485df28762c",
      "tree": "abc217f8ff191ce1ecc7c4eb9b51185b6d47625d",
      "parents": [
        "b2679481b57d87945df02983f95ff8e6c9ba5928"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 13 15:00:09 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 13 15:00:09 2012 -0700"
      },
      "message": "Fix spurious ANRs in native activities.\n\nSome native activities experienced ANRs when the input consumer\ndeferred an input event due to client-side batching.  If the\ninput channel was fully emptied then the client had no way of\nknowing that it should wake up to handle the deferred input event.\n\nThis patch also fixes some lock issues in the native activity\ninput queue implementation.  In at least one error case, it\nwas possible for a function to exit without releasing the lock.\n\nBug: 6051176\nChange-Id: I4d9d843237e69b9834f8d8b360031b677fcab8c3\n"
    },
    {
      "commit": "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": "2d34e0cfe7e2586b75a6f2c6646dd2e1e52c973f",
      "tree": "fbec10b21b79e9055f2deef4fbbb3ca4294c0334",
      "parents": [
        "90fde93c473aca5a33dc41c989bb2fdc5f2b1485"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 13:18:09 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 13:59:32 2012 -0800"
      },
      "message": "Accurately track the sequence numbers of batched events.\n\nInstead of sending finished signals immediately when appending to\na batch, record the chain of sequence numbers that were part of\nthe batch and then send finished signals all at once when done.\nThis change helps the dispatcher keep track of the true state\nof the application and can improve ANR detection slightly.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\nChange-Id: I463c2221e2aa8fdf1c3d670c18e39e59ab69b0db\n"
    },
    {
      "commit": "90fde93c473aca5a33dc41c989bb2fdc5f2b1485",
      "tree": "8011cef8b049d51018daa6b386491c427c400229",
      "parents": [
        "072ec96a4900d4616574733646ee46311cb5d2cb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 12:44:01 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Feb 13 12:44:01 2012 -0800"
      },
      "message": "Enable deferred input messages to be batched.\n\nThis is part of a series of changes to improve input system pipelining.\n\nBug: 5963420\nChange-Id: I6874d2128e880a35c6c33890c858cc6ee22af0fd\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": "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": "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": "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": "3915bb845b032dc184dba5e60970b803390ca3ed",
      "tree": "198a47c1d4ada990ef04d563b5e0caaec35abc18",
      "parents": [
        "60029771d26ca3c51288c3d92cab1d3537147acd"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 05 15:02:16 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 08 12:49:43 2010 -0800"
      },
      "message": "Tell system server whether the app handled input events.\n\nRefactored ViewRoot, NativeActivity and related classes to tell the\ndispatcher whether an input event was actually handled by the application.\n\nThis will be used to move more of the global default key processing\ninto the system server instead of the application.\n\nChange-Id: If06b98b6f45c543e5ac5b1eae2b3baf9371fba28\n"
    },
    {
      "commit": "4fe6c3e51be77e35f40872cdbca6c80f8f8b7ecb",
      "tree": "5cbcfad147ad1bf26deb384e41d27f4e6bfcdb80",
      "parents": [
        "c891d2b3529b9cf24ef4781a585cd4784815e711"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 13 23:17:30 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 14 01:59:45 2010 -0700"
      },
      "message": "Replace epoll() with poll() and rename PollLoop to Looper.\n\nAs part of this change, consolidated and cleaned up the Looper API so\nthat there are fewer distinctions between the NDK and non-NDK declarations\n(no need for two callback types, etc.).\n\nRemoved the dependence on specific constants from sys/poll.h such as\nPOLLIN.  Instead looper.h defines events like LOOPER_EVENT_INPUT for\nthe events that it supports.  That should help make any future\nunder-the-hood implementation changes easier.\n\nFixed a couple of compiler warnings along the way.\n\nChange-Id: I449a7ec780bf061bdd325452f823673e2b39b6ae\n"
    },
    {
      "commit": "85a3176704b5bfbeece9bd928369fbb76eec7dc6",
      "tree": "1a84f21c037b514c5b6717b106f5a9a2c4fd6c99",
      "parents": [
        "c0b4f6d30d962d75125628317b5f5ea622531dfe"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 01 17:01:00 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 11:50:55 2010 -0700"
      },
      "message": "Add support for secure views.\n\nAdded the MotionEvent.FLAG_WINDOW_IS_OBSCURED flag which is set by the\ninput manager whenever another visible window is partly or wholly obscured\nthe target of a touch event so that applications can filter touches\naccordingly.\n\nAdded a \"filterTouchesWhenObscured\" attribute to View which can be used to\nenable filtering of touches when the view\u0027s window is obscured.\n\nChange-Id: I936d9c85013fd2d77fb296a600528d30a29027d2\n"
    },
    {
      "commit": "c5ed5910c9ef066cec6a13bbb404ec57b1e92637",
      "tree": "b06dfdac2d807dae78a2634007b6e627eefd0804",
      "parents": [
        "d9452ecd0ce6c8e0518055929ba1fd0712146405"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 14 18:48:53 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 15 18:32:33 2010 -0700"
      },
      "message": "Add support for new input sources.\n\nAdded several new coordinate values to MotionEvents to capture\ntouch major/minor area, tool major/minor area and orientation.\n\nRenamed NDK input constants per convention.\n\nAdded InputDevice class in Java which will eventually provide\nuseful information about available input devices.\n\nAdded APIs for manufacturing new MotionEvent objects with multiple\npointers and all necessary coordinate data.\n\nFixed a bug in the input dispatcher where it could get stuck with\na pointer down forever.\n\nFixed a bug in the WindowManager where the input window list could\nend up containing stale removed windows.\n\nFixed a bug in the WindowManager where the input channel was being\nremoved only after the final animation transition had taken place\nwhich caused spurious WINDOW DIED log messages to be printed.\n\nChange-Id: Ie55084da319b20aad29b28a0499b8dd98bb5da68\n"
    },
    {
      "commit": "d76b67c340d1564abf8d14d976fdaf83bf2b3320",
      "tree": "59c0fff396681a622480a84f4f9c74d188970a11",
      "parents": [
        "fd03582995e0fce963dd0fa0669e3211b74c0dd7"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 13 17:48:30 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 13 18:36:46 2010 -0700"
      },
      "message": "IME events are now dispatched to native applications.\n\nAnd also:\n\n- APIs to show and hide the IME, and control its interaction with the app.\n- APIs to tell the app when its window resizes and needs to be redrawn.\n- API to tell the app the content rectangle of its window (to layout\n  around the IME or status bar).\n\nThere is still a problem with IME interaction -- we need a way for the\napp to deliver events to the IME before it handles them, so that for\nexample the back key will close the IME instead of finishing the app.\n\nChange-Id: I37b75fc2ec533750ef36ca3aedd2f0cc0b5813cd\n"
    },
    {
      "commit": "682674154e3fe88f6061245145f934f25f1a2eb8",
      "tree": "a105ce9f0ae4d88732bfc8fb1a52d4474f17bc86",
      "parents": [
        "8ecfb60a8e74dfcd51bbf3f236d5f414a4d5ac7d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jul 02 18:52:01 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jul 02 18:57:02 2010 -0700"
      },
      "message": "Add new native Looper API.\n\nThis allows us to avoid exposing the file descriptor of\nthe event queue; instead, you attach an event queue to\na looper.  This will also should allow native apps to be\nwritten without the need for a separate thread, by attaching\nthe event queue to the main thread\u0027s looper and scheduling\ntheir own messages there.\n\nChange-Id: I38489282635895ae2cbfacb88599c1b1cad9b239\n"
    },
    {
      "commit": "3c80a4a044865bdf1289c7896baffa1c082d835c",
      "tree": "557c89a685e672e44f90f55660da1f989d00a113",
      "parents": [
        "92dbad8ab0c8e242c4c3e52c339ed3296ae7901c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 29 19:20:40 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 10:49:40 2010 -0700"
      },
      "message": "Implement default key handling for native code.\n\nThe native code now maintains a list of all keys that may use\ndefault handling.  If the app finishes one of these keys\nwithout handling it, the key will be passed back off to Java\nfor default treatment.\n\nChange-Id: I6a842a0d728eeafa4de7142fae573f8c11099e18\n"
    },
    {
      "commit": "2e9f93e8db509d5236229dc8540e0904c5dbb9f5",
      "tree": "9aa6aa2c4a59b808dd99604afb23eb5a0096d9a2",
      "parents": [
        "059f009d970fb37ac4e408dcf8e1d2d2cdcf0a84"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 28 15:27:30 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 29 10:43:54 2010 -0700"
      },
      "message": "Update native activity \u0026 event APIs to follow correct conventions.\n\nChange-Id: Ie64fb3a9c68bc9c117fa5621b75d1f609e304e0e\n"
    },
    {
      "commit": "a95e4cb62f3642cb190d032dbf7dc40d9ecc6973",
      "tree": "ae4437444a3d3ebeff48dabfd1e9c11fc14620ac",
      "parents": [
        "ef730e6ececa96a3e0576140eea707f7c48cd66c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 18 18:09:33 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 22 11:21:50 2010 -0700"
      },
      "message": "First stab at attaching native event dispatching.\n\nProvides the basic infrastructure for a\nNativeActivity\u0027s native code to get an object representing\nits event stream that can be used to read input events.\n\nStill work to do, probably some API changes, and reasonable\ndefault key handling (so that for example back will still\nwork).\n\nChange-Id: I6db891bc35dc9683181d7708eaed552b955a077e\n"
    },
    {
      "commit": "5c225b1680e696ae8bbf505a1997d6f720672f74",
      "tree": "932326fd02ee91d8a64adfcc9415027646c56563",
      "parents": [
        "3a0146cd29fae3c5bc29d8d535d67826284f8cc9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 16 01:53:36 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 13:27:16 2010 -0700"
      },
      "message": "Even more native input dispatch work in progress.\n\nAdded more tests.\nFixed a regression in Vector.\nFixed bugs in pointer tracking.\nFixed a starvation issue in PollLoop when setting or removing callbacks.\nFixed a couple of policy nits.\n\nModified the internal representation of MotionEvent to be more\nefficient and more consistent.\n\nAdded code to skip/cancel virtual key processing when there are multiple\npointers down.  This helps to better disambiguate virtual key presses\nfrom stray touches (such as cheek presses).\n\nChange-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c\n"
    },
    {
      "commit": "46b9ac0ae2162309774a7478cd9d4e578747bfc2",
      "tree": "46ad021a41e25ca9f1250b709a29b724dc6b504d",
      "parents": [
        "f62c57d684b83df7d2817db976c0afdb500ae92a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 22 18:58:52 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 17:42:16 2010 -0700"
      },
      "message": "Native input dispatch rewrite work in progress.\n\nThe old dispatch mechanism has been left in place and continues to\nbe used by default for now.  To enable native input dispatch,\nedit the ENABLE_NATIVE_DISPATCH constant in WindowManagerPolicy.\n\nIncludes part of the new input event NDK API.  Some details TBD.\n\nTo wire up input dispatch, as the ViewRoot adds a window to the\nwindow session it receives an InputChannel object as an output\nargument.  The InputChannel encapsulates the file descriptors for a\nshared memory region and two pipe end-points.  The ViewRoot then\nprovides the InputChannel to the InputQueue.  Behind the\nscenes, InputQueue simply attaches handlers to the native PollLoop object\nthat underlies the MessageQueue.  This way MessageQueue doesn\u0027t need\nto know anything about input dispatch per-se, it just exposes (in native\ncode) a PollLoop that other components can use to monitor file descriptor\nstate changes.\n\nThere can be zero or more targets for any given input event.  Each\ninput target is specified by its input channel and some parameters\nincluding flags, an X/Y coordinate offset, and the dispatch timeout.\nAn input target can request either synchronous dispatch (for foreground apps)\nor asynchronous dispatch (fire-and-forget for wallpapers and \"outside\"\ntargets).  Currently, finding the appropriate input targets for an event\nrequires a call back into the WindowManagerServer from native code.\nIn the future this will be refactored to avoid most of these callbacks\nexcept as required to handle pending focus transitions.\n\nEnd-to-end event dispatch mostly works!\n\nTo do: event injection, rate limiting, ANRs, testing, optimization, etc.\n\nChange-Id: I8c36b2b9e0a2d27392040ecda0f51b636456de25\n"
    }
  ]
}
