)]}'
{
  "log": [
    {
      "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": "1a542c7b8ed0be049869a12d1e01e2604d052ac2",
      "tree": "ed1b5acbe31240e259689a6496ed1cf2dfa5dd1b",
      "parents": [
        "3915bb845b032dc184dba5e60970b803390ca3ed"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Nov 08 09:48:20 2010 -0800"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Nov 08 13:02:58 2010 -0800"
      },
      "message": "The CHEEK_TOUCH stuff never worked.  Remove it.\n\nBug: 3104906\nChange-Id: Ia37236ba1775fc3ec8c111e2e0b85b105e0dea6a\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": "e46a0a4693405eb8bbaa069c4e234a6976b48244",
      "tree": "71dc7c1f44719b3587ce87b06fdd970464c753af",
      "parents": [
        "5ffcd088cef3fdf3cebb674e47cd1aa739fde630"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 02 17:58:22 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 02 17:58:22 2010 -0700"
      },
      "message": "Fix a key repeating bug.\n\nThis change fixes a bug in the dispatcher where the window manager\npolicy would incorrectly receive a key repeat count of 0 in the case\nwhere the key repeat was generated by the hardware or driver.\nLong-press on HOME was broken as a result.\n\nBug: 3159581\nChange-Id: If0f02662313f5b879a4e566fbb461389e274a550\n"
    },
    {
      "commit": "c4b5bf3c7668d3875362bb86af05b3e47937e2ee",
      "tree": "e94ae0a25ef5e413edd3e34c00829d2b618c70c0",
      "parents": [
        "a32edd4b4c894f4fb3d9fd7e9d5b80321df79e20",
        "7ab5d2d951792c9b1a1e7cfb279280c2d076506f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Nov 02 02:34:15 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Nov 02 02:34:15 2010 -0700"
      },
      "message": "am 7ab5d2d9: am a87ea46c: Fix bugs related to cheek event suppression.\n\n* commit \u00277ab5d2d951792c9b1a1e7cfb279280c2d076506f\u0027:\n  Fix bugs related to cheek event suppression.\n"
    },
    {
      "commit": "a87ea46cb023763e0a9b0222da20b0a354f79d8d",
      "tree": "af391e4d3190d4023b6e5757a504346798151fc3",
      "parents": [
        "5dda76a72e8bb4630fb5fd38a42e7bceb5b9c954"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 01 20:35:46 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 01 20:51:58 2010 -0700"
      },
      "message": "Fix bugs related to cheek event suppression.\n\nTwo issues:\n\n1. First, due to an inverted conditional in the input dispatcher, we were\n   reporting touches as long touches and vice-versa to the power manager.\n\n2. Power manager user activity cheek event suppression also suppresses touch\n   events (but not long touch or up events).  As a result, if cheek event\n   suppression was enabled, touches would not poke the user activity timer.\n   However due to the above logic inversion, this actually affected long\n   touches.  Net result, if cheek suppression was enabled in the power manager\n   and you held your thumb on the screen long enough, the phone would\n   go to sleep!\n\nCheek event suppression is commonly turned on when making a phone call.\nInterestingly, it does not seem to get turned off afterward...\n\nThis change fixes the logic inversion and exempts touches from the cheek\nsuppression.  The reason we do the latter is because the old behavior\nwas actually harmful in other ways too: a touch down would be suppressed\nbut not a long touch or the touch up.  This would cause bizarre behavior\nif you touched the screen while it was dimmed.  Instead of brightening\nimmediately, it would brighten either when you lifted your finger or\n300ms later, whichever came first.\n\nBug: 3154895\nChange-Id: Ied9ccec6718fbe86506322ff47a4e3eb58f81834\n"
    },
    {
      "commit": "4d396052deb54399cbadbeb8abd873df6f3af342",
      "tree": "632cf9922df2abe3b23738792a100a9297517db0",
      "parents": [
        "487d9586635e6b209f9a5ed4063f005590d10e85"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 29 21:50:21 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 01 15:00:25 2010 -0700"
      },
      "message": "Fix policy issues when screen is off.\n\nRewrote interceptKeyBeforeQueueing to make the handling more systematic.\nBehavior should be identical except:\n- We never pass keys to applications when the screen is off and the keyguard\n  is not showing (the proximity sensor turned off the screen).\n  Previously we passed all non-wake keys through in this case which\n  caused a bug on Crespo where the screen would come back on if a soft key\n  was held at the time of power off because the resulting key up event\n  would sneak in just before the keyguard was shown.  It would then be\n  passed through to the dispatcher which would poke user activity and\n  wake up the screen.\n- We propagate the key flags when broadcasting media keys which\n  ensures that recipients can tell when the key is canceled.\n- We ignore endcall or power if canceled (shouldn\u0027t happen anyways).\n\nChanged the input dispatcher to not poke user activity for canceled\nevents since they are synthetic and should not wake the device.\n\nChanged the lock screen so that it does not poke the wake lock when the\ngrab handle is released.  This fixes a bug where the screen would come\nback on immediately if the power went off while the user was holding\none of the grab handles because the sliding tab would receive an up\nevent after screen turned off and release the grab handles.\n\nFixed a couple of issues where media keys were being handled inconsistently\nor not at all, particularly in the case of the new PAUSE, PLAY\nand RECORD keys.\n\nBug: 3144874\nChange-Id: Ie630f5fb6f128cfdf94845f9428067045f42892c\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": "76860e3fe73a791b1b04f33d78b908eb3163b4b2",
      "tree": "cea00ab372ea81c9d65ceb45b3beb33228f17796",
      "parents": [
        "6dc0c73fb05bcac570a134242789512977201648"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 25 17:37:46 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 25 17:37:46 2010 -0700"
      },
      "message": "Tweak log messages a bit.\n\nChange-Id: Ifadf78c1ab8db49106216c70086f98860795c65f\n"
    },
    {
      "commit": "3ae4ac8538765d6cf5b8aceea8c81b21854321bd",
      "tree": "d0e8ae9e1117ce1aeebf375a2807de5ed95c0655",
      "parents": [
        "4761b176ed241a88394968b983f06c5ae1aad26a",
        "2ef36763700eff5679d6012e7f078c57f1a4c465"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Oct 24 14:36:23 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Oct 24 14:36:23 2010 -0700"
      },
      "message": "am 2ef36763: am 860c2df4: Merge \"Add unit tests for native input and fix bugs identified.\" into gingerbread\n\nMerge commit \u00272ef36763700eff5679d6012e7f078c57f1a4c465\u0027\n\n* commit \u00272ef36763700eff5679d6012e7f078c57f1a4c465\u0027:\n  Add unit tests for native input and fix bugs identified.\n"
    },
    {
      "commit": "c3db858de9fa152480b9cf53c8c0cb793a280722",
      "tree": "ba337dd2df79d211a940727c5c93c112cf0de77d",
      "parents": [
        "b6a2256e5461160a89d077b761d3253d95ce869f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 20 15:33:38 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Oct 23 03:52:57 2010 -0700"
      },
      "message": "Add unit tests for native input and fix bugs identified.\n\nFixed a bug where we would lose the first touch point when swiping out of\nthe virtual key area.\n\nFixed a bug where we would not send an ACTION_MOVE event in cases where\nindividual pointers went down/up and the remaining pointers actually moved.\nThis is important since many applications do not handle pointer movements\nduring ACTION_POINTER_DOWN or ACTION_POINTER_UP.  In the case of\nACTION_POINTER_UP the movement was completely lost since all pointers were\ndispatched using their old location rather than the new location.\n\nImproved motion event validation to check for duplicate pointer ids.\n\nAdded an input source constant that was missing from the NDK api but\ndefined in the framework api.\n\nAdded a timestamp when reporting added/removed devices in EventHub.\n\nBug: 3070082\nChange-Id: I3206a030f43b7616e2f48006e5a9d522c4d92e56\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": "195226a3c83be8f3b2cfaeab3e5db0b9165ef414",
      "tree": "1d3a8583b2d27976bc88dec4d888fddf642c5f17",
      "parents": [
        "d21de4b921a8969b0558cffade0a39fe14ba8a54",
        "9e0e054388689fd618c84a283c28ee484477b44d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 18 10:31:43 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 18 10:31:43 2010 -0700"
      },
      "message": "am 9e0e0543: am 36e65ffd: Merge \"Fix a native crash in input dispatcher when windows are removed.\" into gingerbread\n\nMerge commit \u00279e0e054388689fd618c84a283c28ee484477b44d\u0027\n\n* commit \u00279e0e054388689fd618c84a283c28ee484477b44d\u0027:\n  Fix a native crash in input dispatcher when windows are removed.\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": "af48cae6e59f579c20c3ecd08623214896e7923e",
      "tree": "c9835705bcef57639a6b6d3838b8bbce0606f202",
      "parents": [
        "2d3f159aa9622e05a18e7f93cecd57ad673955ae"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:20:51 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:20:51 2010 -0700"
      },
      "message": "Fix a native crash in input dispatcher when windows are removed.\n\nBug: 3101826\nChange-Id: I040838600a6105c8d9f3235025dc0a7b5b27da2e\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": "cd4af421ca6b102cabd2cf1ff63488e086c32c44",
      "tree": "65c60516db0a95bb1eb6ae4d0b751c36cbc676e4",
      "parents": [
        "bad553ba34dbf9b6764c9c6b72f0082f011b577c",
        "4b255a23041225103a6870e77a236f78c2816eda"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 13 17:02:48 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 13 17:02:48 2010 -0700"
      },
      "message": "am 4b255a23: am 03aa28fb: Merge \"Improve the input policy handling a bit.\" into gingerbread\n\nMerge commit \u00274b255a23041225103a6870e77a236f78c2816eda\u0027\n\n* commit \u00274b255a23041225103a6870e77a236f78c2816eda\u0027:\n  Improve the input policy handling a bit.\n"
    },
    {
      "commit": "9f164aa9b39ddd42963f52ca47d1739ee4bb1e7d",
      "tree": "445b6f4970325f6a663f262547497a36f3dbcb26",
      "parents": [
        "8635bb5405a50b86badcb3e674032d6f444d4944",
        "b05632aae37ea3a3573aabf10e6868733546de96"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 13 17:01:53 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 13 17:01:53 2010 -0700"
      },
      "message": "am b05632aa: am a28d5aff: Merge \"Fix a bug synthesizing cancelation events for motions.\" into gingerbread\n\nMerge commit \u0027b05632aae37ea3a3573aabf10e6868733546de96\u0027\n\n* commit \u0027b05632aae37ea3a3573aabf10e6868733546de96\u0027:\n  Fix a bug synthesizing cancelation events for motions.\n"
    },
    {
      "commit": "3122e4488aa0749cbec9890ace22c366e35350c3",
      "tree": "fed38c07c499413707f543ef9d0bbe45ccdf23c7",
      "parents": [
        "a28d5aff5466a55149b9e6f9cd908fcc225c25ff"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 23:32:49 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 12 00:16:14 2010 -0700"
      },
      "message": "Improve the input policy handling a bit.\n\nFixed some issues with Monkeys turning off their own screens.  Ook ook!\nAdded some more comments to explain what\u0027s going on.\n\nChange-Id: Id2bc0466161a642a73ef7ef97725d1c81e984b12\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": "a1160a798b688370bed3642a105dfeb7fba2f5f3",
      "tree": "51d68dce59ef9b99f12fcfe46bdc0220ecbb07e5",
      "parents": [
        "de846ac659e8c14d898a3fa14bd0504b24096057"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 18:22:53 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 11 18:22:53 2010 -0700"
      },
      "message": "Fix a bug synthesizing cancelation events for motions.\n\nChange-Id: I881c0fa16c1d22c4b1b6cca24deb0105405ff5b0\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": "0f5f2e4c27612e2cda231473aec0c06838ff3750",
      "tree": "e55ea53a7a492f40c19be493b6f063c8603e9b22",
      "parents": [
        "2874c3dec4f9ffd59b2be3de62c1148534396828",
        "e11b76d3efb056edea301d53a354d0730adf3520"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 01 21:49:29 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 01 21:49:29 2010 -0700"
      },
      "message": "am e11b76d3: am f6295b35: Merge \"Minor logging changes to input dispatcher to help with debugging.\" into gingerbread\n\nMerge commit \u0027e11b76d3efb056edea301d53a354d0730adf3520\u0027\n\n* commit \u0027e11b76d3efb056edea301d53a354d0730adf3520\u0027:\n  Minor logging changes to input dispatcher to help with debugging.\n"
    },
    {
      "commit": "f2f487183052865d50c004a835360be1728b5a52",
      "tree": "98965f96bbec354c7b93de0b83a882b43bf86d2a",
      "parents": [
        "0eaf3931a31c29f3a3883aab426b595c231c2a58"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 01 17:46:21 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 01 18:05:13 2010 -0700"
      },
      "message": "Minor logging changes to input dispatcher to help with debugging.\n\nAdded dumpsys reporting to EventHub.\nMade the formatting a bit clearer.\nAdded \u0027Locked\u0027 suffix to some internal methods of EventHub.\n\nChange-Id: Ic449560bcce378f6361895d27c66854e9724abb0\n"
    },
    {
      "commit": "0c1f756812442aa61fcd9c19c009657729a05d80",
      "tree": "2af73f224846e02e97118f4fccaabb59764759fd",
      "parents": [
        "b974d0c8f21000354bec04dea9cc6c938cdccccd"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 28 13:24:41 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 28 13:41:00 2010 -0700"
      },
      "message": "Fix bug in split touches.\n\nCherry-picked down to master.\n\nChange-Id: I786761bd6aecc021ae22d8c9a022324f3a9980d1\n"
    },
    {
      "commit": "aeec2bf66a6119261ca47d98ef1aef954fb56462",
      "tree": "07b4a3c9a1e2079b978830bc6a0f7a1d869fc704",
      "parents": [
        "6d028dd2f102a6eafaa2edebeb55f55b4c32fc42"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 28 13:24:41 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 28 13:26:42 2010 -0700"
      },
      "message": "Fix bug in split touches.\n\nChange-Id: I808c2201a06938f82817058059f4ddcc9b1a9ae2\n"
    },
    {
      "commit": "c188062eb6c44c05d24aeb207df4d7e5dbdf089e",
      "tree": "9a848df35cf0f4c984cd2cb29245157c5dbefa26",
      "parents": [
        "40f45eeeb4914511c0d4d749d1f4c768e82b79a3",
        "26d5786fb1a43d82b40fa908e1220a018b748c93"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 28 12:47:13 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 28 12:47:13 2010 -0700"
      },
      "message": "am 26d5786f: am 9c37447e: Merge \"Fix pointer index when splitting secondary pointers.\" into gingerbread\n\nMerge commit \u002726d5786fb1a43d82b40fa908e1220a018b748c93\u0027\n\n* commit \u002726d5786fb1a43d82b40fa908e1220a018b748c93\u0027:\n  Fix pointer index when splitting secondary pointers.\n"
    },
    {
      "commit": "9a01d0519fa56fa75864cb96045c6ee832a39ff4",
      "tree": "96f85df7b4a0afc930d4ef348494c53a9c1b07f1",
      "parents": [
        "68ef7f3c3a8deb0e14b0b6325876b23cecc191b3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 16:35:11 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 27 20:54:28 2010 -0700"
      },
      "message": "Fix pointer index when splitting secondary pointers.\n\nChange-Id: Ib01e810ea5b64501b1303000bbef0f0a1db2114e\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": "2a95c2a9ec703b9d19b750cb854fb4ec4899e205",
      "tree": "ce7e86def75520562f38adfe65f3228dfdc6ad76",
      "parents": [
        "567c00a86f748ad4d798ae50a09505cc051fc095"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 12:31:46 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 12:31:46 2010 -0700"
      },
      "message": "Fix input dispatcher regression on launcher drag\u0026drop.\n\nChange-Id: I40e937bd712cd2ed6cceac95dfd1b8c8e070724f\n"
    },
    {
      "commit": "dc3e00563ee6400936e3cb82405bb94df0b35078",
      "tree": "45a8f8fa13d5d8164a25a64f1137e279f1d9e59c",
      "parents": [
        "c7510581b81d63536db7d46ca8533106c8cf57c6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 11:02:16 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 11:02:16 2010 -0700"
      },
      "message": "Fix NPE when handling certain kinds of ANRs.\n\nChange-Id: Iccef1852e52c84f6f49d30c491431460a10b33d3\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": "8d60866e2100db70ecf0502c14768a384514d7e9",
      "tree": "514e46b4e4d58fd68cd52de93b93e7782fdf4e9f",
      "parents": [
        "bb660d7e1bed3a07a1804bd9641d9634bfaa4972"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 30 03:02:23 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 30 18:16:43 2010 -0700"
      },
      "message": "Input device calibration and capabilities.\n\nFinished the input device capability API.\nAdded a mechanism for calibrating touch devices to obtain more\naccurate information about the touch contact area.\nImproved pointer location to show new coordinates and capabilities.\nOptimized pointer location display and formatting to avoid allocating large\nnumbers of temporary objects.  The GC churn was causing the application to\nstutter very badly when more than a couple of fingers were down).\nAdded more diagnostics.\n\nChange-Id: Ie25380278ed6f16c5b04cd9df848015850383498\n"
    },
    {
      "commit": "0f4d7bc1844af4934a0288e715a4f1350fd5dac2",
      "tree": "b97592a41cd0db3c6758a02dec829dac69ebf51d",
      "parents": [
        "3d8c9bdbed0c31143227697bd0d94fd234fe08ad"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 19 11:55:13 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 19 13:26:58 2010 -0700"
      },
      "message": "Make the throttling more sensitive to end-to-end latency.\n\nThe code now takes into account the time when the event was generated.\nSo with a 60Hz throttling rate, it ensures that a motion event will not\nbe delayed due to throttling by any more than 1/60th of second past\nthe time it was generated.\n\nChange-Id: Iaea1d4f76e79036b4a18873485230731c3cd63c3\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": "d3616592fe1b315b589766c4b74ce728fc4968f5",
      "tree": "ef2bc2b0bed3aa307d444d8cab413bec5722ea7c",
      "parents": [
        "ace999b096739d376d4845c0ba94599197ff8477"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 16 17:21:06 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 16 17:46:03 2010 -0700"
      },
      "message": "Fix trackball down and movement bugs.\n\nBug: 2823788\nChange-Id: Icb0c392b58f7e735614460b5eb87439cb73ac4f2\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": "fd03582995e0fce963dd0fa0669e3211b74c0dd7",
      "tree": "8f7fe0e2a437620a7cbe4e494f71fe8ccfdbe2eb",
      "parents": [
        "c0a7e690bfd32dd897ceccd04dd0fa6bf6e9cee6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 30 16:10:35 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jul 13 17:04:57 2010 -0700"
      },
      "message": "Add initial gamepad support.\n\nChange-Id: I0439648f6eb5405f200e4223c915eb3a418b32b9\n"
    },
    {
      "commit": "85448bbecd4e0909eecfab15b7c3605f114d0427",
      "tree": "3380a9a85e321dc7ee4397dc1b4f22564af117d8",
      "parents": [
        "f7d2b4a2e096ae1f8ac3a2ed8b2f0e30a237f732"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 07 14:27:31 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 08 11:06:59 2010 -0700"
      },
      "message": "Add new glue code for writing native apps.\n\nThis factors out the boiler-plate code from the sample\napp to a common glue code that can be used for everyone\nwriting this style of app: a dedicated app thread that\ntakes care of waiting for events and processing them.\n\nAs part of doing this, ALooper has a new facility to allow\nregistration of fds that cause ALooper_pollOnce() to return\nthe fd that has data, allowing the app to drive the loop\nwithout callbacks.  Hopefully this makes some people feel better. :)\n\nAlso do some other cleanup of the ALooper API, plus some\nactual documentation.\n\nChange-Id: Ic53bd56bdf627e3ba28a3c093faa06a92be522b8\n"
    },
    {
      "commit": "00fa7bdd69f0868fd17ea7c881c771d785b2fbbd",
      "tree": "6fff8ad404e57af316c6ce5a20020dc209eb3cc6",
      "parents": [
        "8ecfb60a8e74dfcd51bbf3f236d5f414a4d5ac7d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 02 15:37:36 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Jul 03 19:23:01 2010 -0700"
      },
      "message": "More native input dispatch work.\n\nRemoved old input dispatch code.\nRefactored the policy callbacks.\nPushed a tiny bit of the power manager state down to native.\nFixed long press on MENU.\nMade the virtual key detection and cancelation a bit more precise.\n\nChange-Id: I5d8c1062f7ea0ab3b54c6fadb058c4d5f5a9e02e\n"
    },
    {
      "commit": "0b72e82c5f5d4ab709539c3490d6c7023f680dff",
      "tree": "c0b9adc3370bd600a9dc5bb8f4ffa4e6151d1977",
      "parents": [
        "5d7f6e614e7ead1fbe40a6886f78c31809bcbd40"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 29 16:52:21 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 29 16:52:21 2010 -0700"
      },
      "message": "Fix native input dispatch in the emulator.\n\nSet a default orientation of ROTATION_0.\nAdded some more careful checks based on whether we have valid\nabsolute axis information from the driver.\nReset key repeating during configuration changes since the keyboard\ndevice may have been removed.\n\nChange-Id: I685960828acffcb17595fc5683309e8064a76714\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": "e91a5db35b0faecb9387ba09341713568b1ae86c",
      "tree": "c066471d9aa6ba58ea3f3d4b3f5da2e8c3e160d5",
      "parents": [
        "69a4817e3e1e368e758ff8c238deb5ee26963c04"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 23 16:50:30 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 23 16:51:07 2010 -0700"
      },
      "message": "Remember to initialize timestamps in the dispatch allocator\n\nChange-Id: I83a2d353c34ff84a7d130e602c6dedc6a5541944\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": "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": "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": "43a9527c54b71cb17515591af37eeeef6c22e3ff",
      "tree": "9a14a3a9ba426fabd07a761a5cf0e0a4714428cb",
      "parents": [
        "46b9ac0ae2162309774a7478cd9d4e578747bfc2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "message": "Fix include paths.\n\nChange-Id: Ifda45688f9f02710a74d5d7a7d902bacf1441e2e\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"
    }
  ]
}
