)]}'
{
  "log": [
    {
      "commit": "1e3b98d47df596d0c4eadbdf60143709f8465b28",
      "tree": "ed63fa39f6d2db3b3a3fd9caf61174129198c6cc",
      "parents": [
        "1f7a09b5df9f859781d9cfa0053fad44c72c2168"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 30 18:58:59 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Oct 01 14:27:34 2012 -0700"
      },
      "message": "New internal API to eliminate poke locks.\n\nAdded a new WindowManager.LayoutParams inputFeatures flag\nto disable automatic user activity behavior when an input\nevent is sent to a window.\n\nAdded a new WindowManager.LayoutParams field userActivityTimeout.\n\nBug: 7165399\nChange-Id: I204eafa37ef26aacc2c52a1ba1ecce1eebb0e0d9\n"
    },
    {
      "commit": "edce6a797878792de2b0bde4360f3171b9e9d9d2",
      "tree": "4ff5110f64b5f48ec341bdb31330b02686936c5c",
      "parents": [
        "933a7546c857dba7704a15b7f7f7847934f14912"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 30 15:52:02 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 30 16:23:05 2012 -0700"
      },
      "message": "Remove clearUserActivityTimeout().\n\nThis function is not implemented and not needed.\n\nBug: 7165399\nChange-Id: Ib1c50fabad6292ccf670404ba70aeb1242c4614d\n"
    },
    {
      "commit": "120664816a9bf325b618d8dd40febae2e3636ec8",
      "tree": "8a7b681cd87903f806b49504442d42a6921f1579",
      "parents": [
        "29dcd656dfa4c22855b12fb6ee7d6e2e4c4844c1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 28 18:21:36 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 28 18:21:36 2012 -0700"
      },
      "message": "Get rid of preventScreenOn().\n\nBug: 7165399\nChange-Id: I1968265ecd74fff4d85efd2ca03b1983425ea518\n"
    },
    {
      "commit": "62c82e4d92cc0b856059f905d81885f7808a0e7d",
      "tree": "74203a2312cd0c51235e4686f2162811aebea1e5",
      "parents": [
        "cef440f2a2bb8b6e8d082d12a67dc21f2ee65e3c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 26 01:30:41 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 26 15:24:27 2012 -0700"
      },
      "message": "Make DreamManagerService more robust.\n\nClearly isolated the DreamManagerService and DreamController\nresponsibilities.  DreamManagerService contains just enough logic to\nmanage the global synchronous behaviors.  All of the asynchronous\nbehaviors are in DreamController.\n\nAdded a new PowerManager function called nap() to request the device\nto start napping.  If it is a good time to nap, then the\nPowerManagerService will call startDream() on the DreamManagerService\nto start dreaming.\n\nFixed a possible multi-user issue by explicitly tracking for\nwhich user a dream service is being started and stopping dreams\nwhen the current user changes.  The user id is also passed to\nbindService() to ensure that the dream has the right environment.\n\nFix interactions with docks and the UI mode manager.  It is\nimportant that we always send the ACTION_DOCK_EVENT broadcast\nto the system so that it can configure audio routing and the like.\nWhen docked, the UI mode manager starts a dock app if there is\none, otherwise it starts a dream.\n\nThis change resolves issues with dreams started for reasons other\nthan a user activity timeout.\n\nBug: 7204211\nChange-Id: I3193cc8190982c0836319176fa2e9c4dcad9c01f\n"
    },
    {
      "commit": "6d51571835737c7502a2e111ee9dc2527ebad984",
      "tree": "8298f3a36bdfbdb95a4fdd52681f82e7f396d31b",
      "parents": [
        "08681adda06f4699f85838861170fbb062c9fdfe"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 20 16:06:08 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Sep 21 19:49:43 2012 -0700"
      },
      "message": "Allow acquiring ContentProviders across users.\n\nOtherwise services like SystemUI will always open content://-style\nUris as USER_OWNER.  Surfaces through createPackageContextAsUser()\nwhich points all ContentResolver operations towards a given user.\n\nStart using in RemoteViews, so that Notifications correctly resolve\nimage Uris to the sending user.  Also add user support for \"content\"\nshell tool.\n\nBug: 7202982\nChange-Id: I8cb7fb8a812e825bb0b5833799dba87055ff8699\n"
    },
    {
      "commit": "9d9ece3c1e16001b63244459cdf4b428f4272d2e",
      "tree": "55fd2ecdeaaa791af1d21083482367d5b4d75d76",
      "parents": [
        "ce3ef0abaa17b12dc0626b06421d58bf06974ae2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 10 15:33:52 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 10 19:58:21 2012 -0700"
      },
      "message": "Animations for user switching.\n\nThe window manager now has a facility to provide a full-screen\nanimation, which the activity manager uses every time a user\nswitch happens.\n\nThe current animation is just a simple dumb slide until we get\na design from UX.\n\nAlso some cleanup: moved the portrait task animations to the\ndefault config so we always have an animation for them, and finally\ngot the java symbol stuff out of public.xml.\n\nChange-Id: I726f77422b2ef5f2d98f961f8da003e045f0ebe8\n"
    },
    {
      "commit": "4b15ab66a064ba4fae3bb1ff474d8b5fc38e5490",
      "tree": "3e2ed5cd1404542b4ee79b5785a86e9fbac5b96d",
      "parents": [
        "f92b57ca8beb231e06a792db88ef3a4605901a7d"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Sep 06 19:25:53 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Sep 06 19:30:14 2012 -0700"
      },
      "message": "Fixing the build\n\nChange-Id: I123b128f5d9e50653d8d4ed73ea07920b370b0fb\n"
    },
    {
      "commit": "1cf70bbf96930662cab0e699d70b62865766ff52",
      "tree": "2173762d4e4d7be76f5691cebd74e1bd8f2b8543",
      "parents": [
        "fa8d83d90444354e8eca6ca0e080bc917e5a1f32"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Aug 06 10:53:34 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Sep 06 18:56:17 2012 -0700"
      },
      "message": "Screen magnification - feature - framework.\n\nThis change is the initial check in of the screen magnification\nfeature. This feature enables magnification of the screen via\nglobal gestures (assuming it has been enabled from settings)\nto allow a low vision user to efficiently use an Android device.\n\nInteraction model:\n\n1. Triple tap toggles permanent screen magnification which is magnifying\n   the area around the location of the triple tap. One can think of the\n   location of the triple tap as the center of the magnified viewport.\n   For example, a triple tap when not magnified would magnify the screen\n   and leave it in a magnified state. A triple tapping when magnified would\n   clear magnification and leave the screen in a not magnified state.\n\n2. Triple tap and hold would magnify the screen if not magnified and enable\n   viewport dragging mode until the finger goes up. One can think of this\n   mode as a way to move the magnified viewport since the area around the\n   moving finger will be magnified to fit the screen. For example, if the\n   screen was not magnified and the user triple taps and holds the screen\n   would magnify and the viewport will follow the user\u0027s finger. When the\n   finger goes up the screen will clear zoom out. If the same user interaction\n   is performed when the screen is magnified, the viewport movement will\n   be the same but when the finger goes up the screen will stay magnified.\n   In other words, the initial magnified state is sticky.\n\n3. Pinching with any number of additional fingers when viewport dragging\n   is enabled, i.e. the user triple tapped and holds, would adjust the\n   magnification scale which will become the current default magnification\n   scale. The next time the user magnifies the same magnification scale\n   would be used.\n\n4. When in a permanent magnified state the user can use two or more fingers\n   to pan the viewport. Note that in this mode the content is panned as\n   opposed to the viewport dragging mode in which the viewport is moved.\n\n5. When in a permanent magnified state the user can use three or more\n   fingers to change the magnification scale which will become the current\n   default magnification scale. The next time the user magnifies the same\n   magnification scale would be used.\n\n6. The magnification scale will be persisted in settings and in the cloud.\n\nNote: Since two fingers are used to pan the content in a permanently magnified\n   state no other two finger gestures in touch exploration or applications\n   will work unless the uses zooms out to normal state where all gestures\n   works as expected. This is an intentional tradeoff to allow efficient\n   panning since in a permanently magnified state this would be the dominant\n   action to be performed.\n\nDesign:\n\n1. The window manager exposes APIs for setting accessibility transformation\n   which is a scale and offsets for X and Y axis. The window manager queries\n   the window policy for which windows will not be magnified. For example,\n   the IME windows and the navigation bar are not magnified including windows\n   that are attached to them.\n\n2. The accessibility features such a screen magnification and touch\n   exploration are now impemented as a sequence of transformations on the\n   event stream. The accessibility manager service may request each\n   of these features or both. The behavior of the features is not changed\n   based on the fact that another one is enabled.\n\n3. The screen magnifier keeps a viewport of the content that is magnified\n   which is surrounded by a glow in a magnified state. Interactions outside\n   of the viewport are delegated directly to the application without\n   interpretation. For example, a triple tap on the letter \u0027a\u0027 of the IME\n   would type three letters instead of toggling magnified state. The viewport\n   is updated on screen rotation and on window transitions. For example,\n   when the IME pops up the viewport shrinks.\n\n4. The glow around the viewport is implemented as a special type of window\n   that does not take input focus, cannot be touched, is laid out in the\n   screen coordiates with width and height matching these of the screen.\n   When the magnified region changes the root view of the window draws the\n   hightlight but the size of the window does not change - unless a rotation\n   happens. All changes in the viewport size or showing or hiding it are\n   animated.\n\n5. The viewport is encapsulated in a class that knows how to show,\n   hide, and resize the viewport - potentially animating that.\n   This class uses the new animation framework for animations.\n\n6. The magnification is handled by a magnification controller that\n   keeps track of the current trnasformation to be applied to the screen\n   content and the desired such. If these two are not the same it is\n   responsibility of the magnification controller to reconcile them by\n   potentially animating the transition from one to the other.\n\n7. A dipslay content observer wathces for winodw transitions, screen\n   rotations, and when a rectange on the screen has been reqeusted. This\n   class is responsible for handling interesting state changes such\n   as changing the viewport bounds on IME pop up or screen rotation,\n   panning the content to make a requested rectangle visible on the\n   screen, etc.\n\n8. To implement viewport updates the window manger was updated with APIs\n   to watch for window transitions and when a rectangle has been requested\n   on the screen. These APIs are protected by a signature level permission.\n   Also a parcelable and poolable window info class has been added with\n   APIs for getting the window info given the window token. This enables\n   getting some useful information about a window. There APIs are also\n   signature protected.\n\nbug:6795382\n\nChange-Id: Iec93da8bf6376beebbd4f5167ab7723dc7d9bd00\n"
    },
    {
      "commit": "5eb51defe39f765d6ebe868dba7f187f7dd990f6",
      "tree": "b9ac2e0fcfa5e65d3558236751ff8018b467232f",
      "parents": [
        "34a75df63533914bbca95a82d2c89ca374b2645d"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Sep 04 13:59:17 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Sep 04 15:00:52 2012 -0700"
      },
      "message": "Add some new native deletage to layoutlib.\n\nChange-Id: Ib53df6c944ecd9680bf929afe03b08bcaa61ad70\n"
    },
    {
      "commit": "20e809870d8ac1e5b848f2daf51b2272ef89bdfc",
      "tree": "c863b6c684d1d3b21752880bc9f52bd749545d01",
      "parents": [
        "2701f325a6d4acd920637d2ff6fd6972a9cf836b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 31 19:00:44 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 10:39:21 2012 -0700"
      },
      "message": "Add registering for explicit users.\n\nNew API to register as an explicit user, which allows you to\nalso select ALL to see broadcasts for all users.\n\nNew BroadcastReceiver API to find out which user the broadcast\nwas sent to.\n\nUse this in app widget service to handle per-user package broadcasts\nand boot completed broadcasts correctly.\n\nChange-Id: Ibbe28993bd4aa93900c79e412026c27863019eb8\n"
    },
    {
      "commit": "a492c3a7b2c18426fd0cb4d017eacbc368195dc5",
      "tree": "67744a8d91519d997cb761a697600041d74165fa",
      "parents": [
        "00453e7a0182b50cf01e65c97650b526284fe084"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Aug 23 19:48:44 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 31 15:42:45 2012 -0700"
      },
      "message": "Initial draft of high-level multi-display APIs.\n\nThis patch introduces the ability to create a Context that\nis bound to a Display.  The context gets its configuration and\nmetrics from that display and is able to provide a WindowManager\nthat is bound to the display.\n\nTo make it easier to use, we also add a new kind of Dialog\ncalled a Presentation.  Presentation takes care of setting\nup the context as needed and watches for significant changes\nin the display configuration.  If the display is removed,\nthen the presentation simply dismisses itself.\n\nChange-Id: Idc54b4ec84b1ff91505cfb78910cf8cd09696d7d\n"
    },
    {
      "commit": "5ac72a29593ab9a20337a2225df52bdf4754be02",
      "tree": "dc5310e556b3662cb5f097b30e700a26d50a4db5",
      "parents": [
        "e217ee4d7a8223289a1af7363627c69956c46d41"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 29 18:32:08 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 30 14:33:22 2012 -0700"
      },
      "message": "Improve multi-user broadcasts.\n\nYou can now use ALL and CURRENT when sending broadcasts, to specify\nwhere the broadcast goes.\n\nSticky broadcasts are now correctly separated per user, and registered\nreceivers are filtered based on the requested target user.\n\nNew Context APIs for more kinds of sending broadcasts as users.\n\nUpdating a bunch of system code that sends broadcasts to explicitly\nspecify which user the broadcast goes to.\n\nMade a single version of the code for interpreting the requested\ntarget user ID that all entries to activity manager (start activity,\nsend broadcast, start service) use.\n\nChange-Id: Ie29f02dd5242ef8c8fa56c54593a315cd2574e1c\n"
    },
    {
      "commit": "7767eac3232ba2fb9828766813cdb481d6a97584",
      "tree": "41cc717fb9f11190e9da3dc12d61faf23a22861d",
      "parents": [
        "1552586283f329253edc4786a6cf40c5bb69ea36"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 23 18:25:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 24 13:53:13 2012 -0700"
      },
      "message": "Keep track of whether an app is installed for each user.\n\nThis add a new per-user state for an app, indicating whether\nit is installed for that user.\n\nAll system apps are always installed for all users (we still\nuse disable to \"uninstall\" them).\n\nNow when you call into the package manager to install an app,\nit will only install the app for that user unless you supply\na flag saying to install for all users.  Only being installed\nfor the user is just the normal install state, but all other\nusers have marked in their state for that app that it is not\ninstalled.\n\nWhen you call the package manager APIs for information about\napps, uninstalled apps are treated as really being not visible\n(somewhat more-so than disabled apps), unless you use the\nGET_UNINSTALLED_PACKAGES flag.\n\nIf another user calls to install an app that is already installed,\njust not for them, then the normal install process takes place\nbut in addition that user\u0027s installed state is toggled on.\n\nThe package manager will not send PACKAGE_ADDED, PACKAGE_REMOVED,\nPACKAGE_REPLACED etc broadcasts to users who don\u0027t have a package\ninstalled or not being involved in a change in the install state.\nThere are a few things that are not quite right with this -- for\nexample if you go through a full install (with a new apk) of an\napp for one user who doesn\u0027t have it already installed, you will\nstill get the PACKAGED_REPLACED messages even though this is\ntechnically the first install for your user.  I\u0027m not sure how\nmuch of an issue this is.\n\nWhen you call the existing API to uninstall an app, this toggles\nthe installed state of the app for that user to be off.  Only if\nthat is the last user user that has the app uinstalled will it\nactually be removed from the device.  Again there is a new flag\nyou can pass in to force the app to be uninstalled for all users.\n\nAlso fixed issues with cleaning external storage of apps, which\nwas not dealing with multiple users.  We now keep track of cleaning\neach user for each package.\n\nChange-Id: I00e66452b149defc08c5e0183fa673f532465ed5\n"
    },
    {
      "commit": "98365d7663cbd82979a5700faf0050220b01084d",
      "tree": "8a4ff3e0a8afd814ed29609b26aa1c6ade2367f6",
      "parents": [
        "848c2dc93b6795e171f3dd6f64ea0be65e2762ca"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Aug 19 20:30:52 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Aug 19 22:42:08 2012 -0700"
      },
      "message": "Refactor for multi-display support.\n\nSplit WindowManagerImpl into two parts, the WindowManager\ninterface implementation remains where it is but the global\ncommunications with the window manager are now handled by\nthe WindowManagerGlobal class.  This change greatly simplifies\nthe challenge of having separate WindowManager instances\nfor each Context.\n\nRemoved WindowManagerImpl.getDefault().  This represents the\nbulk of this change.  Most of the usages of this method were\neither to perform global functions (now handled by WindowManagerGlobal)\nor to obtain the default display (now handled by DisplayManager).\n\nExplicitly associate each new window with a display and make\nthe Display object available to the View hierarchy.\n\nAdd stubs for some new display manager API features.\n\nStart to split apart the concepts of display id and layer stack.\nsince they operate at different layers of abstraction.\nWhile it\u0027s true that each logical display uniquely corresponds to a\nsurface flinger layer stack, it is not necessarily the case that\nthey must use the same ids.  Added Display.getLayerStack()\nand started using it in places where it was relatively easy to do.\n\nChange-Id: I29ed909114dec86807c4d3a5059c3fa0358bea61\n"
    },
    {
      "commit": "d2ae85d41ec1651dd1bf4c33fe31833ba5c5cff5",
      "tree": "a13ab2da158404c627977d9316501332cd863dd8",
      "parents": [
        "aeca6898041437a7e2ba68c1421b9be90669154d",
        "832cb229cd748505c90f74ae8154fc3557d61a73"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Fri Aug 17 13:03:15 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 17 13:03:15 2012 -0700"
      },
      "message": "Merge \"Adding a thumbnail scale down animation\" into jb-mr1-dev"
    },
    {
      "commit": "79af1dd54c16cde063152922b42c96d72ae9eca8",
      "tree": "142abf0037d20841712e88d65febcbbd92dd5561",
      "parents": [
        "f1b995f9d049cb5c7225b3b17f09369237a83ca2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 16 16:42:52 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 17 10:36:08 2012 -0700"
      },
      "message": "Switch public APIs to use new UserHandle class for identifying users.\n\nGets rid of \"yet another integer\" confusion.\n\nChange-Id: Id07ea7307aea7c62f0087c6663a1f1c08e2e5dee\n"
    },
    {
      "commit": "832cb229cd748505c90f74ae8154fc3557d61a73",
      "tree": "ff2c3b98b5bd2c91c195f39d320b14d56062a8f1",
      "parents": [
        "32e7bd9fe1343e365dc40c8d215b0d98df99a2de"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Fri Apr 13 09:32:47 2012 -0700"
      },
      "committer": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu Aug 16 00:14:03 2012 -0700"
      },
      "message": "Adding a thumbnail scale down animation\n\nRecents animation will temporarily look a bit\nwrong, but a subsequent change will fix this."
    },
    {
      "commit": "9630704ed3b265f008a8f64ec60a33cf9dcd3345",
      "tree": "0c905e55ac062b625bf7a9ced250f05213d7873f",
      "parents": [
        "ff7e6ef4f18ff94a9836492ff3ccd1ba7f6804f3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 27 15:51:34 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Aug 15 03:06:24 2012 -0700"
      },
      "message": "Power manager rewrite.\n\nThe major goal of this rewrite is to make it easier to implement\npower management policies correctly.  According, the new\nimplementation primarily uses state-based rather than event-based\ntriggers for applying changes to the current power state.\n\nFor example, when an application requests that the proximity\nsensor be used to manage the screen state (by way of a wake lock),\nthe power manager makes note of the fact that the set of\nwake locks changed.  Then it executes a common update function\nthat recalculates the entire state, first looking at wake locks,\nthen considering user activity, and eventually determining whether\nthe screen should be turned on or off.  At this point it may\nmake a request to a component called the DisplayPowerController\nto asynchronously update the display\u0027s powe state.  Likewise,\nDisplayPowerController makes note of the updated power request\nand schedules its own update function to figure out what needs\nto be changed.\n\nThe big benefit of this approach is that it\u0027s easy to mutate\nmultiple properties of the power state simultaneously then\napply their joint effects together all at once.  Transitions\nbetween states are detected and resolved by the update in\na consistent manner.\n\nThe new power manager service has is implemented as a set of\nloosely coupled components.  For the most part, information\nonly flows one way through these components (by issuing a\nrequest to that component) although some components support\nsending a message back to indicate when the work has been\ncompleted.  For example, the DisplayPowerController posts\na callback runnable asynchronously to tell the PowerManagerService\nwhen the display is ready.  An important feature of this\napproach is that each component neatly encapsulates its\nstate and maintains its own invariants.  Moreover, we do\nnot need to worry about deadlocks or awkward mutual exclusion\nsemantics because most of the requests are asynchronous.\n\nThe benefits of this design are especially apparent in\nthe implementation of the screen on / off and brightness\ncontrol animations which are able to take advantage of\nframework features like properties, ObjectAnimator\nand Choreographer.\n\nThe screen on / off animation is now the responsibility\nof the power manager (instead of surface flinger).  This change\nmakes it much easier to ensure that the animation is properly\ncoordinated with other power state changes and eliminates\nthe cause of race conditions in the older implementation.\n\nThe because of the userActivity() function has been changed\nso that it never wakes the device from sleep.  This change\nremoves ambiguity around forcing or disabling user activity\nfor various purposes.  To wake the device, use wakeUp().\nTo put it to sleep, use goToSleep().  Simple.\n\nThe power manager service interface and API has been significantly\nsimplified and consolidated.  Also fixed some inconsistencies\nrelated to how the minimum and maximum screen brightness setting\nwas presented in brightness control widgets and enforced behind\nthe scenes.\n\nAt present the following features are implemented:\n\n- Wake locks.\n- User activity.\n- Wake up / go to sleep.\n- Power state broadcasts.\n- Battery stats and event log notifications.\n- Dreams.\n- Proximity screen off.\n- Animated screen on / off transitions.\n- Auto-dimming.\n- Auto-brightness control for the screen backlight with\n  different timeouts for ramping up versus ramping down.\n- Auto-on when plugged or unplugged.\n- Stay on when plugged.\n- Device administration maximum user activity timeout.\n- Application controlled brightness via window manager.\n\nThe following features are not yet implemented:\n\n- Reduced user activity timeout for the key guard.\n- Reduced user activity timeout for the phone application.\n- Coordinating screen on barriers with the window manager.\n- Preventing auto-rotation during power state changes.\n- Auto-brightness adjustment setting (feature was disabled\n  in previous version of the power manager service pending\n  an improved UI design so leaving it out for now).\n- Interpolated brightness control (a proposed new scheme\n  for more compactly specifying auto-brightness levels\n  in config.xml).\n- Button / keyboard backlight control.\n- Change window manager to associated WorkSource with\n  KEEP_SCREEN_ON_FLAG wake lock instead of talking\n  directly to the battery stats service.\n- Optionally support animating screen brightness when\n  turning on/off instead of playing electron beam animation\n  (config_animateScreenLights).\n\nChange-Id: I1d7a52e98f0449f76d70bf421f6a7f245957d1d7\n"
    },
    {
      "commit": "756220bd1912535840388a6743830d2e59ad4964",
      "tree": "ee97c666d4bb1f015fd3e89463af09c712ce47e4",
      "parents": [
        "863b19bc8fcfa436011781b67a237fcce3cb703a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:45:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 14 16:51:38 2012 -0700"
      },
      "message": "Add API to create new contexts with custom configurations.\n\nThis allows you to, say, make a Context whose configuration\nis set to a different density than the actual density of the device.\n\nThe main API is Context.createConfigurationContext().  There is\nalso a new API on ContextThemeWrapper that allows you to apply\nan override context before its resources are retrieved, which\naddresses some feature requests from developers to be able to\ncustomize the context their app is running in.\n\nChange-Id: I88364986660088521e24b567e2fda22fb7042819\n"
    },
    {
      "commit": "7d19e0242faac8017033dabb872cdf1542fa184c",
      "tree": "ab12d3c6597bc42bc7c0dca10ded546192c5c249",
      "parents": [
        "03ad783c5078c7bd487e47bb2a2af67dfbe89f1a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:12:33 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 07 19:19:22 2012 -0700"
      },
      "message": "More mult-user API work.\n\n- You can now use android:singleUser with receivers and providers.\n- New API to send ordered broadcasts as a user.\n- New Process.myUserHandle() API.\n\nFor now I am trying out \"user handle\" as the name for the numbers\nrepresenting users.\n\nChange-Id: I754c713ab172494bb4251bc7a37a17324a2e235e\n"
    },
    {
      "commit": "758143ecfedbe08cc6c4fed0ad8ad7a854194ca4",
      "tree": "c7102e7f3b5f71180cb23d1a13c01158f558feb6",
      "parents": [
        "4cb3384772cf7015a4e05789470123efb07219d9"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Aug 06 16:40:27 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Aug 06 23:49:38 2012 -0700"
      },
      "message": "Window position not reported if the window is not moved.\n\n1.If a window is shown but never moved the window window\n  is never notified for its current location. Therefore,\n  accessibility nodes do not contain correct bounds in\n  screen coordinates.\n\nbug:6926295\n\nChange-Id: I7df18b095d33ecafffced75aba9e4f4693b0c393\n"
    },
    {
      "commit": "b49a065d9904567624a088857ecd1626fad91511",
      "tree": "e5a7dce90e878f97e3351a9ee1faa2f799155c39",
      "parents": [
        "cbb6b41aeff9d70bee30ac670237e45b35689cc0"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Fri Aug 03 19:03:24 2012 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Fri Aug 03 19:03:24 2012 -0700"
      },
      "message": "Fix build with density methods.\n\nChange-Id: I95c0a4f12db40f200a3a004394763beaef904232\n"
    },
    {
      "commit": "437a0fbd57662e1d9d260da6f62ff83da2769a7e",
      "tree": "7df1f02b3bcc2d3fc4e22926e55c33e712879419",
      "parents": [
        "a7ce1551a6c05d4f983e283b413cadb1ddc1026d",
        "59c009776dae5ccbdfb93d7151ff2065ca049dc3"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Thu Aug 02 09:20:14 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 02 09:20:14 2012 -0700"
      },
      "message": "Merge \"Introduce multiple displays with DisplayContent.\" into jb-mr1-dev"
    },
    {
      "commit": "59c009776dae5ccbdfb93d7151ff2065ca049dc3",
      "tree": "45ffbc8d93e8f245ed1c78ffa64b8bcc5ae59355",
      "parents": [
        "fa14d824d235c33b137a429c3eb6818f273407ab"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Mon Jul 30 12:10:24 2012 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Thu Aug 02 08:47:44 2012 -0700"
      },
      "message": "Introduce multiple displays with DisplayContent.\n\nFix a couple of bugs that turned up.\nRemove touch/focus from display. Add iterators for access.\nRespond to comments. Remove TODOs, and some deviceId parameters.\n\nChange-Id: Idcdb4f1979aa7b14634d450fd0333d6eff26994d\n"
    },
    {
      "commit": "908aecc3a63c5520d5b11da14a9383f885b7d126",
      "tree": "11806df7f127ea695474ae7ab490a95c19965508",
      "parents": [
        "b1980049855fd6c53e109b44ff012a053f9436f7"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 31 16:37:34 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 01 10:54:39 2012 -0700"
      },
      "message": "Start moving away from DisplayMetrics.DENSITY_DEVICE.\n\nThis puts in most of the infrastructure needed to allow us to\nswitch between different densities at run time.  The main remaining\nuses of the global are to initialize the Bitmap object (not sure\nwhat to do about that since it doesn\u0027t have anything passed in\nthe constructor to get this information from), and being able to\nload drawables if we need a different density than what was preloaded\nby zygote.\n\nChange-Id: Ifdbfd6b7a5c59e6aa22e63b95b78d96af3d96848\n"
    },
    {
      "commit": "39df578acddb739d7608e458533904bf5814c0da",
      "tree": "e64efcaf4249b57618dcd0a5d48de16c600895f6",
      "parents": [
        "f063fa0c30be849d0e067fb40d6f388b7c0d8340"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Fri Jul 27 14:30:59 2012 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Fri Jul 27 14:30:59 2012 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I52bbebae38912a4fb71c96174b3d4d8eb6be10c1\n"
    },
    {
      "commit": "aa871b0ff0fb38112a1693e80e1146cecc5db21d",
      "tree": "9382c5c05be896dcb3f79b0ae0d2af7b9ecce034",
      "parents": [
        "fa25bf5382467b1018bd9af7f1cb30a23d7d59f7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 25 20:06:22 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 25 20:06:22 2012 -0700"
      },
      "message": "Fix build.\n\nChange-Id: Ife2fd58447205407e41ce3d27e28a705b744bede\n"
    },
    {
      "commit": "fa25bf5382467b1018bd9af7f1cb30a23d7d59f7",
      "tree": "2b65e9c19319112d1873db55a02303a43d68547a",
      "parents": [
        "bbcb123d4923b0c2f36af7b2ade82f5d7832357d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 23 19:26:30 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 25 18:56:16 2012 -0700"
      },
      "message": "Add display manager skeleton.\n\nThe purpose of this change is to remove direct reliance on\nSurfaceFlinger for describing the size and characteristics of\ndisplays.\n\nThis patch also starts to make a distinction between logical displays\nand physical display devices.  Currently, the window manager owns\nthe concept of a logical display whereas the new display\nmanager owns the concept of a physical display device.\n\nChange-Id: I7e0761f83f033be6c06fd1041280c21500bcabc0\n"
    },
    {
      "commit": "c9c9a48e7bafae63cb35a9aa69255e80aba83988",
      "tree": "80295bae9e6546d9d7fb604af0fa772ebd18a4fc",
      "parents": [
        "dd0d0ba654cea3051e44ba9ae20ac4b269e123c0"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jul 16 08:46:07 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jul 16 08:46:11 2012 -0700"
      },
      "message": "Removing a workaround for incorrect window position on window move.\n\n1. The window manager was not notifying a window when the latter\n   has been moved. This was causing incorrect coordinates of the\n   nodes reported to accessibility services. To workaround that\n   we have carried the correct window location when making a\n   call from the accessibility layer into a window. Now the\n   window manager notifies the window when it is moved and the\n   workaround is no longer needed. This change takes it out.\n\n2. The left and right in the attach info were not updated properly\n   after a report that the window has moved.\n\n3. The accessibility manager service was calling directly methods\n   on the window manager service without going through the interface\n   of the latter. This leads to unnecessary coupling and in the\n   long rung increases system complexity and reduces maintability.\n\nbug:6623031\n\nChange-Id: Iacb734b1bf337a47fad02c827ece45bb2f53a79d\n"
    },
    {
      "commit": "105b78bb310a75dc44e0baa49fe7d20341cc0f15",
      "tree": "f724600922f997278723d8d650e469a8ce561f09",
      "parents": [
        "fbf885b652272013f44da71e9f77923333bf62eb"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Jul 10 15:17:25 2012 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Jul 10 15:17:25 2012 -0700"
      },
      "message": "Add missing interface method.\n\nFix broken build.\n\nChange-Id: I6644df218e11a35330a985bdcb9ace33723330f5\n"
    },
    {
      "commit": "01b6c755dbcf24e71192dc44757e2eea2a426091",
      "tree": "ca4347753ccb79e7dc4307a8a54387a087c8d1a1",
      "parents": [
        "42eae21fb9abcff50ad69ab2faf2ffbdbd3b1156"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Jul 09 15:53:40 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jul 10 11:48:10 2012 -0700"
      },
      "message": "Replace LruCache implementation for layoutlib.\n\nThe android version depends on a custom version of LinkedHashMap\nwhich is not present on desktop VMs. This new implementation is done\nin a way that minimizes the difference between the two.\n\nAlso some minor fixes.\n\nChange-Id: Ib27b0419f9d0e6ba4d4abb26b2ccd968af59eba8\n"
    },
    {
      "commit": "a4b7f2f75e7803193429ec1179fb5e2eb1c6fbda",
      "tree": "287a64b2e558134e4f80ce5ae2356405204a369b",
      "parents": [
        "6a15634f601617b815935bc7fdbe0c356d020f44"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 21 11:28:41 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 25 19:19:15 2012 -0700"
      },
      "message": "Use two fingers to work some magic...\n\nChange-Id: Ibcb3dbd3d158c22da8277e544d81fb47eadccd49\n"
    },
    {
      "commit": "752e7b3bf624f72261bb789c5a6e8d34b419c8f1",
      "tree": "521ccf8d6879ba1671c611cbd92c10505b4734a7",
      "parents": [
        "e66ad7c900f7b5cfedd0056769b8d19306aa396f",
        "58a8d8d2d4b15cd4abf010680181359823ebfda4"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jun 19 18:09:14 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 19 18:09:14 2012 -0700"
      },
      "message": "am 58a8d8d2: am 0e302bc8: Merge \"Disable debug output in SDK layoutlib.\" into jb-dev\n\n* commit \u002758a8d8d2d4b15cd4abf010680181359823ebfda4\u0027:\n  Disable debug output in SDK layoutlib.\n"
    },
    {
      "commit": "58a8d8d2d4b15cd4abf010680181359823ebfda4",
      "tree": "2d5eb4858fa0599a93671be236fe41949585a544",
      "parents": [
        "f99e81a6ff22b6b93dd057802e553f66c0a7b97b",
        "0e302bc884fa4b25eb391d625f2fb0eddc25d9b7"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jun 19 18:06:37 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 19 18:06:37 2012 -0700"
      },
      "message": "am 0e302bc8: Merge \"Disable debug output in SDK layoutlib.\" into jb-dev\n\n* commit \u00270e302bc884fa4b25eb391d625f2fb0eddc25d9b7\u0027:\n  Disable debug output in SDK layoutlib.\n"
    },
    {
      "commit": "4d7f301f94b9d2dda0ef109e9991ad2d77442f75",
      "tree": "f7a5bbab6a84abe5b9272b3e294e130c80e4ea72",
      "parents": [
        "1b36a68f607538bd090c33b31bd418169657ff6c"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jun 19 18:01:50 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jun 19 18:02:21 2012 -0700"
      },
      "message": "Disable debug output in SDK layoutlib.\n\nBug: 6697442\n\nChange-Id: I9741761342ea220c158aa124089430b0db80bf7e\n"
    },
    {
      "commit": "89e1ad05e7cca990f46d5b13b8b5892de1736faa",
      "tree": "1fc609bf0f392d6a34348cb4b174b30aee6d85d0",
      "parents": [
        "e526f14e3bc6b82e7977708c13683b21a0df7935",
        "bce1011dd2a371c587d2e39ad8c3d446b63049d0"
      ],
      "author": {
        "name": "Raphael Moll",
        "email": "raphael@google.com",
        "time": "Thu Jun 14 14:46:25 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 14 14:46:25 2012 -0700"
      },
      "message": "am bce1011d: resolved conflicts for merge of 8cf489c1 to jb-dev-plus-aosp\n\n* commit \u0027bce1011dd2a371c587d2e39ad8c3d446b63049d0\u0027:\n  Layoutlib Create: Find dependencies.\n"
    },
    {
      "commit": "bce1011dd2a371c587d2e39ad8c3d446b63049d0",
      "tree": "3e99f4996919ff44364c895e95999f3f9c03d37b",
      "parents": [
        "eb02d40c6d068ffcbb822910c5449b7081d1ae51",
        "8cf489c1f509ad2414a887035ad3d6996d1931a3"
      ],
      "author": {
        "name": "Raphael Moll",
        "email": "raphael@google.com",
        "time": "Thu Jun 14 14:14:45 2012 -0700"
      },
      "committer": {
        "name": "Raphael Moll",
        "email": "raphael@google.com",
        "time": "Thu Jun 14 14:14:45 2012 -0700"
      },
      "message": "resolved conflicts for merge of 8cf489c1 to jb-dev-plus-aosp\n\nChange-Id: I06608e3c122b8f321429d457c51aa2213dd238b4\n"
    },
    {
      "commit": "4306096a4351030cab4ea413b5e87460b60a84bf",
      "tree": "359ee2d75645d0d641f052fde11469628194add8",
      "parents": [
        "f01f6b6d379c911a2c1e350bc758cea26bfe6d9d"
      ],
      "author": {
        "name": "Raphael Moll",
        "email": "ralf@android.com",
        "time": "Wed Jun 13 00:22:47 2012 -0700"
      },
      "committer": {
        "name": "Raphael Moll",
        "email": "ralf@android.com",
        "time": "Wed Jun 13 15:44:54 2012 -0700"
      },
      "message": "Layoutlib Create: Find dependencies.\n\nUsage: layoutlib_create --list-deps /path/to/layoutlib.jar\n\nPrints:\n- all classes found in the Jar and the types they use (the dependencies).\n- all the dependencies missing from the Jar and what uses them.\n\nChange-Id: I8b2674df127e1494feed7a653282e88e4d2f5494\n"
    },
    {
      "commit": "71ebf2830494e353dee797424bd2ebbc4fea2ff3",
      "tree": "b042acb954219718637c6136d7e67deed0f9d187",
      "parents": [
        "d7f13b4f0abea27b7ce947b69eab4716c4a2b67f",
        "fcd738240a7d716e21721514202caa5bfb2dcb98"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 04 11:13:27 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 04 11:13:27 2012 -0700"
      },
      "message": "am fcd73824: am dd251cab: Merge \"Fix build.\" into jb-dev\n\n* commit \u0027fcd738240a7d716e21721514202caa5bfb2dcb98\u0027:\n  Fix build.\n"
    },
    {
      "commit": "fcd738240a7d716e21721514202caa5bfb2dcb98",
      "tree": "caaa71a10f3154c2925f0c5b060126f74f1a81bf",
      "parents": [
        "5bf8f01be1cd9800e53b30117fe9ea7fb1153301",
        "dd251cab5b6e5b590cc0aeae8be8f885a7794e72"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 04 11:09:00 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 04 11:09:00 2012 -0700"
      },
      "message": "am dd251cab: Merge \"Fix build.\" into jb-dev\n\n* commit \u0027dd251cab5b6e5b590cc0aeae8be8f885a7794e72\u0027:\n  Fix build.\n"
    },
    {
      "commit": "bb47cf66ec72adff895d0e8b94c26f5d438be49a",
      "tree": "58824f18a2e3e751de8ef06e5cb2883bb19a36a5",
      "parents": [
        "6593be0c200f69d932e40e05e9df54b89c157c48"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 04 10:51:17 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 04 10:51:17 2012 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I41415fed99d98406bc033289428bde59475c2917\n"
    },
    {
      "commit": "ce783749b191a58e4fed9a397066376915c1db65",
      "tree": "fe7bbae9d9db880b5e69d82d96cdffa5d4040ed9",
      "parents": [
        "b042f2d9908e20852e4077878e50a0c07b8eee79",
        "f3b4c93e0da9af2db9e16864faa734cf70fecfe3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 29 15:57:52 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 29 15:57:52 2012 -0700"
      },
      "message": "am f3b4c93e: am ae5811c7: Merge \"Fix (mostly) issue #5109947: Race condition between retrieving a...\" into jb-dev\n\n* commit \u0027f3b4c93e0da9af2db9e16864faa734cf70fecfe3\u0027:\n  Fix (mostly) issue #5109947: Race condition between retrieving a...\n"
    },
    {
      "commit": "f3b4c93e0da9af2db9e16864faa734cf70fecfe3",
      "tree": "7e9700c7556be59ccc6919bcb4cd0a3cdb50b7f6",
      "parents": [
        "09dfd60bc37585e2670e4ca997940256e5b21ac8",
        "ae5811c71405878b09eace395ec2b28e54eeb427"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 29 15:53:38 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 29 15:53:38 2012 -0700"
      },
      "message": "am ae5811c7: Merge \"Fix (mostly) issue #5109947: Race condition between retrieving a...\" into jb-dev\n\n* commit \u0027ae5811c71405878b09eace395ec2b28e54eeb427\u0027:\n  Fix (mostly) issue #5109947: Race condition between retrieving a...\n"
    },
    {
      "commit": "6ae8d1821822296df0606c9cd1c46708cc21cb58",
      "tree": "eb4b17b255b1f0e78078923474afcaad67755f12",
      "parents": [
        "3dac02265e42bf176e26b83da430ce15d6fd06df"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 23 13:12:42 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 29 13:33:09 2012 -0700"
      },
      "message": "Fix (mostly) issue #5109947: Race condition between retrieving a...\n\n...content provider and updating its oom adj\n\nThis introduces the concept of an \"unstable\" reference on a content\nprovider.  When holding such a reference (and no normal stable ref),\nthe content provider dying will not cause the client process to be\nkilled.\n\nThis is used in ContentResolver.query(), .openAssetFileDescriptor(),\nand .openTypedAssetFileDescriptor() to first access the provider\nwith an unstable reference, and if at the point of calling into the\nprovider we find it is dead then acquiring a new stable reference\nand doing the operation again.  Thus if the provider process dies\nat any point until we get the result back, our own process will not\nbe killed and we can safely retry the operation.\n\nArguably there is still the potential for a race -- if somehow the\nprovider is killed way late by the OOM killer after the query or\nopen has returned -- but this should now be *extremely* unlikely.\nWe also continue to have the issue with the other calls, but these\nare much less critical, and the same model can\u0027t be used there (we\nwouldn\u0027t want to execute two insert operations for example).\n\nThe implementation of this required some significant changes to the\nunderlying plumbing of content providers, now keeping track of the\ntwo different reference counts, and managing them appropriately.  To\nfacilitate this, the activity manager now has a formal connection\nobject for a client reference on a content provider, which hands to\nthe application when opening the provider.\n\nThese changes have allowed a lot of the code to be cleaned up and\nsubtle issues closed.  For example, when a process is crashing, we\nnow have a much better idea of the state of content provider clients\n(olding a stable ref, unstable ref, or waiting for it to launch), so\nthat we can correctly handle each of these.\n\nThe client side code is also a fair amount cleaner, though in the\nfuture there is more than should be done.  In particular, the two\nProviderClientRecord and ProviderRefCount classes should be combined\ninto one, part of which is exposed to the ContentResolver internal\nAPI as a reference on a content provider with methods for updating\nreference counts and such.  Some day we\u0027ll do that.\n\nChange-Id: I87b10d1b67573ab899e09ca428f1b556fd669c8c\n"
    },
    {
      "commit": "38e34874a89b6e71464bfa3e89480252000765ad",
      "tree": "4d1c5a4945991dec9dcefbb85ca59ca28a83afe5",
      "parents": [
        "1b61dc2eb7f738bb49142db14a7d339e2fd90545",
        "2a9b85d7ccdd3b8e6be90454cdcb4be3b032cd64"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Fri May 18 16:33:10 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 18 16:33:10 2012 -0700"
      },
      "message": "am 2a9b85d7: am c0f17383: Merge \"Move kxml2 to prebuilts/misc\"\n\n* commit \u00272a9b85d7ccdd3b8e6be90454cdcb4be3b032cd64\u0027:\n  Move kxml2 to prebuilts/misc\n"
    },
    {
      "commit": "e4b1c08abf88c55e71c0afab4c3c853d96d5d26c",
      "tree": "b8de69fe4984e76a96141550d27cb656280ecfac",
      "parents": [
        "6917b2a10d9b701282fbfb85be48eeb7e7877882",
        "095c2d315d3bdf4cdb61439d427413c0bd7796e1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 14 19:37:24 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 14 19:37:24 2012 -0700"
      },
      "message": "am 095c2d31: am 4286d6d1: Fix build.\n\n* commit \u0027095c2d315d3bdf4cdb61439d427413c0bd7796e1\u0027:\n  Fix build.\n"
    },
    {
      "commit": "6917b2a10d9b701282fbfb85be48eeb7e7877882",
      "tree": "0fd56ec04c94ee9202908cdf814ec6ab5d1b2ee8",
      "parents": [
        "9a19d16a1a44b8f394f93e116adb48024148f8ef",
        "2da87ec32e72c2c25998e2444155c00074cfbd40"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 14 19:37:21 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 14 19:37:21 2012 -0700"
      },
      "message": "am 2da87ec3: am 2a7a6ca0: Merge \"Implement new window cropping.\" into jb-dev\n\n* commit \u00272da87ec32e72c2c25998e2444155c00074cfbd40\u0027:\n  Implement new window cropping.\n"
    },
    {
      "commit": "4286d6d115385391b75db8e6c4e397008ef9b3db",
      "tree": "a44118310b76995e9b1eed18f6707b062117504b",
      "parents": [
        "2a7a6ca00ab176105b5bbfa6b17bb0dcd058d517"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun May 13 16:03:39 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun May 13 16:03:39 2012 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I53263d509559c70100cd78ad49f225f0dafd8891\n"
    },
    {
      "commit": "85afd1b6f871d471fdff1980134676a5f1690525",
      "tree": "94f1a2661418208e7969d659dc694353ff43d304",
      "parents": [
        "dca5fb9e7e193d6aed233e0650691675a56022a3"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun May 13 13:31:06 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun May 13 13:31:06 2012 -0700"
      },
      "message": "Implement new window cropping.\n\nThe window manager now performs the crop internally, evaluating\nit every animation from, to be able to update it along with\nthe surface position.\n\nChange-Id: I960a2161b9defb6fba4840fa35aee4e411c39b32\n"
    },
    {
      "commit": "e5c511a1cceffd17b8edb355f2c19a7498a5e229",
      "tree": "16924ebcae93f40adc90e35766b8734e45373adf",
      "parents": [
        "800421ba616598098278e63fdc0f189a17541c95",
        "bf1b5fa944158044a595706924b935b5577ec0f0"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu May 10 11:57:33 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 10 11:57:33 2012 -0700"
      },
      "message": "am bf1b5fa9: am 421dceb0: Merge \"Making transition out of recents look better\" into jb-dev\n\n* commit \u0027bf1b5fa944158044a595706924b935b5577ec0f0\u0027:\n  Making transition out of recents look better\n"
    },
    {
      "commit": "58d4f2e36f4091272c40d59fb3b7b80ee792ba57",
      "tree": "41e60ca2e85a20b3c9c38ba8080b73eb19b11b62",
      "parents": [
        "9979ee45852a304fbf41d818092e509224152cde",
        "e2e0391389fce1a9fd9d5c5442ba1901b6d96211"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 10 11:38:52 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 10 11:38:52 2012 -0700"
      },
      "message": "am e2e03913: am dd79ae6b: Merge \"Add infrastructure for accessing \"unstable\" content providers.\" into jb-dev\n\n* commit \u0027e2e0391389fce1a9fd9d5c5442ba1901b6d96211\u0027:\n  Add infrastructure for accessing \"unstable\" content providers.\n"
    },
    {
      "commit": "421dceb0a4fd8f20349a0de277f82b56e71cb90b",
      "tree": "092633533796bf65021ee895b1bd7d7a42cb99c2",
      "parents": [
        "dc442534070aa8ff4c07cae16fc5207ba6821651",
        "21385cd83d7d7938b57a4acbaa236dd4c7804ed4"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu May 10 10:35:19 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 10 10:35:19 2012 -0700"
      },
      "message": "Merge \"Making transition out of recents look better\" into jb-dev"
    },
    {
      "commit": "21385cd83d7d7938b57a4acbaa236dd4c7804ed4",
      "tree": "4437d4ba6ded58da748f2231c2d87c5c406b807e",
      "parents": [
        "0fa152912e55f2d08f0a8d1260332a81e5706694"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu May 03 10:57:31 2012 -0700"
      },
      "committer": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Wed May 09 20:25:28 2012 -0700"
      },
      "message": "Making transition out of recents look better\n\n- Fading out recents first, then scaling up app\nthumbnail\n- Fade Recents out over 130ms\n- Delay the window animation for 200ms first,\nthen animate for 200ms (previously we didn\u0027t delay\nand then animated for 300ms)\n\nBug: 6390075\n\nChange-Id: Ia8c753bf7ee03d2acef6eb2772b28d88fe10a682"
    },
    {
      "commit": "652b6d1e591f6684cda4b93d4712920f287991b4",
      "tree": "5ffe183aa2cbe66c8b8b89e8f3a809e4e7f4c603",
      "parents": [
        "a53de0629f3b94472c0f160f5bbe1090b020feab"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 09 18:18:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 09 18:18:40 2012 -0700"
      },
      "message": "Add infrastructure for accessing \"unstable\" content providers.\n\nWe have an API and some stuff that purports to this, but no real\nimplementation yet.\n\nChange-Id: I93555440014a50fdf79fa3f65318d90fb82265b4\n"
    },
    {
      "commit": "30600306592b571a455cfbc89e609522a5a158ab",
      "tree": "7e28a53823c63119e93ca1b57abe06ec1e7f3c28",
      "parents": [
        "ef63d094118d86d7ce371fd98bd05415d3f17ea2",
        "50e657e66ce6663fdff929cd365a3daf87cef9ae"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed May 09 10:10:48 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 09 10:10:48 2012 -0700"
      },
      "message": "am 50e657e6: am 024d3b23: Merge \"Add missing native method to Canvas_Delegate.\" into jb-dev\n\n* commit \u002750e657e66ce6663fdff929cd365a3daf87cef9ae\u0027:\n  Add missing native method to Canvas_Delegate.\n"
    },
    {
      "commit": "8fd851709fae7bb48aa513ebcf2285a8cdb28dce",
      "tree": "4585460e55bfc10ea8b2fcd90cc76d66de1eebad",
      "parents": [
        "f3f107140cb1b937d45e14dda6d18fcf78ca9948",
        "a394efa33531ce36c432872ec56ad0c93a9999e7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 10:09:20 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 09 10:09:20 2012 -0700"
      },
      "message": "am a394efa3: am 947f1c8d: Merge \"Move CancellationSignal to android.os package.\" into jb-dev\n\n* commit \u0027a394efa33531ce36c432872ec56ad0c93a9999e7\u0027:\n  Move CancellationSignal to android.os package.\n"
    },
    {
      "commit": "f18c68b83f4919cf903e249da056acb470b683af",
      "tree": "56ebc10498d0d25156114dc3b6787cb49af44b61",
      "parents": [
        "5602d02389c2b945e8d78ea34990933a8e1ddc8b"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue May 08 17:14:18 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue May 08 17:14:18 2012 -0700"
      },
      "message": "Add missing native method to Canvas_Delegate.\n\nChange-Id: I86288c942004e5489eacc43ba5e112cf56f94487\n"
    },
    {
      "commit": "05b50149ab3b3da19343155fa591eb5b47f246b8",
      "tree": "45992aa9ecc19435eb374ea5427ef0de14326c58",
      "parents": [
        "709d138d2fbbfbcddde9c87528151dc897095742"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue May 08 16:18:32 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue May 08 16:18:32 2012 -0700"
      },
      "message": "Fix classpath of eclipse projects for layoutlib.\n\nThis is due to the prebuilts reorg.\n\nChange-Id: I6afa82d7ac64286aa89b4b1cfb4af59e4c7000ce\n"
    },
    {
      "commit": "a7771df3696954f0e279407e8894a916a7cb26cc",
      "tree": "3615be79c515fad41808d2b84ac0221ba5a7e299",
      "parents": [
        "507f5586fb48f59f7b4f2fa0ca5387e4d4f2bd8d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 07 20:06:46 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon May 07 20:06:46 2012 -0700"
      },
      "message": "Move CancellationSignal to android.os package.\n\nBug: 6427830\nChange-Id: I39451bb1e1d4a8d976ed1c671234f0c8c61658dd\n"
    },
    {
      "commit": "bda124453d58d8b55d9026e4c5e7ae8c804e995a",
      "tree": "2692d58dee80a6999826d37bd331b8d7143a5567",
      "parents": [
        "d29032e362d41e81ed07d97b8103df855427cb14"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Apr 30 17:35:26 2012 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Mon Apr 30 17:35:26 2012 -0700"
      },
      "message": "Move kxml2 to prebuilts/misc\n\nChange-Id: Ie4b45d2073f26d8313843f9860cf658e288c850b\n"
    },
    {
      "commit": "5c58de3a523a384c47b0b1e0f5dd9728a74cd9f7",
      "tree": "1f765389f4c5153bf09f2cacb9fe87f74169dc67",
      "parents": [
        "3ea8761974a530218a246dc73583c8820b12bf0b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sat Apr 28 19:52:37 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 30 12:11:43 2012 -0700"
      },
      "message": "Add system insets to windows.\n\nThis will be used to determine which parts of a window a completely\nhidden by system UI elements (status bar, nav bar, system bar) so\nthat they can be clipped out from rendering.\n\nChange-Id: I2c6c6ac67dbdfeed82d2c089ef806fb483165bd9\n"
    },
    {
      "commit": "79c6346100b555a8a3d51b3b1c34dbbe99305b9a",
      "tree": "f1fa24b3be063a4a340ec15d19476691b181264e",
      "parents": [
        "a36b7ab04650b598ea08de1f95bb34c5e694167c",
        "12d3a94397c33fdb773a1eaaaa13cab80bf0c571"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 27 17:42:48 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 27 17:42:48 2012 -0700"
      },
      "message": "Merge \"When a window is first shown only draw once while animating.\" into jb-dev"
    },
    {
      "commit": "96ff709fe25632f6e27fa4c13c7d75dbbcfa38e0",
      "tree": "9deab7479cde4ccd454b4b426e38c3de943662fa",
      "parents": [
        "771526c88f5cc4b56a41cb12aa06a28d377a07d5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 17:18:06 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 27 17:18:06 2012 -0700"
      },
      "message": "Work around build break in layoutlib.\n\nBug: 6413563\nChange-Id: Ia7101fba87f3784fd8159c75e4289f642913d099\n"
    },
    {
      "commit": "12d3a94397c33fdb773a1eaaaa13cab80bf0c571",
      "tree": "607f0f7677f8597227883ced5d97f27b0cf39c52",
      "parents": [
        "11dea2945124b166f167d4b5a23a059f33c04fa1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 27 14:16:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 27 15:21:44 2012 -0700"
      },
      "message": "When a window is first shown only draw once while animating.\n\nOn some hardware allocating a new graphics buffer is quite\nexpensive, which blocks updates to the UI.  This can cause\nglitches when performing window animations.\n\nTo reduce these glitches, the view hierarchy will now only\nallow itself to be drawn once if its window is being shown\nwhile the window manager is animating, not resuming draws\nuntil it is told that the animation is done.\n\nChange-Id: Ie15192f6fddbd0931b022a72c76ddd55ca266d84\n"
    },
    {
      "commit": "cb092e2b7fa46477651c8b8733d50307b0de9d6d",
      "tree": "c021b1e8481f91b00c2f34230abbc84bf41d1c37",
      "parents": [
        "a8d6ddee98e09a68030f4226b94f631e3b4c83c1"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Apr 23 17:41:37 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Apr 23 17:41:37 2012 -0700"
      },
      "message": "Fix Paint_Delegate with missing native method.\n\nChange-Id: I39638dcb323fdd1ec3cb58dcad05757145d09026\n"
    },
    {
      "commit": "68c33ca7ce1f142eb5f1e1f90118aeba4c9db1e3",
      "tree": "f598517d463bc750d7081e2bd84b1e325c254f32",
      "parents": [
        "1b965941713a395dc8003cf8ee29a40f92dd77aa"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 19 14:51:25 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 19 14:55:13 2012 -0700"
      },
      "message": "Add new API to find smallest/largest screen size.\n\nChange-Id: I790801fceaf84ee2e3b1c9d32828285ad3231d0e\n"
    },
    {
      "commit": "eabfb3a36e9469c5e219f92b39b7200104319185",
      "tree": "ef38c351e0d5f6b1a60b514c78a4396e3a2c20a6",
      "parents": [
        "455b7bb83ce4a12a72f5b8341eda19754d582293"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 16 16:28:22 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 16 17:32:50 2012 -0700"
      },
      "message": "Add new scale-up window manager animation.\n\nLike zoom thumbnail, but without the thumbnail.\n\nChange-Id: I9486dd204398b87c9e70ff0d05d03f4a22449cd6\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": "5459c43b83c3a9d0406f01deffaadd2ef458518c",
      "tree": "9193ba676d54cf522aec320b089692c9fcecbbd8",
      "parents": [
        "5b4a57973c85afb2f5ec833dc2c202111399b871",
        "f87d19621dc2a30232bba1f51862a0b671eb9729"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 05 11:47:02 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 05 11:47:02 2012 -0700"
      },
      "message": "Merge \"Clean up status bar, system bar, navigation bar management.\""
    },
    {
      "commit": "f87d19621dc2a30232bba1f51862a0b671eb9729",
      "tree": "8bf53cb17770100b6fd1c1f31f1b27eb7121ce3e",
      "parents": [
        "5b86de1e6b8f597ab2444de0f2274546321f1810"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 04 12:48:24 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 04 16:00:45 2012 -0700"
      },
      "message": "Clean up status bar, system bar, navigation bar management.\n\nThe status bar and navigation bar are two completely separate\nelements, with their own semantics.  The system bar now classifies\nitself as a navigation bar, since that is really how it behaves.\n\nThis required rewriting the HDMI resizing code, so that it is\nall done by PhoneWindowManager since that is what is responsible\nfor the size of the navigation bar (and thus now system bar).  This\nactually gets rid of a fair amount of code, and means we can also\ndo the same thing for a pure navigation bar.\n\nLikewise the system bar now has the navigation bar ability to be\nhidden when requested by system UI flags.  To get the behavior\nwe want on Xoom, we only allow the nav bar to be hidden when it\nwill help provide a better aspect ratio for showing widescreen\nvideos.\n\nFinally the nav/system bar now animates when hidden and shown.\n\nChange-Id: Ie927154b68376a0b61802f99171ff56b8da92e7a\n"
    },
    {
      "commit": "ec4a50428d5f26a22df3edaf7e5b08f41d5cb54b",
      "tree": "cd47b15082ff35879cf6e22a86f44108f45920aa",
      "parents": [
        "58a40a3e92f8a53ac1068f0839dec4a1707fa6fb"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 04 10:27:15 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 04 12:05:59 2012 -0700"
      },
      "message": "Embed layout padding in nine patch images\n\n- Added a new custom PNG chunk that carries the layout padding ints.\n- Extract the padding ticks from .9.png images and store in the chunk.\n- Load the padding information at runtime into Bitmap and NinePatchDrawable.\n\n- The new chunk is ordered first so that it doesn\u0027t cause a problem in older\n  versions of the platform.\n\nBug: 6087201\n\nChange-Id: I5de46167a1d44b3ec21065b0c165e594b1dc8399\n"
    },
    {
      "commit": "fbd0509f4746ae1ebca4ab91fc55ebd234ba9d3d",
      "tree": "c7ce19b712ec537ddd8757605b4e068df2e18686",
      "parents": [
        "d5f2374e13a7bcefbc7252b814d128794f22af93",
        "22f700a1b8fb9d2ac7b261e30a46a040928c23bc"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Mar 23 16:29:50 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 23 16:29:50 2012 -0700"
      },
      "message": "Merge \"Add Delegate for ViewRootImpl#isInTouchMode to prevent IPC call in Eclipse.\""
    },
    {
      "commit": "22f700a1b8fb9d2ac7b261e30a46a040928c23bc",
      "tree": "8c56dc423da3c3ec1e443f090c8426243265de48",
      "parents": [
        "0aa4713e47a53377720a043cf1b043ce31cb73da"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Mar 23 16:07:23 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Mar 23 16:07:23 2012 -0700"
      },
      "message": "Add Delegate for ViewRootImpl#isInTouchMode to prevent IPC call in Eclipse.\n\nAlso fix some new/removed method from BitmapFactory.\n\nChange-Id: I606bd8bee6ff1e2c6c9472b4672175bfdaff45de\n"
    },
    {
      "commit": "8078d8c8a282ca81344febe7256f63b1e805e3aa",
      "tree": "6bfb8ab0a389c2ae344088017bd0ceee1e913660",
      "parents": [
        "3c4da3cad04ca878a4a37fcca3f3e2ff51d03fcb"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 20 11:11:26 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 23 14:13:13 2012 -0700"
      },
      "message": "Add new thumbnail animation.\n\nUse it for recent tasks switching.\n\nNot perfect yet by far, but something.\n\nAlso fix issue #6186758: Twitter crashes after tapping on a tweet on JRM75D\n\nChange-Id: I49bf6c94aafde875ac652dedaf96d6c08cc9e7d2\n"
    },
    {
      "commit": "5d701eddcf7f4abd5867ec3bf2091916d5ebbdf1",
      "tree": "20ef99ad3536036c82e74b616b998e960f7c107c",
      "parents": [
        "55ba267c097b5aadc265bbb9abc7ec5323c33194"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Mar 16 14:58:47 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Mar 16 15:14:02 2012 -0700"
      },
      "message": "LayoutLib: Properly support attr ns when used in styles.\n\nChange-Id: I885864588928589d7c9a34b94339917c5be47fa5\n"
    },
    {
      "commit": "a421f6c0ba8c354e2a81830e6402654bbf732780",
      "tree": "42a9806e866f8366fba62edb91d8f066513193cc",
      "parents": [
        "a1d2bd829d4804b7841d7c39c8d2ae438b634efb"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Feb 22 10:21:02 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Mar 15 16:23:51 2012 -0700"
      },
      "message": "Fix sdk layout rendering in JB.\n\nSince JB, com.android.internal.R does not contain all the resources,\ninstead only the ones that are accessed through Java.\nThis means we need to dynamically generate IDs for resources that are\nprivate and only accessed from other XML resources. This is done\nthrough the DynamicIdMap class.\n\nAlso add a PolicyManager and a PowerManager since those are now\nneeded by ViewRootImpl?!?\n\nChange-Id: If2ae8ad79502fa084d852664a44aefd46e01aec6\n"
    },
    {
      "commit": "a4972e951bf2bdb7afdafee95b3ab0c15b8bacae",
      "tree": "9800a9dcd62d945a8ad71549ebcef70393ef5442",
      "parents": [
        "89ea4ca9c26f3c7e365525a0b83500e85517a457"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 10:38:05 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 12:57:14 2012 -0700"
      },
      "message": "Add new \"options\" argument to all startActivity APIs.\n\nThis will be used to allow new features to be requested...  such as,\nsay, a special kind of animation.  Right now there are no options\ndefined.\n\nChange-Id: I4eb6f27275cdd4bf186f6da316ab93a2372ad4b7\n"
    },
    {
      "commit": "bb9908b828a8cfd5965553be66faa6af89973697",
      "tree": "33ab74a9cb8ad69058cece5ae83d4b82f7b51633",
      "parents": [
        "3bef5e9f3aa90465ee3ab66ef33d7a88d1b0c5c1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 08 11:14:07 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 08 15:05:12 2012 -0800"
      },
      "message": "Dispatch screen state change events to Views\nBug #6120957\n\nUsing this new callback, views can interrupt and resume their\nanimations or other periodic tasks based on the current state\nof the display.\n\nChange-Id: I398f4abd421e9c5f207107bf1009a7b92cf45daa\n"
    },
    {
      "commit": "e0cf12fc4d5c9de464f899522a9e2ca77dbb865a",
      "tree": "5b8af20f2926aeee0ca63a82f1dd3d6ccd9e23e2",
      "parents": [
        "7e4e561bc717a6eea4e0d06ec4173ad27420425f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 08 11:08:31 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 08 11:08:31 2012 -0800"
      },
      "message": "Fix the build\n\nChange-Id: Ia86ba9b1c432ab3f8107557e95b12c9eedc4d9f7\n"
    },
    {
      "commit": "aeb17f17ffd8d3384dfed223e40010b4abac4cc5",
      "tree": "411156d560e7bf4ec626d9e91d5290229ca6c199",
      "parents": [
        "0a66900ee5093afa12a5786c4b9dc0e58991f426",
        "77fdcbff8b458dd3430b38e60aee1a28ca92a738"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 27 07:51:05 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 27 07:51:05 2012 -0800"
      },
      "message": "am 77fdcbff: am f038868d: am 44e63a21: Support rendering layout that use the new res-auto namespace.\n\n* commit \u002777fdcbff8b458dd3430b38e60aee1a28ca92a738\u0027:\n  Support rendering layout that use the new res-auto namespace.\n"
    },
    {
      "commit": "77fdcbff8b458dd3430b38e60aee1a28ca92a738",
      "tree": "ef25b6f7891b9a6a7daa77c6abc2dcf8a887e2c9",
      "parents": [
        "44b1a43d823ec3cb93e02df4834b27a75bb30ba5",
        "f038868d74af534effceaa8f1d932f9576f4f647"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Feb 24 19:35:25 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 19:35:25 2012 -0800"
      },
      "message": "am f038868d: am 44e63a21: Support rendering layout that use the new res-auto namespace.\n\n* commit \u0027f038868d74af534effceaa8f1d932f9576f4f647\u0027:\n  Support rendering layout that use the new res-auto namespace.\n"
    },
    {
      "commit": "44e63a218cf8fcab9b4418246a512bd0b0c9157b",
      "tree": "a298468377df3f6d26a257a4997fe37fbb33b170",
      "parents": [
        "5786f5cf1b248b79f938b3fa3c5d534159261f09"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Feb 24 19:02:18 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Fri Feb 24 19:29:31 2012 -0800"
      },
      "message": "Support rendering layout that use the new res-auto namespace.\n\nChange-Id: I9b89c965dc8c9458e74c15ab8ff765e16e1b32c2\n"
    },
    {
      "commit": "cb581bbe2e1fd2a55b70a516fbaac53da0108c28",
      "tree": "d22a8f97d563432cdf66a157141348acee85c076",
      "parents": [
        "2521a0197065e5ff0335199becc5a84de295fd09",
        "34706a4c81b82319a79a1b5ffa9084ed92a6e284"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 16:37:35 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 16:37:35 2012 -0800"
      },
      "message": "resolved conflicts for merge of 34706a4c to master\n\nChange-Id: I4dd24f3b917aa7e3d2c4b0fae51e951dfcf88ba8\n"
    },
    {
      "commit": "34706a4c81b82319a79a1b5ffa9084ed92a6e284",
      "tree": "7db04d1c5c352025b3c80df03dec0d4fa11f1625",
      "parents": [
        "92ce6314c15bd6d59a94a247ae63f1da9b4ccab2",
        "e65a9ab1ea42d1f6190bee844ee666b7910d71ef"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 16:26:57 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Feb 24 16:26:57 2012 -0800"
      },
      "message": "am e65a9ab1: am 5786f5cf: Merge \"Fix build.\" into ics-mr1\n\n* commit \u0027e65a9ab1ea42d1f6190bee844ee666b7910d71ef\u0027:\n  Fix build.\n"
    },
    {
      "commit": "b69b2c01b4de8a161d6c39e7428ffd25c36eb8cc",
      "tree": "7463eb6300e658e103706bda5f9c2e2c6092b1d6",
      "parents": [
        "7663d80f6b6fd6ca7a736c3802013a09c0abdeb9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 16:10:26 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 24 16:10:26 2012 -0800"
      },
      "message": "Fix build.\n\nChange-Id: Id3262bff0df598ecc81a4346dee9febd3aaa60c9\n"
    },
    {
      "commit": "5e6c2194774eb5449889f3a9f984897bf0f06b1c",
      "tree": "f149d093320afc1a93ea55b780094165c440e560",
      "parents": [
        "6822c97898ef6c73528d17beb161059e5032f34a",
        "f8e737cb61ab86b90ec318591fbcfec40fac63cf"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Feb 23 12:22:40 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 23 12:22:40 2012 -0800"
      },
      "message": "am f8e737cb: am 22701ec5: am 503247f2: Merge \"Make sure resource references are resolved.\" into ics-mr1\n\n* commit \u0027f8e737cb61ab86b90ec318591fbcfec40fac63cf\u0027:\n  Make sure resource references are resolved.\n"
    },
    {
      "commit": "f8e737cb61ab86b90ec318591fbcfec40fac63cf",
      "tree": "d527a1ea9d78e12ef73f80cd310ec9614303a924",
      "parents": [
        "32916f7a22f2abf5c1e7021f44c2337ca172f2e5",
        "22701ec5b11f6138e6298814fff5f09da82df144"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Feb 22 10:52:16 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 22 10:52:16 2012 -0800"
      },
      "message": "am 22701ec5: am 503247f2: Merge \"Make sure resource references are resolved.\" into ics-mr1\n\n* commit \u002722701ec5b11f6138e6298814fff5f09da82df144\u0027:\n  Make sure resource references are resolved.\n"
    },
    {
      "commit": "c3f979f6fecb8b46e9315fddb2a1f344bf1f1447",
      "tree": "2558c8a34c9bf516a3c669629c378c2516a20074",
      "parents": [
        "2d559b5311be1cd909e5a445afe75a840688b822"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 21 14:26:32 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 21 14:33:37 2012 -0800"
      },
      "message": "Make sure resource references are resolved.\n\nXmlPullAttribute can query for attributes and return them in a given\nformat. We need to make sure they are first resolved before\ntrying to convert them to int/float/boolean/...\n\nChange-Id: I2aaced022a0382e501978c396e49d6191d53bdc8\n"
    },
    {
      "commit": "a175a5b7ea3682cb58cca7f9726d0b8171cd549d",
      "tree": "a0747492e739adc22a9415fe37a19a71a4a1e010",
      "parents": [
        "1654d0b8d9ba477a0134338838b6e5921f1aabb8"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Feb 15 19:18:31 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Feb 15 19:32:16 2012 -0800"
      },
      "message": "Encapsulate the ViewRootImpl\u0027s handler.\n\nThis change makes it much easier to make sense of the messages that\nget posted to the ViewRootImpl\u0027s handler by encapsulating their point\nof dispatch within the ViewRootImpl itself.\n\nAs part of this change, the View.AttachInfo now carries a reference\nto the ViewRootImpl itself, which simplifies some code that used\nto try to find the ViewRootImpl by getting the root view\u0027s parent.\n\nIn principle, it might have been nice to hide the ViewRootImpl from\nthe View hierarchy but in practice the two were coupled in many ways.\n\nChange-Id: I51ebccdf5f8c8c505cd6f17cdf594174d041dc54\n"
    },
    {
      "commit": "688bd47fccf1a1373e6287bc49b5b33fad12b7f3",
      "tree": "8b394c364fc55aad2d87188156a058ef52d43fd5",
      "parents": [
        "ed219c117d449304bd720fc7d7da1f361015dc58"
      ],
      "author": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Thu Feb 09 20:09:17 2012 +0900"
      },
      "committer": {
        "name": "satok",
        "email": "satok@google.com",
        "time": "Fri Feb 10 16:44:12 2012 +0900"
      },
      "message": "Add an api to switch to the next IME and subtype\n\nBug: 5975302\n\nChange-Id: I48aa4220159c65f456d61a324efcdf0a1ceec91c\n"
    },
    {
      "commit": "c8a0b8e6bccc604d3670d72cab0691ab6b8302c1",
      "tree": "1694852a78b981679479120bd1b0cb2eaa47d96a",
      "parents": [
        "c10cd4a6e3021010786c1dbd69ab4e03ecb689e6"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 17:29:19 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 17:29:19 2012 -0800"
      },
      "message": "Fix a setBackgroundDrawable in layoutlib.\n\nChange-Id: Id5f3ec8cc6863fa5929743ef4014c331633efce9\n"
    },
    {
      "commit": "331bb0c393d5e2ea2485102dcddbb8c2d42654d2",
      "tree": "ae190ea4bed14fbe12870f685b7c59f74219eede",
      "parents": [
        "a9d9fa723a10ae41c047a4e8eba330112d344dc8"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 14:57:22 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 16:40:03 2012 -0800"
      },
      "message": "Setup ActionBars in layoutlib the same way the platform does it. do not merge.\n\nInstead of using a simple ImageView for the icon, this uses the platform\nlayout/action_bar_home which uses a custom class to position and resize\nthe icon (and also supports the Up icon that we don\u0027t yet support).\n\nThis ensures that the icon is properly positionned and sized like\non devices.\n\n(cherry picked from commit 7396348dfcfb45b7ad055f4c18cabbe5e8270d26)\n\nChange-Id: Ifd3bc318089b70ba843519523e366e59d434e919\n"
    },
    {
      "commit": "7396348dfcfb45b7ad055f4c18cabbe5e8270d26",
      "tree": "66b6607b253b5197e19194bd423f2e4cedd2836b",
      "parents": [
        "0afa7e2d95a1ae047ceddf2ca67f05c67ac30770"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 14:57:22 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Feb 06 15:11:12 2012 -0800"
      },
      "message": "Setup ActionBars in layoutlib the same way the platform does it.\n\nInstead of using a simple ImageView for the icon, this uses the platform\nlayout/action_bar_home which uses a custom class to position and resize\nthe icon (and also supports the Up icon that we don\u0027t yet support).\n\nThis ensures that the icon is properly positionned and sized like\non devices.\n\nChange-Id: I57432afa82d257bb043247001320b368045d7f55\n"
    },
    {
      "commit": "ec99f609cc2db862db307f7ba56a2400c58403a0",
      "tree": "6fe7103e5cf1e34819149e92d0699c299dec854e",
      "parents": [
        "c445ed701ade87e5a15f161483fb0200ff5e3e4a",
        "4c1241df8f8b7fd5ec3dff6c7e0f66271248e76e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 18:50:55 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 02 18:50:55 2012 -0800"
      },
      "message": "Merge \"Rename CancellationSignal using preferred spelling.\""
    },
    {
      "commit": "4c1241df8f8b7fd5ec3dff6c7e0f66271248e76e",
      "tree": "36df1bce8fe7295d0ab778ca519232a291a3294f",
      "parents": [
        "8ca8a69d5801ad4b809e7b9dbf53bd728820924b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 17:05:00 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Feb 02 18:02:16 2012 -0800"
      },
      "message": "Rename CancellationSignal using preferred spelling.\n\nBug: 5943637\nChange-Id: I12a339f285f4db58e79acb5fd8ec2fc1acda5265\n"
    },
    {
      "commit": "46d43ccfd8cef75b4315828073c094cf1efb05ff",
      "tree": "572565d2d3cfc8db8423cfc9aac3386837d8ab46",
      "parents": [
        "c69acaef0b31af922931461c11f075e436642fef"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Feb 02 15:44:50 2012 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Feb 02 17:45:45 2012 -0800"
      },
      "message": "Make Layoutlib compile on Java 6.\n\nChange-Id: Ic8f0e321c6c218de83664fc01f253a07fa80852c\n"
    },
    {
      "commit": "75ea64fc54f328d37b115cfb1ded1e45c30380ed",
      "tree": "4254a5d2d0662de8b606b38fea6987da17c130e3",
      "parents": [
        "ebc016c01ea9d5707287cfc19ccc59b21a486c00"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jan 25 19:37:13 2012 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jan 27 17:33:21 2012 -0800"
      },
      "message": "Implement a cancelation mechanism for queries.\n\nAdded new API to enable cancelation of SQLite and content provider\nqueries by means of a CancelationSignal object.  The application\ncreates a CancelationSignal object and passes it as an argument\nto the query.  The cancelation signal can then be used to cancel\nthe query while it is executing.\n\nIf the cancelation signal is raised before the query is executed,\nthen it is immediately terminated.\n\nChange-Id: If2c76e9a7e56ea5e98768b6d4f225f0a1ca61c61\n"
    },
    {
      "commit": "d3fe9abfb9a6a21a18abde6a98dceb423c04ebef",
      "tree": "35cadfcae72edfa6d0bff057bfd84a2e60857edd",
      "parents": [
        "865534a0e30982b0e669006509b9590fad129295",
        "ab9601cdbb95ae94088750eff9a926a572c1a4d6"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Fri Jan 20 15:48:21 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 20 15:48:21 2012 -0800"
      },
      "message": "am ab9601cd: am 230a7092: Merge \"Fix 5863053: Add method to lock screen immediately.\" into ics-mr1\n\n* commit \u0027ab9601cdbb95ae94088750eff9a926a572c1a4d6\u0027:\n  Fix 5863053: Add method to lock screen immediately.\n"
    },
    {
      "commit": "d2f0dcd182fbc0423d206919e81f3845fb9b8155",
      "tree": "1c2e12890b625fc29a26b7bb67cd485b04f45a8c",
      "parents": [
        "bad12166190a7e8087eb5db0ae8df9a4e5843fde",
        "68fc1dfce050f1406f751e71cadd1b9fdb0f825c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:42:10 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 19 17:42:10 2012 -0800"
      },
      "message": "Merge \"Remove unused code\""
    },
    {
      "commit": "68fc1dfce050f1406f751e71cadd1b9fdb0f825c",
      "tree": "b77dabe0c0ded8067cafb5278fe4cfc5a4ed002a",
      "parents": [
        "f9d9c065ed75f1196316a9a31f92309f602cef76"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:41:39 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:41:39 2012 -0800"
      },
      "message": "Remove unused code\n\nChange-Id: Ife0a43f3cfe64a1e74401b10bf74d37cbeefb5af\n"
    }
  ],
  "next": "5bf2802ad9de237ccc014489dd36ff4baadadfaa"
}
