)]}'
{
  "log": [
    {
      "commit": "2132198d052ca68a6aa2433274f12203a71451df",
      "tree": "27d4417c33c161c41cfb09b0c24900a3507186ca",
      "parents": [
        "39c9c63295ad972a82076676a6cdaf34d9508f62"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Aug 22 15:01:15 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Aug 22 15:01:15 2013 -0700"
      },
      "message": "Fix check for default source in input command\n\nChange-Id: I30b062e78c7d4de59a5530999e6332ba3053f7c9\n"
    },
    {
      "commit": "77a2dabf01039da8dfe0bf43d41b223d79a8c9d2",
      "tree": "f40e160b0b2e305e6c14fcb33993b633a018eb61",
      "parents": [
        "d55e18eceac46160440054c6725b3461a1ccc1dd"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon Jul 22 13:58:45 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon Jul 22 13:58:45 2013 -0700"
      },
      "message": "Fix swipe end location\n\nChange-Id: I997ca30dc5399b36e13516c4aeadbdf6fa357df7\n"
    },
    {
      "commit": "9d83b4783c33f1fafc43f367503e129e5a5047fa",
      "tree": "54cdb3d9f8528ad6e10329adb2c1d3c4d3ee8e2a",
      "parents": [
        "8f5e3d13e166e4873e130a5ef7c987333dbac917"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Jun 20 21:14:58 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Wed Jul 17 16:04:03 2013 -0700"
      },
      "message": "Allow duration without source to be set for input commands\n\nChange-Id: Ib04badeddf0e9d6ff1b275da34ad259f59c1cbbd\n"
    },
    {
      "commit": "11744d15364b16a976413599933ed1b1d59e4a6f",
      "tree": "ecbb01b787716613b3560e5085e7f00113d15ad4",
      "parents": [
        "f1301d86fb7f414330b08dd9514436e65ba69ceb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 29 15:22:10 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 29 15:31:10 2013 -0700"
      },
      "message": "Add longpress support to keyevent.\n\nChange-Id: I578cb7dd910425ce07fbe56412a4dc2e0c379e65\n"
    },
    {
      "commit": "f1301d86fb7f414330b08dd9514436e65ba69ceb",
      "tree": "b0a1944d373ec02db2c33e45008da173138fb8a5",
      "parents": [
        "b98212925e41e9420ce6fefc3fe204b29c8f7a83",
        "b3f6687756ffb660f834ef673bed04b2d4a26d21"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 29 15:29:13 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 29 15:29:13 2013 -0700"
      },
      "message": "Merge commit \u0027b3f66877\u0027 into afdmerge\n\nChange-Id: I319863cf23b2e6eacfa4508f7b111fba7b1cbc24\n"
    },
    {
      "commit": "2ac9d8d0f0ea65aae6ba43490b5be6617ad97125",
      "tree": "ee0f4a0b48a193a4e9d26ede2a0297a53f90cfc6",
      "parents": [
        "bd1730dec7356e042ee885ff4a63b40f36733062"
      ],
      "author": {
        "name": "Diego Torres Milano",
        "email": "dtmilano@gmail.com",
        "time": "Thu Apr 04 13:44:34 2013 -0400"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 29 22:05:24 2013 +0000"
      },
      "message": "input: added support for multiple keyevents\n\n- Multiple keyevents can now be send from the command line:\n\n    input keyevent \u003ckey code number or name\u003e ...\n\n  Sometimes invoking \u0027input\u0027 repeatedly does not send the events fast\n  enough, this change solves the problem by allowing multiple key code\n  number or names be added to the command line.\n\nChange-Id: I0d0f34bddd99e0195c9badff2f8b3e2aa9a51737\n"
    },
    {
      "commit": "a9574e3361e168671d627071e26280f69d0d081b",
      "tree": "56e635986299e79064435bea52be6c102e08ae5d",
      "parents": [
        "678a1252b4f3cdc18d20b411c05a4320d1d9b719"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 09 20:13:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Apr 10 03:01:37 2013 -0700"
      },
      "message": "Add touchnavigation to input debugging command.\n\nBug: 8583760\nChange-Id: I9b150133e3d9ca9fe970550f5c0d7c18e6c7b558\n"
    },
    {
      "commit": "7b172a49a90ea6784dbfe0002474f9d4fd4ace1a",
      "tree": "05db15b0b2b922fa644199d48d8769624bacbe34",
      "parents": [
        "e4d08f11c49ff4c554df80c12fa2b5b04831e2f5",
        "58ed5d748c0b9b64845975ef5844ad313de7c3f6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 13:08:25 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 13:08:25 2012 -0800"
      },
      "message": "am 58ed5d74: am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u002758ed5d748c0b9b64845975ef5844ad313de7c3f6\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "58ed5d748c0b9b64845975ef5844ad313de7c3f6",
      "tree": "507af3879bc894eb854712a1fe6c0953805a895c",
      "parents": [
        "9197d170b770f2b87abd0cd0e13dcf71e5a181c2",
        "768d9e1a72ceee7d4a5f608776b87b62d6ce4a04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "message": "am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u0027768d9e1a72ceee7d4a5f608776b87b62d6ce4a04\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "3a084af2e90849aaa8beb3a610189e3399c63ea0",
      "tree": "ba4b87d227674fd68f9ea395649fde32778620f0",
      "parents": [
        "9d547d6934f64189e368c0b190fb4cf49c95a557"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:19:47 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:27:31 2012 -0800"
      },
      "message": "Correct executable bit for source files\n\nMany media files and source code files were marked as executable in Git.\nRemove those.\n\nAlso a shell script and python script were not marked as executable.\n\nChange-Id: Ieb51bafb46c895a21d2e83696f5a901ba752b2c5\n"
    },
    {
      "commit": "4ec7ea72d2a9de6b79b11f7e0d12def5b58ef878",
      "tree": "c699d35f371e343be3471b1e3f8109dd7070856c",
      "parents": [
        "369a7f493e10af296138e50b922414afaa127313"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Oct 02 19:27:40 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Oct 02 19:30:03 2012 -0700"
      },
      "message": "Change adb-shell-input utility to use duration for swipe\n\nChange-Id: Id48fade60a07220c0672697f5771b75f984ee5bd\n"
    },
    {
      "commit": "b38070caa5143ab9fd1883e0c7c879533a480bc7",
      "tree": "ffbed34eefd1fd81a028e1a14820d48953252b29",
      "parents": [
        "37ee53420ce47860807eb8eaeb454c12fa46797b"
      ],
      "author": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Fri Aug 24 13:46:02 2012 -0700"
      },
      "committer": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Mon Sep 10 14:01:42 2012 -0700"
      },
      "message": "IME support for trackball and generic motion events\n\nTrackball and generic motion events now pass through the IME in case\nit would like to handle them before passing them on to the view\nhierarchy.\n\nWhile I was at it, I also...\n...fixed the documentation on InputMethodService.onKeyUp()\n...added documentation to InputMethodService.onTrackballEvent()\n...added trackball and generic motion events to the \"input\" command\n...fixed input consistency verification involving ACTION_OUTSIDE\n\nBug: 7050005\nChange-Id: I40ab68df4a9542af6df25de6ec2ec500e4c02902\n"
    },
    {
      "commit": "ca13fed08bf38c2f2811b3ec3f995d0ca57ac6ac",
      "tree": "a9abe1bce747df20cc0eacfb2207d3b86f557415",
      "parents": [
        "7873d5b3ff587ffff33dae628aaa581b099db61e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 17:18:20 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 17:18:20 2012 -0700"
      },
      "message": "Empower the \u0027input\u0027 command with keycode labels.\n\nChange-Id: Ia077f8ee0732599cec9b04efc2f828d3d22f5bac\n"
    },
    {
      "commit": "9f25b7fdf216c9ef0bd2322cd223eeaf0d60f77f",
      "tree": "b0b509a261874435cab3f5f1a727c02b399bd91c",
      "parents": [
        "54ae14749bc7f9e73cfda35a8b49f9efa80a77fb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 14:30:49 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 18:23:58 2012 -0700"
      },
      "message": "Request key maps from input manager service.\n\nInstead of each application loading the KeyCharacterMap from\nthe file system, get them from the input manager service as\npart of the InputDevice object.\n\nRefactored InputManager to be a proper singleton instead of\nhaving a bunch of static methods.\n\nInputManager now maintains a cache of all InputDevice objects\nthat it has loaded.  Currently we never invalidate the cache\nwhich can cause InputDevice to return stale motion ranges if\nthe device is reconfigured.  This will be fixed in a future change.\n\nAdded a fake InputDevice with ID -1 to represent the virtual keyboard.\n\nChange-Id: If7a695839ad0972317a5aab89e9d1e42ace28eb7\n"
    },
    {
      "commit": "ac14351e16e1258f1cb54e2bf772b8be004eb2b8",
      "tree": "55c22fe8e19d35764f00a6ffad899e4fd2c4ccd0",
      "parents": [
        "030711c39b6093024d784c1c3d7566bd5a3e3489"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 05 18:57:33 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 05 19:33:11 2012 -0700"
      },
      "message": "Move some APIs from window manager to input manager.\n\nSimplified input injection API down to just one call.\n\nRemoved all input state reading API.  It was only used by the\nwindow manager policy and required a permission that applications\ncould not obtain.  READ_INPUT_STATE is now unused and deprecated.\n\nChange-Id: I41278141586ddee9468cae0fb59ff0dced6cbc00\n"
    },
    {
      "commit": "797e4465fbc1f6a818e2905d17719e5df8c2a705",
      "tree": "713f33f7cdc58506c62a8cde303cdc1fe5f666ae",
      "parents": [
        "e98ae0a050d6ce4b3e2aec7c070a87922086c256"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Dec 06 16:06:13 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Dec 06 16:06:13 2011 -0800"
      },
      "message": "Add tap and swipe capabilities to the \"input\" tool.\n\nChange-Id: Ia2950d281ef04232c5134fa045ce18272fbd6f81\n"
    },
    {
      "commit": "6b53e8daa69cba1a2a5a7c95a01e37ce9c53226c",
      "tree": "db912c6cdf230ef7f2cf406c545b3bbae3f09ea2",
      "parents": [
        "a914f340ae5b267dc3ab36c1156c795b8fa18f5d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:03:06 2010 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Nov 18 09:49:03 2010 -0800"
      },
      "message": "Added support for full PC-style keyboards.\n\nBREAKING CHANGE: Redesigned the key character map format to\naccomodate full keyboards with more comprehensive suite of modifiers.\nOld key character maps will not work anymore and must be updated.\nThe new format is plain text only and it not compiled to a binary\nfile (so the \"kcm\" tool will be removed in a subsequent check-in).\n\nAdded FULL keyboard type to support full PC-style keyboards.\n\nAdded SPECIAL_FUNCTION keyboard type to support special function\nkeypads that do not have any printable keys suitable for typing\nand only have keys like HOME and POWER\n\nAdded a special VIRTUAL_KEYBOARD device id convention that maps\nto a virtual keyboard with a fixed known layout.  This is designed\nto work around issues injecting input events on devices whose\nbuilt-in keyboard does not have a useful key character map (ie.\nwhen the built-in keyboard is a special function keyboard only.)\n\nModified several places where events were being synthesized\nto use the virtual keyboard.\n\nRemoved support for the \"qwerty\" default layout.\nThe new default layout is \"Generic\".  For the most part \"qwerty\"\nwas being used as a backstop in case the built-in keyboard did\nnot have a key character map (probably because it was a special\nfunction keypad) and the framework needed to be able to inject\nkey events anyways.  The latter issue is resolved by using the\nspecial VIRTUAL_KEYBOARD device instead of BUILT_IN_KEYBOARD.\n\nAdded the concept of a key modifier behavior so that\nMetaKeyKeyListener can distinguish between keyboards that use\nchorded vs. toggled modifiers.\n\nWrote more robust key layout and key character map parsers\nto enable support for new keyboard features and user installable\nkey maps.\n\nFixed a bug in InputReader generating key ups when keys\nare released out of sequence.\n\nUpdated tons of documentation.\n\nCurrently QwertyKeyListener is being used for full keyboards\nwith autotext and capitalization disabled.  This mostly works\nbut causes some problems with character pickers, etc.\nThese issues will be resolved in subsequent changes.\n\nChange-Id: Ica48f6097a551141c215bc0d2c6f7b3fb634d354\n"
    },
    {
      "commit": "287bf98077b4529264a3a262ef9b6f5c1ef67cbc",
      "tree": "f4236155bcddc063b986e748c0f7d0859332c068",
      "parents": [
        "212db7d3f8ce5297f4a556234a9c0675c697f1cf"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Thu Apr 15 10:58:48 2010 -0700"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Thu Apr 15 10:58:48 2010 -0700"
      },
      "message": "add execution permission to \"input\" script\n\nAlthough when building system image, \"input\" script will be given execution\npermission, adb sync will push a version without x onto device from build\ntree. Refer to frameworks/base/cmds/svc/svc, which has execution bit set.\n\nChange-Id: I3e5bf0ce1a65133cb259d5c78456d36783c06b80\n"
    },
    {
      "commit": "9066cfe9886ac131c34d59ed0e2d287b0e3c0087",
      "tree": "d88beb88001f2482911e3d28e43833b50e4b4e97",
      "parents": [
        "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "076357b8567458d4b6dfdcf839ef751634cd2bfb"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "54b6cfa9a9e5b861a9930af873580d6dc20f773c",
      "tree": "35051494d2af230dce54d6b31c6af8fc24091316",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
