)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "1f2451007c660091b7b090c1ea332f9044515d2d",
      "tree": "eddeaa59b0443b271353cd731e9ce7ce5b1cd993",
      "parents": [
        "47e6b1b5eef8ee99872f278f66bc498c4fcca0d8"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Nov 18 20:53:46 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 30 18:50:17 2010 -0800"
      },
      "message": "Ensure the ShortcutManager uses the correct key character map.\n\nThe ShortcutManager used to only receive the key code of the key event\nthat triggered the shortcut.  This change now provides the shortcut\nmanager with the whole key event so it can look up the associated\ncharacter using the correct key character map.\n\nTo make this more efficient, added a mechanism for recycling\nkey events.  At the moment it is only used by key events owned by the\nsystem process, since clients of the existing API (such as Views)\nmight continue to hold on to key events after dispatch has finished so\nthey would break if the key event were recycled by the framework.\n\nDeprecated KeyCharacterMap.BUILT_IN_KEYBOARD.\n\nChange-Id: I4313725dd63f2be01c350c005a41c7fde9bc67e8\n"
    },
    {
      "commit": "29fc2c9705e1bb8ae098fca016032d2325031587",
      "tree": "2b7e7ed7a40e3d31fa843094f31ecfb4fb257a19",
      "parents": [
        "93fbae34ce8b6a1907b6f1daf42f17e3f0025346"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Nov 24 10:26:50 2010 -0800"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Nov 24 10:26:50 2010 -0800"
      },
      "message": "Allow status bar panels to be on top of the status bar.\n\nChange-Id: I3c74ece5f7042e6302717f4263746d59d5447ec9\n"
    },
    {
      "commit": "46e75294d540fe807d78aec2582ae02cc38c7d42",
      "tree": "260678b7532242c8dd31e3aba47710e9516a3c12",
      "parents": [
        "1a22bdb01ac4068c2876fe2d02f3c4c729669a1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:53:45 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 12 14:53:43 2010 -0800"
      },
      "message": "Enable touch splitting for all windows by default.\n\nNew default only applies to applications with targetSdkVersion \u003e\u003d\nHONEYCOMB.  Old applications default to no touch splitting for\ntheir windows.\n\nIn addition, enabled split touch for various system windows.\n\nBug: 3049580\nChange-Id: Idc8da9baa2cd8e1e4e76af8967d7b6a5ccb94427\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": "88e7b31ba1447e98f65e4d2939dbf66268c75e35",
      "tree": "3a0a704cb26ccd2cc397506a54e637637b718107",
      "parents": [
        "a80d256d04146cfc0a56a0e08666c53728df596a",
        "df3cccf3dc6b59ec4a45d80fb483022360e13830"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 27 22:18:43 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 27 22:18:43 2010 -0700"
      },
      "message": "resolved conflicts for merge of df3cccf3 to master\n\nChange-Id: I425496a9fc4e9cbc50ad6938e9dccb14827d9558\n"
    },
    {
      "commit": "120a4594855951ed5eb185fdfc19bf98efef3ba2",
      "tree": "74fc123ad9fd79bc8d077dc019f5f669e4596e89",
      "parents": [
        "aa93bcd62482719c146a411008e1eac94135b6a4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 27 18:43:51 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 27 18:43:51 2010 -0700"
      },
      "message": "Drop all dispatcher state when dispatcher is disabled.\n\nThis patch makes the dispatcher drop all of its state when it is\ndisabled (when the screen turns off).  This ensures that the dispatcher\ndoes not get stuck thinking a pointer is still down if the screen\nturned off while the user was touching the display (such as a fat touch\nwhile hitting the power button).\n\nBug: 3098344\nChange-Id: If50ef5804870aa1acd3179fd4b40e3cda58dd39d\n"
    },
    {
      "commit": "b8b200d10847dd91bcff7a576e401d7d21fff696",
      "tree": "806a3243d1b13066c76910927fd5674104957812",
      "parents": [
        "9cb1898052c42a82dfd86b54f6328d8fcd29dd57",
        "f2c406030874b355ca9e4e67cc0e3aff6103c23e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 19 09:55:39 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 19 09:55:39 2010 -0700"
      },
      "message": "am f2c40603: am 7689dd49: Merge \"Fix bug where home presses were not poking user activity.\" into gingerbread\n\nMerge commit \u0027f2c406030874b355ca9e4e67cc0e3aff6103c23e\u0027\n\n* commit \u0027f2c406030874b355ca9e4e67cc0e3aff6103c23e\u0027:\n  Fix bug where home presses were not poking user activity.\n"
    },
    {
      "commit": "e2fe69edc009a0e0348e5351cf83062224e011ac",
      "tree": "beb5873a0c09f8b6f5569ff158cadec5d5c69895",
      "parents": [
        "45bd8303fe20f20843f5a76ddf42a5ace54add58"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 18 13:21:23 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 18 14:50:13 2010 -0700"
      },
      "message": "Fix bug where home presses were not poking user activity.\n\nWe now poke user activity twice: once upon dequeueing an event\nfor dispatch and then again just before we dispatch it.  The second\npoke is to compensate for the fact that it can take a few seconds to\nidentify the dispatch target (if the application is responding slowly)\nbut we want to keep the display from going to sleep for X amount of time\nafter the app gets a chance to actually receive the event.  This mirrors\npre-Gingerbread behavior.\n\nRemoved some unnecessary code that filters user activity pokes when sending\nevents to KeyGuard.  We don\u0027t need this because KeyGuard already tells the\npower manager to disable user activity.\n\nBug: 3101397\nChange-Id: I8c3a77601fdef8f584e84cfdd11aa79da0ff51db\n"
    },
    {
      "commit": "3b2b354ec1ba070eae13391d004d97a3e1403050",
      "tree": "e2647c9a8797a4b3542deab7d1cb766967b35879",
      "parents": [
        "1edb2bda37726ba6bc6feeafad25ea51b1cacaee"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 00:54:27 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 17:10:55 2010 -0700"
      },
      "message": "Add support for secure system overlays.\n\nManual merge from Gingerbread.\n\nThis change adds a new window type for secure system overlays\ncreated by the system itself from non-secure system overlays that\nmight be created by applications that have the system alert permission.\nSecure views ignore the presence of secure system overlays.\n\nBug: 3098519\nChange-Id: Id876736fd8bf332ff9a5428bde59f5268aa49c3a\n"
    },
    {
      "commit": "2d3f159aa9622e05a18e7f93cecd57ad673955ae",
      "tree": "8df18f80f44133f19ce9e669a36bdd785b31460a",
      "parents": [
        "c9f7890a203a013646650a695157277df81b6a17"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 00:54:27 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:03:35 2010 -0700"
      },
      "message": "Add support for secure system overlays.  (DO NOT MERGE)\n\nThis change adds a new window type for secure system overlays\ncreated by the system itself from non-secure system overlays that\nmight be created by applications that have the system alert permission.\nSecure views ignore the presence of secure system overlays.\n\nBug: 3098519\nChange-Id: I8f8398f4fdeb0469e5d71124c21bedf121bd8c07\n"
    },
    {
      "commit": "9c9f1a3ba1bc19754e4d38cb27a537d4dfedc0fe",
      "tree": "fc519d8f2f97dc3fa6007f16e07cc05b09849109",
      "parents": [
        "e20c9e0264190f94324197a8271cf03811a4ca58"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 18:32:20 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 18:32:20 2010 -0700"
      },
      "message": "Track input state when transferring touch focus.\n\nCopies the input state to the destination window and sends synthesic\ncancelation events to the source window.\n\nChange-Id: Ia75820b0d756ed5d6cd22dce7830251ac85141ed\n"
    },
    {
      "commit": "e20c9e0264190f94324197a8271cf03811a4ca58",
      "tree": "e482829d555d313e57ead50bc24102897dde9b36",
      "parents": [
        "182e5cf105aa71effbdee15628f020214b54774c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 14:20:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 17:54:12 2010 -0700"
      },
      "message": "Fix an event injection bug when the policy is bypassed.\n\nAdded the concept of a \"trusted\" event to distinguish between events from\nattached input devices or trusted injectors vs. other applications.\nThis change enables us to move certain policy decisions out of the\ndispatcher and into the policy itself where they can be handled more\nsystematically.\n\nCherry pick of b931a1b4 from gingerbread into master.\n\nChange-Id: I700a5f07b8b227878cea9437a289a45a245c0424\n"
    },
    {
      "commit": "dd8b0c90400a1c59d4d71d768c02eed961596bc8",
      "tree": "824f5086cdab46a9484c41dc87e921e2ff4212a6",
      "parents": [
        "5d3f6073bfc62811f552a16be7d58483104a29a3",
        "41aabeb51305d19747687f246080f44fc2a74435"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 17:42:30 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 11 17:42:30 2010 -0700"
      },
      "message": "am 41aabeb5: am 1e6a3a53: Merge \"Added more robust tracking and cancelation of events.\" into gingerbread\n\nMerge commit \u002741aabeb51305d19747687f246080f44fc2a74435\u0027\n\n* commit \u002741aabeb51305d19747687f246080f44fc2a74435\u0027:\n  Added more robust tracking and cancelation of events.\n"
    },
    {
      "commit": "b931a1b4183386ba840edc1bcc507eccf11b5cbe",
      "tree": "f9e1ba1030d392ab288ad13e5eaba32c65a96c76",
      "parents": [
        "b699726018a0049665d8ad6b90dbc5af0e18f135"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 14:20:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 16:26:13 2010 -0700"
      },
      "message": "Fix an event injection bug when the policy is bypassed.\n\nAdded the concept of a \"trusted\" event to distinguish between events from\nattached input devices or trusted injectors vs. other applications.\nThis change enables us to move certain policy decisions out of the\ndispatcher and into the policy itself where they can be handled more\nsystematically.\n\nChange-Id: I4d56fdcdd31aaa675d452088af39a70c4e039970\n"
    },
    {
      "commit": "b699726018a0049665d8ad6b90dbc5af0e18f135",
      "tree": "e711b4de7efbb4473306a208befe0e834d90c39b",
      "parents": [
        "db56b9bd39e739474684987b83f386f50596aa5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 08 22:31:17 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 10 14:45:51 2010 -0700"
      },
      "message": "Added more robust tracking and cancelation of events.\n\nThis change fixes several issues where events would be dropped in the\ninput dispatch pipeline in such a way that the dispatcher could not\naccurately track the state of the input device.\n\nGiven more robust tracking, we can now also provide robust cancelation\nof input events in cases where an application might otherwise become\nout of sync with the event stream due to ANR, app switch, policy decisions,\nor forced focus transitions.\n\nPruned some of the input dispatcher log output.\n\nMoved the responsibility for calling intercept*BeforeQueueing into\nthe input dispatcher instead of the input reader and added support for\nearly interception of injected events for events coming from trusted\nsources.  This enables behaviors like injection of media keys while\nthe screen is off, haptic feedback of injected virtual keys, so injected\nevents become more \"first class\" in a way.\n\nChange-Id: Iec6ff1dd21e5f3c7feb80ea4feb5382bd090dbd9\n"
    },
    {
      "commit": "928b5bfa7db23cddc93624a6ff31ff208e8b24bf",
      "tree": "4d6dd5b5b085c4cf6000b4c0d51b6d53f11b5e06",
      "parents": [
        "13297fddcbac3247d78f4c7e6408fa6dd8011d9f",
        "56364bcd0d1a1b064db3e83fdb64f948ce5c2ad7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 07 12:20:45 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 07 12:20:45 2010 -0700"
      },
      "message": "am 56364bcd: am 78d15acf: Merge \"Make secure views tolerate IME overlays.\" into gingerbread\n\nMerge commit \u002756364bcd0d1a1b064db3e83fdb64f948ce5c2ad7\u0027\n\n* commit \u002756364bcd0d1a1b064db3e83fdb64f948ce5c2ad7\u0027:\n  Make secure views tolerate IME overlays.\n"
    },
    {
      "commit": "19dfc83c376d8f5ff3b128ee4c675790cffbc02d",
      "tree": "06b41715a604ca7dc09cc852c28a8cd2354a0fee",
      "parents": [
        "95037fb1a633f5bdeb4e0ece2d18a4974259c368"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 05 12:26:23 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 05 12:26:23 2010 -0700"
      },
      "message": "Make secure views tolerate IME overlays.\n\nChange-Id: I3cf09b9d91045f4d9c558b4aace482a7b0bbd3d8\n"
    },
    {
      "commit": "e65041225ec0bbc3d67a3b70cdc6d598a5760043",
      "tree": "8eb92db22f21de0a2843aa39b9988d15e00233d9",
      "parents": [
        "464fb74e28b6d76d5e741abcdbb714eea2d9b4d1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 14:52:15 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 16:10:17 2010 -0700"
      },
      "message": "Add support for transferring touch focus.\n\nPrerequisite for drag and drop.\n\nChange-Id: Iedbe93ed0f3e1c4083130fe66b4ba06d416afce0\n"
    },
    {
      "commit": "01ce2e9eee41cc0c24b0d16465710a28ea337d5d",
      "tree": "08e45a8ec47e63760655a1770dac367258511538",
      "parents": [
        "37cedce14bc0e68e8bf27c2cecb181728226e6ed"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 26 22:20:12 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 26 22:20:12 2010 -0700"
      },
      "message": "Add suuport for splitting touch events across windows.\n\nThis feature is currently used to enable dragging the start and end\nselection handles of a TextView at the same time.  Could be used for\nother things later.\n\nDeleted some dead code in ArrowKeyMovementMethod and CursorControllers.\n\nChange-Id: I930accd97ca1ca1917aab8a807db2c950fc7b409\n"
    },
    {
      "commit": "54a1825121d006d4a4dcbbadf4eac9910f44ef8c",
      "tree": "70410aee79ef0d318b89aefb5737f0e8c097558b",
      "parents": [
        "24326f7223275ba9c85014b86d42040e3a7d2815"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 14:07:33 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 16:41:46 2010 -0700"
      },
      "message": "Fix app switch latency optimization.\n\nThis optimization was broken due to recent changes in how ANRs are handled.\n\nChange-Id: Ic99248a12755fadac8d4893e7d305b773e038d3d\n"
    },
    {
      "commit": "519e024d1e682ca458cc2dab743589a12992c0e1",
      "tree": "1dfdac05031e352b7404a07f347b0444c70bc95b",
      "parents": [
        "3fd5fa4ca9dbdd5be46ec2952c7038cdd59e35d5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 15 15:18:56 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 15 18:52:08 2010 -0700"
      },
      "message": "Make input dispatcher only ANR for foreground windows.\n\nRedesigned the input dispatcher\u0027s ANR timeout mechanism so it is much\ncloser to Froyo\u0027s policy.  ANR is only ever signalled if the dispatcher\nis waiting on a window to finish processing its previous event(s) and\nthere is new pending input.\n\nIn the old code, we tracked the dispatch timeout separately for each\ninput channel.  This was somewhat complicated and also resulted in the\nsituation where applications could ANR long after the user had pushed\nthem into the background.\n\nChange-Id: I666ecada0952d4b95f1d67b9f733842b745c7f4b\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": "b88102f5b7e51552a3576cf197b4c8cf96f193d1",
      "tree": "c714dce33893a048f42a36e78b25dc0bc971b1c3",
      "parents": [
        "11fe181e16501103d7c0f70344661ea2ef5d3df9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 11:49:43 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 16:52:03 2010 -0700"
      },
      "message": "Input dispatcher ANR handling enhancements.\n\nThis change is essentially a rewrite of the main input dispatcher loop\nwith the target identification folded in.  Since the input dispatcher now\nhas all of the window state, it can make better decisions about\nwhen to ANR.\n\nAdded a .5 second deadline for processing app switch keys.  This behavior\npredates Gingerbread but had not previously been ported.\n\nFixed some timing inaccuracies in the ANR accounting that could cause\napplications to ANR sooner than they should have.\n\nAdded a mechanism for tracking key and motion events that have been\ndispatched to a window so that appropriate cancelation events can be\nsynthesized when recovering from ANR.  This change helps to keep\napplications in sync so they don\u0027t end up with stuck buttons upon\nrecovery from ANRs.\n\nAdded more comments to describe the tricky parts of PollLoop.\n\nChange-Id: I13dffca27acb436fc383980db536abc4d8b9e6f1\n"
    },
    {
      "commit": "b21fb104cc95fe7e5daf3b3626241e525c39a3f1",
      "tree": "5223ab6cdc459955d35add9af46210c8c6249a48",
      "parents": [
        "de2f3340d64e20e51029ff438f0d635d97b8a3e0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 07 10:44:57 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 12:28:43 2010 -0700"
      },
      "message": "Fix key repeat delay.\n\nChange-Id: I6216e082324ee29bf50e37acc673350ca5417c4d\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": "ae9fc03bdccda709101291bbcd3beaa5b6daebfc",
      "tree": "69367f760a943f9eda3edabcb1130302ea6cb0d8",
      "parents": [
        "6b2c56a299eb05deef2b887549e29e9e9f0f2cf6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 18 15:51:08 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 18 16:58:27 2010 -0700"
      },
      "message": "Add support for throttling motion events.\n\nChange-Id: I24b3a17753e91ecda60a60fe5cd2e6b3260e033d\n"
    },
    {
      "commit": "2cbecea4c9627d95377fc3e3b8a319116cee7feb",
      "tree": "da379443f3e609953e9e1aa1f8d8325ad42d2a68",
      "parents": [
        "90291577a08f582e0978651f55dd950f40eb111d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 17 15:59:26 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 17 17:03:42 2010 -0700"
      },
      "message": "Fix possible race conditions during channel unregistration.\n\nPreviously, the input dispatcher assumed that the input channel\u0027s\nreceive pipe file descriptor was a sufficiently unique identifier for\nlooking up input channels in its various tables.  However, it can happen\nthat an input channel is disposed and then a new input channel is\nimmediately created that reuses the same file descriptor.  Ordinarily\nthis is not a problem, however there is a small opportunity for a race\nto arise in InputQueue.\n\nWhen InputQueue receives an input event from the dispatcher, it\ngenerates a finishedToken that encodes the channel\u0027s receive pipe fd,\nand a sequence number.  The finishedToken is used by the ViewRoot\nas a handle for the event so that it can tell the InputQueue when\nthe event has finished being processed.\n\nHere is the race:\n\n1. InputQueue receives an input event, assigns a new finishedToken.\n2. ViewRoot begins processing the input event.\n3. During processing, ViewRoot unregisters the InputChannel.\n4. A new InputChannel is created and is registered with the Input Queue.\n   This InputChannel happens to have the same receive pipe fd as\n   the one previously registered.\n5. ViewRoot tells the InputQueue that it has finished processing the\n   input event, passing along the original finishedToken.\n6. InputQueue throws an exception because the finishedToken\u0027s receive\n   pipe fd is registered but the sequence number is incorrect so it\n   assumes that the client has called finish spuriously.\n\nThe fix is to include a unique connection id within the finishedToken so\nthat the InputQueue can accurately confirm that the token belongs to\nthe currently registered InputChannel rather than to an old one that\nhappened to have the same receive pipe fd.  When it notices this, it\nignores the spurious finish.\n\nI\u0027ve also made a couple of other small changes to avoid similar races\nelsewhere.\n\nThis patch set also includes a fix to synthesize a finished signal\nwhen the input channel is unregistered on the client side to\nhelp keep the server and client in sync.\n\nBug: 2834068\nChange-Id: I1de34a36249ab74c359c2c67a57e333543400f7b\n"
    },
    {
      "commit": "6ec402b5ae33c8927694d8522b4cc6a5c8ba974e",
      "tree": "5d4b19eda9ade71d7e34635479426f1dd484e8c2",
      "parents": [
        "6dea6f4e71b53e421564d783c227cbe0a2469183"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 28 15:48:59 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 29 12:54:27 2010 -0700"
      },
      "message": "DO NOT MERGE: Fix input event injection ANRs on UI thread.\n\nAdded a new asynchronous injection mode and made the existing\nsynchronization mechanism more robust.\n\nChange-Id: Ia4aa04fd9b75ea2461a844c5b7933c831c1027e6\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": "349703effce5acc53ed96f7ed8556131f0c65e18",
      "tree": "359217d5076e3005c724b2117a59ffec81e7a83b",
      "parents": [
        "f2b544f5ae7676f7ab4cdf3379b2ed3c60a65def"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 22 01:27:15 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 28 19:10:54 2010 -0700"
      },
      "message": "Native input event dispatching.\n\nTarget identification is now fully native.\nFixed a couple of minor issues related to input injection.\nNative input enabled by default, can be disabled by setting\nWindowManagerPolicy.ENABLE_NATIVE_INPUT_DISPATCH to false.\n\nChange-Id: I7edf66ed3e987cc9306ad4743ac57a116af452ff\n"
    },
    {
      "commit": "7fbdc84e87dd3a0e196b9803bb04495d11e9cb8a",
      "tree": "32691f639ef71365b602795db215f11f457397a5",
      "parents": [
        "e47e3f3855a062ba0338a57eeda2f12a0f7a1fa8"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 20:52:56 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 21 13:59:34 2010 -0700"
      },
      "message": "More native input event dispatching.\n\nAdded ANRs handling.\nAdded event injection.\nFixed a NPE ActivityManagerServer writing ANRs to the drop box.\nFixed HOME key interception.\nFixed trackball reporting.\nFixed pointer rotation in landscape mode.\n\nChange-Id: I50340f559f22899ab924e220a78119ffc79469b7\n"
    },
    {
      "commit": "9c3cda04d969912bc46184f2b326d1db95e0aba5",
      "tree": "cdeb4a4bfa83aa335ab840969fe214058a0d566e",
      "parents": [
        "60e8c33d6f6caad2e963e91abca16a85cd3be82a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 15 01:31:58 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 15 16:43:18 2010 -0700"
      },
      "message": "More work in progress on native events.\n\nRefactored the code to eliminate potential deadlocks due to re-entrant\ncalls from the policy into the dispatcher.  Also added some plumbing\nthat will be used to notify the framework about ANRs.\n\nChange-Id: Iba7a10de0cb3c56cd7520d6ce716db52fdcc94ff\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"
    }
  ]
}
