)]}'
{
  "log": [
    {
      "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": "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": "470ce098f82047304f78162646d65ed3a908e95e",
      "tree": "7c11c85aa19e50b746ae790bc99b946d8290d770",
      "parents": [
        "39df5331c7423455f1fb6c01b075b618f8bc00fd",
        "d7cd560af506f75d07034c136bea09b409b4d408"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 17:21:56 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 21 17:21:56 2010 -0700"
      },
      "message": "am d7cd560a: am 1d79a9d9: Use correct size of GAMEPAD_KEYCODES\n\nMerge commit \u0027d7cd560af506f75d07034c136bea09b409b4d408\u0027\n\n* commit \u0027d7cd560af506f75d07034c136bea09b409b4d408\u0027:\n  Use correct size of GAMEPAD_KEYCODES\n"
    },
    {
      "commit": "1d79a9d9f85f932a1fd6dcddba335450b65ba4e6",
      "tree": "4c25f01396a8fed470404bbd92aa2af90df205b0",
      "parents": [
        "703aae06c0925b19657877bb1872bb2f28874969"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 15:46:03 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 15:46:03 2010 -0700"
      },
      "message": "Use correct size of GAMEPAD_KEYCODES\n\nCompute the actual number of indices in the GAMEPAD_KEYCODES instead of\nthe pure size in bytes.\n\nBug: 3121536\nChange-Id: I71edbd8bf6eff2c8cc0ea5c6845362b3d1e06466\n"
    },
    {
      "commit": "497a92cc5ba2176b8a8484b0a7da040eac0e887b",
      "tree": "2d9bd7a2ef24754fa83a36f440ee45fd8a32b9fb",
      "parents": [
        "cd9afc3722a1edebf0e6f7172627930052c81ce4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:55:08 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 15 16:00:07 2010 -0700"
      },
      "message": "Add keycodes and meta-key modifiers to support external keyboards.\n\nAdded new key maps for external keyboards.  These maps are intended to\nbe shared across devices by inheriting the \"keyboards.mk\" product\nmakefile as part of the device\u0027s product definition.\n\nOne of the trickier changes here was to unwind some code in\nMetaKeyKeyListener that assumed that only the low 8 bits of the meta key\nstate were actually used.  The new code abandons bitshifts in favor\nof simple conditionals that are probably easier to read anyways.\nThe special meta key state constants used by MetaKeyKeyListener\nare now (@hide) defined in KeyEvent now so as to make it clearer that they\nshare the same code space even if those codes are not valid for KeyEvents.\n\nThe EventHub now takes care of detecting the appropriate key layout\nmap and key character map when the device is added and sets system\nproperties accordingly.  This avoids having duplicate code in\nKeyCharacterMap to probe for the appropriate key character map\nalthough the current probing mechanism has been preserved for legacy\nreasons just in case.\n\nAdded support for tracking caps lock, num lock and scroll lock and\nturning their corresponding LEDs on and off as needed.\n\nThe key character map format will need to be updated to correctly support\nPC style external keyboard semantics related to modifier keys.\nThat will come in a later change so caps lock doesn\u0027t actually do\nanything right now except turn the shiny LEDs on and off...\n\nAdded a list of symbolic key names to KeyEvent and improved the toString()\noutput for debug diagnosis.  Having this list in a central place in the\nframework also allows us to remove it from Monkey so there is one less\nthing to maintain when we add new keycodes.\n\nBug: 2912307\nChange-Id: If8c25e8d50a7c29bbf5d663c94284f5f86de5da4\n"
    },
    {
      "commit": "a9b84229a3e9e0ae15e3e964985fac2314247be2",
      "tree": "e3d7d7e6a54abc6e6f44ccc9a3d79e02812c2816",
      "parents": [
        "844a6b3ccaff1ad1443ad985e4527b733ce97c0e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 14 02:23:43 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 14 02:23:43 2010 -0700"
      },
      "message": "Make sure EventHub reports added/removed devices immediately.\n\nFixed a bug where EventHub would not report changes in devices\nuntil the next event.\n\nBug: 3096147\nChange-Id: Ie4c3e1d14d0ad806cfaa212611ce06034d1b94d4\n"
    },
    {
      "commit": "7342bb9693f480f6c713b4a4f82a9ad9131cd667",
      "tree": "bd68c8bf4604123404347880da67c3f9c34935e7",
      "parents": [
        "f2f487183052865d50c004a835360be1728b5a52"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 01 18:55:43 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 01 18:55:43 2010 -0700"
      },
      "message": "Wait for initial device scan to finish before updating config.\n\nThis change narrows the opportunity for a race condition setting the\nresource Configuration while devices are being updated.\n\nChange-Id: I58efa563f4129ab0fce7108511d16a99dff7e451\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": "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": "aeb00c409d1ead2a3cb0f3d98b78de80adeec52b",
      "tree": "3c58fb70f4cb6e85b787fdf5e594a5322355adf0",
      "parents": [
        "72e0b2ab08dc49857955a4560de296fdddada8dc"
      ],
      "author": {
        "name": "Sean McNeil",
        "email": "sean.mcneil@windriver.com",
        "time": "Wed Jun 23 16:00:37 2010 +0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Aug 18 13:53:36 2010 -0700"
      },
      "message": "Only monitor recognized uevent devices.\n\nsystem_server can potentially monitor uevent devices that are\nof no use to it. For instance, an accelerometer implementation\nas uevents. This would cause the process to be busy when\nunnecessary. If a device cannot be classified, don\u0027t monitor it.\n\nChange-Id: Ib2c93105e7d746d9c1a7414bea8bab3fb8c0b70a\n"
    },
    {
      "commit": "c4554b9a0885ac3713575e91d8d33c5670b52322",
      "tree": "2d2b2a6dbc6ea600ac269e753773e9a8a42967ee",
      "parents": [
        "d313cab46e07c40f4cd1a94304a553e7eb809190"
      ],
      "author": {
        "name": "Jens Gulin",
        "email": "jens.gulin@sonyericsson.com",
        "time": "Tue Jun 22 22:21:57 2010 +0200"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Aug 18 10:54:03 2010 -0700"
      },
      "message": "Keep track of remaining fd when devices are removed\n\nSometimes the wrong fd was accessed when the device was addressed\nby device id.\n\nThe earlier implementation assumed that two arrays were in sync\nbut one of them was compacted when devices were removed. Instead\nof that dependency the device now keeps track of it\u0027s file descriptor.\n\nChange-Id: Ib0f320603aafb07ded354bc3687de9759c9068f2\n"
    },
    {
      "commit": "cc2e717f1d43a836d1abdee06bcb946416d06fd6",
      "tree": "d55b14467e2c1f0d1b0ec9f5a212513af4bc17b6",
      "parents": [
        "72ce42352c1c229e05d910b4176f3cddb608e814"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 17 16:48:25 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Aug 17 19:40:26 2010 -0700"
      },
      "message": "Optimize EventHub reads.\n\nChange-Id: Id7d09c0a6e5c741c1e29becd2b6560772c5ff372\n"
    },
    {
      "commit": "6d0fec2de3601821f4f44eeb7d7deedebb2b7117",
      "tree": "9fdea32c5691a6d0bcb3085df47f42a8e6ecd565",
      "parents": [
        "b350bec514eb9fee473e4ef62680c53e992dc49b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 23 21:28:06 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 28 14:16:15 2010 -0700"
      },
      "message": "Refactor input reader to support new device types more easily.\n\nRefactored the input reader so that each raw input protocol is handled\nby a separate subclass of the new InputMapper type.  This way, behaviors\npertaining to keyboard, trackballs, touchscreens, switches and other\ndevices are clearly distinguished for improved maintainability.\n\nAdded partial support for describing capabilities of input devices\n(incomplete and untested for now, will be fleshed out in later commits).\n\nSimplified EventHub interface somewhat since InputReader is taking over\nmore of the work.\n\nCleaned up some of the interactions between InputManager and\nWindowManagerService related to reading input state.\n\nFixed swiping finger from screen edge into display area.\n\nAdded logging of device information to \u0027dumpsys window\u0027.\n\nChange-Id: I17faffc33e3aec3a0f33f0b37e81a70609378612\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": "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"
    },
    {
      "commit": "b776d5be97f64d90e5d28e46325a1c6ecff3179f",
      "tree": "f471ba094886bdce769b231b88dd57fb5224618c",
      "parents": [
        "5321aef4a22daef6ed01ed48d936cdd82f2e38b7"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 04 16:26:06 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 04 16:32:32 2010 -0800"
      },
      "message": "Calculate bitmask array sizes correctly in the EventHub\n\nWe\u0027ve gotten lucky to date:  the previous calculation of bitmask array\nsizes, (maxval+1)/8 only works properly when \u0027maxval\u0027 is one less than\na multiple of 8.  Fortunately, this has either been the case for us,\nor there has been sufficient \u0027unused\u0027 space at the end of the defined\nmax value range that we haven\u0027t wound up overreading/overwriting the\nallocated buffers.\n\nChange-Id: I563a93a86644ab9f19489565e06c28e06bb53abc\n"
    },
    {
      "commit": "4ff7e223a9507b95ffc58a188be20217f2b3c26e",
      "tree": "d26156a5f3ea53f13695037f6ca768e3ea960a20",
      "parents": [
        "175ab23dbf098a8b870ebe8cb90ac16e5b50f0ef"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 04 16:00:29 2010 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 04 16:00:29 2010 -0800"
      },
      "message": "Fix #2489986 : The key bitmask needs to cover all possible keys\n\nChange-Id: Ieebd2f879e6b6fbc0388655dd66f34be89e809a0\n"
    },
    {
      "commit": "a2e92266b3f768f74ab7fcb42972a22d6c739b39",
      "tree": "ddbce0189e04e2ef3b196c9d71dd9dab03410d4b",
      "parents": [
        "c018f3cfdd8a8277dbb3b61d4761974862876ab9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 02 17:19:29 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 02 17:37:45 2010 -0800"
      },
      "message": "Maybe fix issue #2482201: Paired bluetooth device looks like a qwerty keyboard\n\nWe now only consider a device to be a default keyboard if its name\nhas \"-keypad\".  A hack, but whatever.\n\nAlso add some debug logging for the input state to help identify such\nissues in the future.\n"
    },
    {
      "commit": "c8b60d1932bb9f294550584126fc5b58a6312406",
      "tree": "0c27776ee9b05f09a0ad306c7ad6e65961f94169",
      "parents": [
        "996dddff64f90d8469e24107c44bfd618cf0c2dd"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Jan 26 10:27:15 2010 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Tue Jan 26 10:28:52 2010 -0800"
      },
      "message": "Revert \"Fix failure to open AVRCP input device due to EPERM.\"\n\nThis reverts commit e6b1bbd8acca3f6e174c24cf4eb23a66db2d08a2.\n"
    },
    {
      "commit": "e6b1bbd8acca3f6e174c24cf4eb23a66db2d08a2",
      "tree": "6f56ac4d7205d451885c5eaf258dd28b3d45f23f",
      "parents": [
        "8c166512a7e6ffaf87e41cd3a85d55993648fe9b"
      ],
      "author": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Jan 20 19:36:49 2010 -0800"
      },
      "committer": {
        "name": "Nick Pelly",
        "email": "npelly@google.com",
        "time": "Wed Jan 20 19:56:24 2010 -0800"
      },
      "message": "Fix failure to open AVRCP input device due to EPERM.\n\nSleep for 100us and try to open the input device again if it fails, with a\nmaximum of 10 attempts.\n\nWe need the retry logic because setting permissions on a new input device is\nracy. The init process watches for new input device (via uevent) and sets the\npermission on them in devices.c:make_device(). However at the same time\nEventHub.cpp watches for new input devices from the system_server process, and\nimmediately tries to open them. I can\u0027t see a simple way to avoid this race\ncondition.\n\nAs best as I can tell this race condition has always exisited.\nThere must have been some timing change that happened recently that causes us\nto hit this race condition much more often. See repro notes in referenced bug.\n\nBug: 2375632\n"
    },
    {
      "commit": "a8f6018d6c2d28313f9550fa8fcb39c2f607e09c",
      "tree": "a64e1d3e4b63e2792ab93ee69d913b415925d814",
      "parents": [
        "14de0880dd7b716f39b822917e874ca5e579ff37"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 01 19:01:50 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 02 17:20:25 2009 -0700"
      },
      "message": "Work on issue #2079167: Flickering issue across multiple UI\n\nThis addresses a few parts of the bug:\n\n- There was a small issue in the window manager where we could show a window\n  too early before the transition animation starts, which was introduced\n  by the recent wallpaper work.  This was the cause of the flicker when\n  starting the dialer for the first time.\n\n- There was a much larger problem that has existing forever where moving\n  an application token to the front or back was not synchronized with the\n  application animation transaction.  This was the cause of the flicker\n  when hanging up (now that the in-call screen moves to the back instead\n  of closing and we always have a wallpaper visible).  The approach to\n  solving this is to have the window manager go ahead and move the app\n  tokens (it must in order to keep in sync with the activity manager), but\n  to delay the actual window movement: perform the movement to front when\n  the animation starts, and to back when it ends.  Actually, when the\n  animation ends, we just go and completely rebuild the window list to\n  ensure it is correct, because there can be ways people can add windows\n  while in this intermediate state where they could end up at the wrong\n  place once we do the delayed movement to the front or back.  And it is\n  simply reasuring to know that every time we finish a full app transition,\n  we re-evaluate the world and put everything in its proper place.\n\nAlso included in this change are a few little tweaks to the input system,\nto perform better logging, and completely ignore input devices that do not\nhave any of our input classes.  There is also a little cleanup of evaluating\nconfiguration changes to not do more work than needed when an input\ndevices appears or disappears, and to only log a config change message when\nthe config is truly changing.\n\nChange-Id: Ifb2db77f8867435121722a6abeb946ec7c3ea9d3\n"
    },
    {
      "commit": "36dad722511366e7d90b6e33669a033d0c8ec74e",
      "tree": "37fa698e2b060b2d1507950ec7d0cf42ed962479",
      "parents": [
        "49237345d83e62fdb9eb8d50b13ad086636a04fa"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Aug 28 13:29:06 2009 -0700"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Aug 28 13:30:03 2009 -0700"
      },
      "message": "EventHub: Fix file descriptor leak.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "fc2ebc473bbca6f9e6e30ea5de979c4852f35319",
      "tree": "94662042bc0364ba1a4b0ef2bd3e5ff94b9c58df",
      "parents": [
        "6867bb1bc904b1a2d945921ac6dd1ed2e99c83f5"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Aug 06 14:50:08 2009 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Aug 06 14:52:13 2009 -0700"
      },
      "message": "EventHub: pass the name of each input device up to Java\n\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "0dd7cb4b4ef86eb7d4e837b1948501da66adeebe",
      "tree": "df786b0b8b9b3ca4fda02e4bcb7b44db501a5150",
      "parents": [
        "a2136d6b18a26ff34f2e5cd3f6c9413f0c96a5ba"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 04 05:49:43 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 04 20:53:52 2009 -0700"
      },
      "message": "Finish implementation of multiple pointer support for MotionEvent.\n\nThe major things going on here:\n\n- The MotionEvent API is now extended to included \"pointer ID\" information, for\n  applications to keep track of individual fingers as they move up and down.\n  PointerLocation has been updated to take advantage of this.\n\n- The input system now has logic to generate MotionEvents with the new ID\n  information, synthesizing an identifier as new points are down and trying to\n  keep pointer ids consistent across events by looking at the distance between\n  the last and next set of pointers.\n\n- We now support the new multitouch driver protocol, and will use that instead\n  of the old one if it is available.  We do NOT use any finger id information\n  coming from the driver, but always synthesize pointer ids in user space.\n  (This is simply because we don\u0027t yet have a driver reporting this information\n  from which to base an implementation on.)\n\n- Increase maximum number of fingers to 10.  This code has only been used\n  with a driver that reports up to 2, so no idea how more will actually work.\n\n- Oh and the input system can now detect and report physical DPAD devices.\n"
    },
    {
      "commit": "15431a9482cedcfee7f5badc05c436e2c7cc7997",
      "tree": "687e109cd0069a3e417c4b472130a90179430bd3",
      "parents": [
        "265c9d2a147fba80629dda9d28ec9c68de24278e"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jul 17 00:10:10 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Fri Jul 17 00:10:10 2009 -0400"
      },
      "message": "EventHub: Compare name instead of id when excluding event input devices.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "1d9dfc5dcf459e85cffcb762ffdb9b9a4abbfd67",
      "tree": "64e951c1690a7859c67cbc3421ca41a326e3d744",
      "parents": [
        "d0c0e46a4408b22599bc588ea423d9102bcee6bf"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Jul 16 11:11:18 2009 -0400"
      },
      "committer": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Thu Jul 16 11:51:42 2009 -0400"
      },
      "message": "EventHub: Add support for excluding devices from being opened by as a keyboard.\n\nThis will be used to avoid unnecessarily listening to data from sensors\nthat function as event devices.\n\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "e3dd884815b2aaeec4241859722ab603e0b1466b",
      "tree": "ab595122c085720a236251afbfe78af248d87bc5",
      "parents": [
        "334a67740c9f7f35fa9ee93cf0f8051d41ce2d7a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 14 12:06:54 2009 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 14 18:51:53 2009 -0700"
      },
      "message": "Implement virtual button support.\n\nThe kernel can now publish a property describing the layout of virtual\nhardware buttons on the touchscreen.  These outside of the display\narea (outside of the absolute x and y controller range the driver\nreports), and when the user presses on them a key event will be\ngenerated rather than a touch event.\n\nThis also includes a number of tweaks to the absolute controller\nprocessing to make things work better on the new screens.  For\nexample, we now reject down events outside of the display area.\n\nStill left to be done is the ability to cancel a key down event,\nso the user can slide up from the virtual keys to the touch screen\nwithout causing a virtual key to execute.\n"
    },
    {
      "commit": "3b4062eeb01be33951ba214e027da523cf09f8b1",
      "tree": "ee621c2fa8a23e61e41626c7bcf79884f0d7555e",
      "parents": [
        "abe00fdee08577eb0fa2e5d220e91317b8f883a8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun May 31 19:13:00 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun May 31 19:13:00 2009 -0700"
      },
      "message": "get rid of utils.h\n"
    },
    {
      "commit": "0795272aa226f4e965968a03daddc53ce30b7cda",
      "tree": "6b4e8ba5e57c5dcf2dd770c24e14c43eda42fdd7",
      "parents": [
        "25ba5b6564224dceefa086b5c439ef28dad530ca"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 19 19:08:10 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 20 12:55:03 2009 -0700"
      },
      "message": "move libbinder\u0027s header files under includes/binder\n"
    },
    {
      "commit": "4e829f0aca3db3a1a01999eb7910cf58b9c11058",
      "tree": "adf5afeaa8d09cb8dc35dc73ae9b6eed0ef8308b",
      "parents": [
        "95518a712c48c7718eab6301cf348a7e0f1c46d3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "",
        "time": "Wed Mar 25 16:21:55 2009 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Mar 25 16:21:55 2009 -0700"
      },
      "message": "Automated import from //branches/master/...@142771,142771\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": "d24b8183b93e781080b2c16c487e60d51c12da31",
      "tree": "fbb89154858984eb8e41556da7e9433040d55cd4",
      "parents": [
        "f1e484acb594a726fb57ad0ae4cfe902c7f35858"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@130745\n"
    },
    {
      "commit": "9266c558bf1d21ff647525ff99f7dadbca417309",
      "tree": "1630b1ba80f4793caf39d865528e662bdb1037fe",
      "parents": [
        "b798689749c64baba81f02e10cf2157c747d6b46"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:10 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:10 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@126645\n"
    },
    {
      "commit": "f013e1afd1e68af5e3b868c26a653bbfb39538f8",
      "tree": "7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf",
      "parents": [
        "e70cfafe580c6f2994c4827cd8a534aabf3eb05c"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\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"
    }
  ]
}
