)]}'
{
  "log": [
    {
      "commit": "33c5903e7759b0594b1e0a062b066945a2c86989",
      "tree": "fb992fafc36f0e3d4c3baeb79e68594ae0b4d9e7",
      "parents": [
        "fd97e7bc8cac91d849bf40202870c2220fc04f7a"
      ],
      "author": {
        "name": "Vladislav Kaznacheev",
        "email": "kaznacheev@google.com",
        "time": "Fri Sep 09 10:03:31 2016 -0700"
      },
      "committer": {
        "name": "Vladislav Kaznacheev",
        "email": "kaznacheev@google.com",
        "time": "Fri Sep 09 10:03:31 2016 -0700"
      },
      "message": "Hold a weak reference to PointerController when handling vsync\n\nCurrently PointerController starts listening to display events\nimmediately (in its constructor) and never explicitly removes\nthe callback. The reference dangling from the looper\nprevents the PointerController instance from being deleted\nwhen all the clients have released their references.\n\nAs a result, when USB or BT mouse is disconnected,\nthe mouse stays frozen on screen and only goes away\nafter a 15 sec inactivity timeout.\n\nThis change introduces an intermediary LooperCallback\nwhich holds only a weak reference to PointerController.\nThe pointer now disappears immediately upon mouse\ndisconnect.\n\nBug: 30824220\nChange-Id: I5f7208dbfa381b3e21f248cc0da402f307faa184\n"
    },
    {
      "commit": "778e3b91acad6da04341d439f0c66a4fd09def4f",
      "tree": "2c01c845476a9362e81725f3bd657ea50f8a1162",
      "parents": [
        "f9d9ce7705475874c82af04eb9b208a7fb556792"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon May 16 15:21:03 2016 +0100"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Tue May 17 18:02:37 2016 +0100"
      },
      "message": "DO NOT MERGE Remove Pointer Capture API\n\nThe underlying implementation needs to be completely rethought. If a\nprocess crashed while you were in pointer capture mode, you were\npretty much stuck in it. If the mouse happened to move outside of\nyour bounds right before you called the API, you\u0027d never actually get\nan event (whatever it was hovering over would). There\u0027s no easy way\nfor the system to tell you when you enter or exit this mode because\nit doesn\u0027t actually track who the current request is from.\n\nThese are all solvable, but not in the N time frame. Maybe next time.\n\nBug: 26830970\nChange-Id: I03efd63c499b86dc278491ca3284566c1965581f\n"
    },
    {
      "commit": "f9d9ce7705475874c82af04eb9b208a7fb556792",
      "tree": "a8f7403f319741c752426d917b043ce0f554b614",
      "parents": [
        "cef3337cb5e27d4f571fb350be055c26d339833d"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri May 13 17:44:16 2016 +0100"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Tue May 17 18:02:32 2016 +0100"
      },
      "message": "DO NOT MERGE Rename PointerIcon and Pointer Capture APIs\n\nThis is a response to API council feedback.\n\nBug: 26830970\nChange-Id: Ia2d284b5c1ab8365bedfdc37d129be4b8146036b\n"
    },
    {
      "commit": "347e5d498f4c216d588e98776a386d8bdf93d05c",
      "tree": "8f9b85983dcee4deeefc7fcbaa64124b6ea176f8",
      "parents": [
        "92e432c30e2304272c2f5b1b33366f32c3d763cf"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Thu Dec 03 01:13:31 2015 -0800"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Fri Dec 18 10:22:43 2015 -0800"
      },
      "message": "Introduce pointer capture API.\n\nThis depends on I4189eb4d93f50c2865b7a325727be5ceebcc71f8 of\nframeworks/native.\n\nBug: 5452473\nChange-Id: Ie21e521f3e5c581f976dc0feb5d84bfa48b046cd\n"
    },
    {
      "commit": "d4eaef7f4c5a5d281de4fff272cd33e892e26264",
      "tree": "7141708f5759a078b74932d487dc8fe83c29887f",
      "parents": [
        "40aa9f1b989a7896fb683a5a7dd664aa3174012d"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Fri Oct 30 15:54:33 2015 -0700"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Mon Dec 14 19:45:10 2015 -0800"
      },
      "message": "Make public pointer icon API with custom icons.\n\nBUG: 25778347, 23804184\nChange-Id: If138b97c750c912e9848412c27b65004899961eb\n"
    },
    {
      "commit": "19a560197950425f7e1856d5bd1216fbc680bf70",
      "tree": "c5eed0b4dab09ad562f41a13d61743b4a7a7be18",
      "parents": [
        "28860b7570d2b3e7bc6a136a7bb7312e5aaf6e61"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Tue Nov 24 11:25:52 2015 -0800"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Mon Nov 30 14:42:53 2015 -0800"
      },
      "message": "Introduce accessibility large pointer icons.\n\nThis patch does the following things:\n- add new graphic assets of large icons for accessibility needs\n  (imported from ChromeOS data)\n- add the logic to choose the set of normal icons or accessibility icons\n- make InputManagerService to observe the settings change, so that\n  it can reload the new resources\n\nThis patch misses non-1x graphic though, because ChromeOS doesn\u0027t\nhave such data.\n\nBug: 25778857\nChange-Id: Ia5f95d47f50b3f6eea555c3af8069bc6bae0b400\n"
    },
    {
      "commit": "808196f139e93395f1f331f6c7e92ddd66c05979",
      "tree": "d49536f01f2148eb381101f7883abaffedf9fff7",
      "parents": [
        "ff814adfdda376ceeeff5765cd50195b88e567ad"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Wed Oct 28 16:46:44 2015 -0700"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Tue Nov 17 17:36:08 2015 -0800"
      },
      "message": "Introduce animated pointer icon for STYLE_WAIT.\n\nChange-Id: I893f8276e09351db6187c553f349008794b95690\n"
    },
    {
      "commit": "c0c0ac37abe6f0b1ab780765b4a48beada7d3444",
      "tree": "40cb4eb99cc3108f3b2f0aa5e51a37170e18993e",
      "parents": [
        "f789ef7e381ea57a4f515fde470d40f93bc5f345"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Tue Oct 27 10:09:21 2015 -0700"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Fri Oct 30 10:24:55 2015 -0700"
      },
      "message": "Bring DisplayEventReceiver to PointerController.\n\nNow the fading animation of pointers is handled at vsync.\n\nChange-Id: I10fe27d9d7a0d46c4e6504ca487e80bb56e2fd98\n"
    },
    {
      "commit": "5ec7420ecd0e94be0a07fc77b0bc950deb0178fd",
      "tree": "71eff50268fe0f4e860458a43ed6b6cc87d2032d",
      "parents": [
        "3a36f0a3ab7af0fde7267c70c4866c145b23aeb3"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Wed Oct 07 16:58:09 2015 +0900"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Wed Oct 21 13:03:01 2015 -0700"
      },
      "message": "Use invisible icon for POINTER_ICON_STYLE_NULL.\n\nChange-Id: I10d35bdc4da4817d769eb164e6f15e4618670a05\n"
    },
    {
      "commit": "1db5397d88e722b1ab82ccb2b429ceec1179ccd8",
      "tree": "016fcb17678d0e555626c318956e11f7a99b9843",
      "parents": [
        "0a5e256d9fd56607ab4bbd987268fbfa3fe935fe"
      ],
      "author": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Fri Sep 11 18:08:31 2015 -0700"
      },
      "committer": {
        "name": "Jun Mukai",
        "email": "mukai@google.com",
        "time": "Thu Oct 15 01:47:29 2015 -0700"
      },
      "message": "Allow changing mouse pointer icon for the current context.\n\nRight now, it only supports I-beam on EditText, but further\nrules will come in the future.\n\nThe png files for the icons are from chromium.\n\nBug: 24180385\nChange-Id: I8de4ec8a5412b4830c08aa232c5083841c5c751c\n"
    },
    {
      "commit": "6b83b76dd18e2a727936839b397e6ed2ed4f5a46",
      "tree": "a39292b12b28be4287c4b3cfe3a24514df2096b1",
      "parents": [
        "487ae9b8dc3e08c1a830d519a801a07cd59c8f2b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 10 15:55:11 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 10 15:55:11 2014 -0800"
      },
      "message": "Frameworks/base: Wall Werror in libs/input\n\nEnable -Wall -Werror in libs/input. Mask warnings from Skia.\n\nChange-Id: I0deeffde07fcf3a09eadec2852e9bf5666b55ee8\n"
    },
    {
      "commit": "9158825f9c41869689d6b1786d7c7aa8bdd524ce",
      "tree": "f41944461539f0c70030668b4558296469c307d3",
      "parents": [
        "30d032928a294fbb6f385e9d0367a75b7bf2649b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Nov 22 08:25:26 2013 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Dec 19 15:25:37 2013 -0800"
      },
      "message": "Move some system services to separate directories\n\nRefactored the directory structure so that services can be optionally\nexcluded. This is step 1. Will be followed by another change that makes\nit possible to remove services from the build.\n\nChange-Id: Ideacedfd34b5e213217ad3ff4ebb21c4a8e73f85\n"
    },
    {
      "commit": "d728bf514f257670fcb9aa22c6eaf97626072c93",
      "tree": "dedf4c8771ab1e1b618ea0d75e5f8328b0bfe83a",
      "parents": [
        "631938f26dbc89e7e9530bb85d9f37706dba59f3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Sep 08 18:05:28 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sat Sep 08 18:12:57 2012 -0700"
      },
      "message": "Make display manager tell input system about viewports.\n\nThe window manager is no longer responsible for telling the\ninput system about the display viewport.\n\nChange-Id: I932882bae55decef55f25093bb2a7ebac1620bb1\n"
    },
    {
      "commit": "5baa3a62a97544669fba6d65a11c07f252e654dd",
      "tree": "109755e1595b438873d34b981e31f84ea64bd2a5",
      "parents": [
        "173ab4d61077c49f115b82eff34f97fda5a7273a"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "be1aa8250cee7819c49741e819e81659d1d03823",
      "tree": "3041a44459110da304f930b1a3ebcbd042291999",
      "parents": [
        "ad65b46d5f6c569b588556dcf85b64d59600b175"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 27 16:04:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jul 31 15:38:09 2011 -0700"
      },
      "message": "Refactor input reader to add stylus support.\nBug: 5064702\n\nIntroduced the concept of an InputListener to further decouple\nthe InputReader from the InputDispatcher.  The InputListener\nexposes just the minimum interface that the InputReader needs\nto communicate with the outside world.  The InputReader\npasses arguments to the InputListener by reference, which makes\nit easy to queue them up.\n\nConsolidated all of the InputReader locks into one simple global\nMutex.  The reason this wasn\u0027t done before was due to potential\nre-entrance in outbound calls to the InputDispatcher.  To fix this,\nthe InputReader now queues up all of the events it wants to send\nusing a QueuedInputListener, then flushes them outside of the\ncritical section after all of the event processing is finished.\nRemoving all of the InputMapper locks greatly simplifies the\nimplementation.\n\nAdded tests for new stylus features such as buttons, tool types,\nand hovering.\n\nAdded some helpers to BitSet32 to handle common code patterns\nlike finding the first marked bit and clearing it.\n\nFixed a bug in VelocityTracker where the wrong pointer trace\ncould get cleared when handling ACTION_POINTER_DOWN.  Oops.\n\nChanged PointerCoords so it no longer stores useless zero\naxis values.  Removed editAxisValue because it is not very\nuseful when all zero value axes are absent and therefore\ncannot be edited in place.\n\nAdded dispatch of stylus hover events.\n\nAdded support for distance and tool types.\n\nChange-Id: I4cf14d134fcb1db7d10be5f2af7b37deef8f8468\n"
    },
    {
      "commit": "051e8f2bfa3ada8ee64d8a4f4d69ad9286209516",
      "tree": "5bf5b2e3d168fa9a8e490edc1c64f667920b3b30",
      "parents": [
        "774ed9d9537c15482e8baca2f2890c5d2f4ffe75",
        "55cc25c12c45e8ffb65d2275cc0b6941b68db9df"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue Jun 07 17:52:22 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 07 17:52:22 2011 -0700"
      },
      "message": "am 55cc25c1: am 797dc698: am b92dcf9c: Merge \"Simplify spot tracking logic. Bug: 4124987\" into honeycomb-mr2\n\n* commit \u002755cc25c12c45e8ffb65d2275cc0b6941b68db9df\u0027:\n  Simplify spot tracking logic. Bug: 4124987\n"
    },
    {
      "commit": "cb5ffcf0e41d2597401208221c61589547a00f3d",
      "tree": "b418a886481f1c5fb0b392c016c1a38cd0f6ce7b",
      "parents": [
        "bb3fcba0caf697f1d238a2cbefdf1efe06eded99"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:03:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon Jun 06 20:06:19 2011 -0700"
      },
      "message": "Simplify spot tracking logic.\nBug: 4124987\n\nSince spots are now one-to-one with the touch gesture points,\nwe can eliminate a lot of redundant logic that assumed they weren\u0027t.\n\nChange-Id: Ic60d8d0898c285317f480bc8fb17fb9797770e69\n"
    },
    {
      "commit": "b530abcff5ae8e5ebb75ec6aa42b7c7c190e98a5",
      "tree": "f5386df4f29aea3a8ef67ee92283590aa3cc6829",
      "parents": [
        "e129509422a17733bf286c8b0c5af28f9cd1643b",
        "3f5b95b05efcf7ab2e8f193649b841dc1786f2ef"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Tue May 31 16:03:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 31 16:03:07 2011 -0700"
      },
      "message": "am 3f5b95b0: am a4e74744: am fa574c0e: Merge \"Touch pad UX improvements.\" into honeycomb-mr2\n\n* commit \u00273f5b95b05efcf7ab2e8f193649b841dc1786f2ef\u0027:\n  Touch pad UX improvements.\n"
    },
    {
      "commit": "538881e18323a0c983bd8809f8c3b1cdeeeab8a6",
      "tree": "da646d2cb739b3eb72ee78360b062ccda762dc07",
      "parents": [
        "2cb7981e70dd1d4e4368dbef8797d336e0797b61"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 18:23:38 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 19:08:49 2011 -0700"
      },
      "message": "Touch pad UX improvements.\n\nFade the pointer spot when swiping or performing a freeform\ngesture.\n\nSupport configuring the gesture mode in the device IDC file.\n\nAdded workaround for devices that report individual finger\nmovements one at a time instead of all at once.\n\nBug: 4124987\nChange-Id: I44628b00382ad59306e4ec5c4717d69cc6fbebb8\n"
    },
    {
      "commit": "86ea1f5f521981d075aef56f11693e4f3bc32fdb",
      "tree": "72e1e44513d3e9e204a4fbd2855a079822e949eb",
      "parents": [
        "a6dbfdd3a858aac52cc87f80f91e8eef7d613605"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:17 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: Ib647dbd7a57a7f30dd9c6e2c260df51d7bbdd18e\n"
    },
    {
      "commit": "a6dbfdd3a858aac52cc87f80f91e8eef7d613605",
      "tree": "2807e5662e74b090e880588f39cdc1caf4e01e0e",
      "parents": [
        "5ced76a14350db56f1a80f00076f8be3d982c389"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 11:54:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:16 2011 -0700"
      },
      "message": "Add a sprite controller. (DO NOT MERGE)\n\nRefactored PointerController to extract the surface management\ncode to a new component called a SpriteController so that it can\nbe used to move finger tracking spots around the screen as well.\nThe SpriteController is designed to fully decouple the client from\nany latency introduced by surface transactions and drawing.\nAll sprite updates are performed asynchronously on the Looper using\na copy of the sprite state.\n\nAdded a stub SpotController implementation for touch pad UX.\nIt will be implemented in a subsequent patch.\n\nFixed a little bug in pointer orientation changes when entering\nDISPLAY_ORIENTATION_90 the x offset was clobbered.\n\nChange-Id: I6d59d80df9af61e93af50290e7776337d10c9d5a\n"
    },
    {
      "commit": "fe9f8ab03a63b1037f07dd85799fbea80ec6adaa",
      "tree": "c0cfa91d0537321eeee0ede693fb414d8778a1a2",
      "parents": [
        "1abf1c59f8b15d5b4b198063b884e268bd79fb32"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 06 18:20:01 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri May 13 12:11:17 2011 -0700"
      },
      "message": "Add initial API for stylus and mouse buttons.\n\nAdded the concept of pointer properties in a MotionEvent.\nThis is currently used to track the pointer tool type to enable\napplications to distinguish finger touches from a stylus.\n\nButton states are also reported to application as part of touch events.\n\nThere are no new actions for detecting changes in button states.\nThe application should instead query the button state from the\nMotionEvent and take appropriate action as needed.\n\nA good time to check the button state is on ACTION_DOWN.\n\nAs a side-effect, applications that do not support multiple buttons\nwill treat primary, secondary and tertiary buttons identically\nfor all touch events.\n\nThe back button on the mouse is mapped to KEYCODE_BACK\nand the forward button is mapped to KEYCODE_FORWARD.\n\nAdded basic plumbing for the secondary mouse button to invoke\nthe context menu, particularly in lists.\n\nAdded clamp and split methods on MotionEvent to take care of\ncommon filtering operations so we don\u0027t have them scattered\nin multiple places across the framework.\n\nBug: 4260011\nChange-Id: Ie992b4d4e00c8f2e76b961da0a902145b27f6d83\n"
    },
    {
      "commit": "2352b978a3c94cd88f41d0d908f961333fdac1e9",
      "tree": "24f8f19e9b2895cc2c3489bf2dd7a09aaf5834db",
      "parents": [
        "f76dc56c33ba66138af70d72803cf55f881c3717"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 15:35:51 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures.\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: I5126b1e69d95252fda7f2a684c9287e239a57163\n"
    },
    {
      "commit": "5541de9ea3513a12d1ac2ad07e7e04a3aa7741a0",
      "tree": "3ac3cd85bf588df25aed0a0df29e70629a096547",
      "parents": [
        "5008e92d1fd573d926cd55c39ca723a6fbdf7c4b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 11:54:25 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Apr 11 14:08:29 2011 -0700"
      },
      "message": "Add a sprite controller.\n\nRefactored PointerController to extract the surface management\ncode to a new component called a SpriteController so that it can\nbe used to move finger tracking spots around the screen as well.\nThe SpriteController is designed to fully decouple the client from\nany latency introduced by surface transactions and drawing.\nAll sprite updates are performed asynchronously on the Looper using\na copy of the sprite state.\n\nAdded a stub SpotController implementation for touch pad UX.\nIt will be implemented in a subsequent patch.\n\nFixed a little bug in pointer orientation changes when entering\nDISPLAY_ORIENTATION_90 the x offset was clobbered.\n\nChange-Id: Ib25d162d577c9b354cb74d5d761c3c9f9f438d42\n"
    },
    {
      "commit": "9626b14a283ef82d16636cf5fb5ba8bb4d30381e",
      "tree": "ad6e1a8c87412308cff13d5a727b179ab301dfee",
      "parents": [
        "924c4d47774fa7d8a5ce659d12291ef7df82ee05"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 03 02:09:54 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 02:46:45 2011 -0800"
      },
      "message": "Fix off by one errors in touch motion ranges.  (DO NOT MERGE)\n\nReport inclusive minimum and maximum ranges for all\naxes including X and Y.\n\nSet mouse pointer bounds to 0..width-1, 0..height-1.\n\nRotate touch and mouse positions more carefully, paying attention\nto the maximum bounds when calculating the complement of an axis.\n\nSimplified the InputReader somewhat and removed support for a\ncouple of poorly defined input device configuration parameters.\nWe now assume that the touch device provides useful absolute axis\nranges for the X and Y axes since the alternative does not actually\nmake sense.\n\nBug: 3413541\nChange-Id: I121d28a125c4f9618cb283dc460d33ff1a907023\n"
    },
    {
      "commit": "d41cff2d3a95963a7aa348e502c6d42bae367235",
      "tree": "cd4a20f95dd1dfe6a2b9daeea128de658f39a987",
      "parents": [
        "9225b00a3dc45bdbcfb6adafa4dbbc0cbe9be864"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 03 02:09:54 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 03 02:28:51 2011 -0800"
      },
      "message": "Fix off by one errors in touch motion ranges.\n\nReport inclusive minimum and maximum ranges for all\naxes including X and Y.\n\nSet mouse pointer bounds to 0..width-1, 0..height-1.\n\nRotate touch and mouse positions more carefully, paying attention\nto the maximum bounds when calculating the complement of an axis.\n\nSimplified the InputReader somewhat and removed support for a\ncouple of poorly defined input device configuration parameters.\nWe now assume that the touch device provides useful absolute axis\nranges for the X and Y axes since the alternative does not actually\nmake sense.\n\nBug: 3413541\nChange-Id: I682ce3729e4473de7f1bcf8addb49a3f4484126f\n"
    },
    {
      "commit": "05dc66ada6b61a6bdf806ffaa62617ac5394695d",
      "tree": "a7e395476241706de31498185a5c2ccb979bcb54",
      "parents": [
        "e43111fad31ad8e36a66df52a8c6002799996413"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 14:41:58 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 15:37:57 2011 -0800"
      },
      "message": "Fade out the mouse pointer after inactivity or other events.\n\nFades out the mouse pointer:\n- after 15 seconds of inactivity normally\n- after 3 seconds of inactivity in lights out mode\n- after a non-modifier key down\n- after a touch down\n\nExtended the native Looper to support enqueuing time delayed\nmessages.  This is used by the PointerController to control\npointer fade timing.\n\nChange-Id: I87792fea7dbe2d9376c78cf354fe3189a484d9da\n"
    },
    {
      "commit": "f5a2ff6f2e5c5ba9dc7ab16f3b7f8f05daf3c159",
      "tree": "befb8dba3a0617a4d18d935f6fdfda13a863b2cd",
      "parents": [
        "c10803924e45e9a607b3c5bb74316c0a84d78cd8"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 17 16:01:34 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jan 17 16:15:15 2011 -0800"
      },
      "message": "Mouse pointer tweaks.\n\nMake pointer arrow brighter.\nDeep copy the pointer icon bitmap since it turns out that the\noriginal shared pixels can be deleted by other code.\n\nChange-Id: I77fbf61d1dace723f3c8c9808941e9e31d8db352\n"
    },
    {
      "commit": "b4ff35df5c04aec71fce7e90a6d6f9ef7180c2ad",
      "tree": "e4473f1b22e3051a8f82239256148820d4e097d5",
      "parents": [
        "a5af5d6b122b5d7337e6640deabf7886689679eb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jan 02 16:37:43 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jan 04 17:31:24 2011 -0800"
      },
      "message": "Mouse pointer integration.\n\nAdded support for loading the pointer icon from a resource.\n\nMoved the system server related bits of the input manager out\nof libui and into libinput since they do not need to be linked into\napplications.\n\nChange-Id: Iec11e0725b3add2b905c51f8ea2c3b4b0d1a2d67\n"
    }
  ]
}
