)]}'
{
  "log": [
    {
      "commit": "4ec6cc51087f310acf6f933ae2b69f1520b78453",
      "tree": "090fffb4c9e84a683dae619d55d4cf0cd88537f9",
      "parents": [
        "43abdc486d19c137b79a2bde9ce4706c91656bda"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 05 10:28:05 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 05 10:28:05 2013 -0800"
      },
      "message": "Fix build.\n\nChange-Id: Iaa70b05a3cfd372518ec35aa8bcea2f9d78b8292\n"
    },
    {
      "commit": "2ad920759b1981eaf526fd37a314fbc5a3ed90ae",
      "tree": "3835b2fb240c592668afa5019f2dbad7036513f1",
      "parents": [
        "ff4fcdb98c9575642c48f1daeafff4b257769e81"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Mon Feb 25 16:19:24 2013 -0800"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Mon Feb 25 17:07:39 2013 -0800"
      },
      "message": "Revert ActivityManager changes for tasks. DO NOT MERGE\n\nKeeping all activity\u003d\u003etask changes in master and removing them\nfrom jb-mr2.\n\nRevert \"Update histories simultaneously.\"\nRevert \"Add null check to setAppGroupId.\"\nRevert \"Fix crashing bug in validator.\"\nRevert \"Switch topRunning* and moveTaskTo*\"\nRevert \"Begin switch over to task based history.\"\nRevert \"Reset and reuse Iterators and don\u0027t new() one.\"\nRevert \"Remove AppWindowToken lists.\"\nRevert \"Fix build.\"\nRevert \"Remove unused App methods.\"\nRevert \"Stop using AppToken movement and start using Task.\"\nRevert \"Replace access to mAppTokens with AppTokenIterator\"\nRevert \"Refactor setAppOpVisibility implementation.\"\nRevert \"Add AppWindowTokens to TaskList.\"\nRevert \"Make ActivityStack.mHistory private.\"\nRevert \"Migrate AppWindowToken lists into DisplayContent.\"\n\nChange-Id: I5722c9a4956dccb52864207e2967690bc58e4ebb\n"
    },
    {
      "commit": "c4aad01cbbb69c916ef323693e1fd0560b0eccba",
      "tree": "20f636eb690f976e9f83ec0a23e6ac991776b08b",
      "parents": [
        "fb6806570911851fb8cbaaf5bdf275a89f3c3ef4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 22 15:05:25 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 22 19:14:37 2013 -0800"
      },
      "message": "Formalize overscan metrics.\n\nThe window manager now maintains and reports a new formal\n\"overscan insets\" for each window, much like the existing\ncontent and visible insets.  This is used to correctly\nposition the various UI elements in the various combination\nof layout options.  In particular, this allows us to have\nan activity that is using fitSystemWindows to have the content\nof its UI extend out to the visible content part of the screen\nwhile still positioning its fixed UI elements inside the\nstandard content rect (and the entire window extending all\nthe way into the overscan area to fill the screen as desired).\n\nOkay, maybe that is not written so clearly.  Well, it made\nmy head hurt too, so suffer!\n\nThe key thing is that windows now need to know about three\nrectangles: the overall rectangle of the window, the rectangle\ninside of the overscan area, and the rectangle inside of the\ncontent area.  The FLAG_LAYOUT_IN_OVERSCAN option controls\nwhether the second rectangle is pushed out to fill the entire\noverscan area.\n\nAlso did some improvements to debug dumping in the window\nmanager.\n\nChange-Id: Ib2368c4aff5709d00662c799507c37b6826929fd\n"
    },
    {
      "commit": "29ae06633d6e63fdb29f229f75de758a542c6b66",
      "tree": "d1e9e03516fd56a2ac57bfd0676d66a05e9ac1d1",
      "parents": [
        "9c64d95e51454acfc990d560347850d5a1fe874a",
        "ec6156f9e884ba85c76a9c4683f83f18b3f64afa"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Wed Feb 20 17:08:24 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 20 17:08:24 2013 -0800"
      },
      "message": "am ec6156f9: Merge \"Fix the build.\"\n\n* commit \u0027ec6156f9e884ba85c76a9c4683f83f18b3f64afa\u0027:\n  Fix the build.\n"
    },
    {
      "commit": "ef04a9b7e1dee38f191a8f70be89a1542ccbe367",
      "tree": "c3d509fa946c9897c28a647f76af2779652fc5f7",
      "parents": [
        "ab8e936e852b984624087c97dffc4c74b250fc68"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Wed Feb 20 16:58:59 2013 -0800"
      },
      "committer": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Wed Feb 20 16:58:59 2013 -0800"
      },
      "message": "Fix the build.\n\nChange-Id: If53878937fe1ca01ad8db9f9d201d0f9aaaec81b\n"
    },
    {
      "commit": "4f7fb00f6cb74ef506e65994fb04af3280e958fc",
      "tree": "3247e2a607451c79cdb01a3619a29434d63dd6fd",
      "parents": [
        "cd85845b6e7ac35065f576fa6fbc823bfa0bbd19",
        "ee973c27e339a23e0b93d816a97b33954af66bea"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 19 13:38:49 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 19 13:38:49 2013 -0800"
      },
      "message": "am ee973c27: Fix build.\n\n* commit \u0027ee973c27e339a23e0b93d816a97b33954af66bea\u0027:\n  Fix build.\n"
    },
    {
      "commit": "ee973c27e339a23e0b93d816a97b33954af66bea",
      "tree": "e4b2ddbac12870c38a4c726e5b91d52c899cd053",
      "parents": [
        "ccacb8e88bb4369225e5a97bd64b8351fe04f1b5"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 19 13:36:32 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 19 13:36:32 2013 -0800"
      },
      "message": "Fix build.\n\nChange-Id: I277de38a70f3a2e5c1997a3fe5c2e825692ae9e1\n"
    },
    {
      "commit": "102f7110435415cf22187dcf6c01e599e544d5ce",
      "tree": "8a9f38a6c070716cb3c2cb7aba63523a432ab335",
      "parents": [
        "9678c61fecfafea3818e7b020e9723bd1c287bb3",
        "534d136aa66fb13f7c1b482513627de45c218c29"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Thu Feb 14 10:16:57 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 14 10:16:57 2013 -0800"
      },
      "message": "am 534d136a: Merge \"Remove unused App methods.\"\n\n# Via Android (Google) Code Review (1) and Craig Mautner (1)\n* commit \u0027534d136aa66fb13f7c1b482513627de45c218c29\u0027:\n  Remove unused App methods.\n"
    },
    {
      "commit": "b0c0b1fd70e3edeb724e2b2fb2c7063eb943f05e",
      "tree": "698cbfec349c6b8b4a02daf5bdb7a30ee157158e",
      "parents": [
        "ee6e27c122491356f5203b105206a55f0e984fe7"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Wed Feb 13 15:22:54 2013 -0800"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Wed Feb 13 15:24:14 2013 -0800"
      },
      "message": "Remove unused App methods.\n\nNow that the Task methods have replaced the App methods remove\nthe App methods.\n\nChange-Id: I0e7432f2c6f99708759ed8c871d20eb5bd38c3c2\n"
    },
    {
      "commit": "c932760f667cf56ca7a1aeffde505745dc3632e1",
      "tree": "280d86bf8205c51a2b6b59da6c617e220677e790",
      "parents": [
        "eb26fbe427192bc87bb3dbb7882dbf87f760fab2",
        "7c1a49f5f5ed6613d736464bf5001b777e89ced2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 23:14:26 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 13 23:14:58 2013 +0000"
      },
      "message": "Merge \"Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\""
    },
    {
      "commit": "7c1a49f5f5ed6613d736464bf5001b777e89ced2",
      "tree": "c6726264bde03f4c5957876921d4b15a835b2c71",
      "parents": [
        "d04892d207d50378356feef181ac4e4eff9652d7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:25:12 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:50:20 2013 -0800"
      },
      "message": "Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\n\nThis reverts commit 6c0307dd0aefe9a08794b155fc03ee60ebd14f25, reversing\nchanges made to a2cd828b749c444d55c2c41c7dbb85088ff94b9f.\n\nConflicts:\n\tpackages/SystemUI/res/values-sv/strings.xml\n\nChange-Id: Ia178efe8b14751583d47b2826bfe3d3d5463dd2e\n"
    },
    {
      "commit": "4f0dd02d00107fedda0fe42978ed98855dc53b85",
      "tree": "e9839d314ac57b996f33a6f00ea4cd43eb9766c9",
      "parents": [
        "d04892d207d50378356feef181ac4e4eff9652d7",
        "36ee5485b85e34008dc31e0f7bace1b2516c5db5"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 12 15:54:02 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 12 15:54:02 2013 -0800"
      },
      "message": "am 36ee5485: am 5d5c05de: am b7a4aed9: am f70b8c1c: Merge \"Fix DateFormat for layoutlib.\" into jb-mr1.1-dev\n\n# Via Android Git Automerger (3) and others\n* commit \u002736ee5485b85e34008dc31e0f7bace1b2516c5db5\u0027:\n  Fix DateFormat for layoutlib.\n"
    },
    {
      "commit": "36ee5485b85e34008dc31e0f7bace1b2516c5db5",
      "tree": "cb1043e6d429b2978b799a46ae29c9a8f45ff4bd",
      "parents": [
        "2d130ceede3dd3af8bcc1d154fb086188c075803",
        "5d5c05dee9911eaf8add2d4298641e60f2a113d5"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 12 15:52:46 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 12 15:52:46 2013 -0800"
      },
      "message": "am 5d5c05de: am b7a4aed9: am f70b8c1c: Merge \"Fix DateFormat for layoutlib.\" into jb-mr1.1-dev\n\n# Via Android Git Automerger (2) and others\n* commit \u00275d5c05dee9911eaf8add2d4298641e60f2a113d5\u0027:\n  Fix DateFormat for layoutlib.\n"
    },
    {
      "commit": "47a021f7649799187e2d30d4d43e2363fd8f6bd3",
      "tree": "d89bd0ad73aa5b603a8c465fdfdb90aabcd4b056",
      "parents": [
        "7209135504313c27da4f277235e00db6851b9577"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 12 14:05:32 2013 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Feb 12 14:05:32 2013 -0800"
      },
      "message": "Fix DateFormat for layoutlib.\n\nChange-Id: I389c9d106b93b9f81dd3614398a5b66ba2b39a70\n"
    },
    {
      "commit": "23e500d168e8d649305445f6c1d2b49d8d2c00fd",
      "tree": "788e18e8fc63422b8cb20ea2b00c0ab73114d523",
      "parents": [
        "0984780bc7aed76018b9f88c0d9c3ce300bde39a",
        "6c0307dd0aefe9a08794b155fc03ee60ebd14f25"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 06 12:57:37 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 06 12:57:38 2013 +0000"
      },
      "message": "Merge \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\""
    },
    {
      "commit": "961321fe4ed4431a6362d729d9e4ea26bdecde61",
      "tree": "0ddcc0f94b7840ce752fd10a9e57b55c3f2c4d9b",
      "parents": [
        "f51f61269aacdfcf737b2c32b6b216c48ab61e65"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 05 17:22:41 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 05 17:22:41 2013 -0800"
      },
      "message": "App ops: add op for writing settings.\n\nAlso fix a build.\n\nAnd fix a bug that I think was introduced in the multi-user work\nthat removed the permission check for writing to settings...!\n\nChange-Id: I5945682faa789ffc78fd3546c0df7d03693f106d\n"
    },
    {
      "commit": "5cf6f8adfa2c0f83e09bdb4da9fc65f52e916292",
      "tree": "5da0195a467121b2564d20868be8d33872a684d2",
      "parents": [
        "f38a6fad79dd7a5213a9e902c5d1fa104cddb857",
        "573a18ccd883d18046dea600855d34f5c9a57fa8"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 29 02:15:48 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jan 29 02:15:48 2013 -0800"
      },
      "message": "am 573a18cc: Merge \"Fixing the build\"\n\n# Via Android (Google) Code Review (1) and Svetoslav (1)\n* commit \u0027573a18ccd883d18046dea600855d34f5c9a57fa8\u0027:\n  Fixing the build\n"
    },
    {
      "commit": "f5f7d9751a43b699b6e1c2e41ea0519bc54e39cd",
      "tree": "c7ab60fe6fd38933e8fe90587e3ce8997ed599d6",
      "parents": [
        "dc4271ce1d6e47a193fe0119ca180bd37f3d1311"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 29 02:08:54 2013 -0800"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jan 29 02:08:54 2013 -0800"
      },
      "message": "Fixing the build\n\nChange-Id: I8d47c7094efc8ff458cdac58a761d5f187c8fc32\n"
    },
    {
      "commit": "c152e16b07b3eb607d018a740f507af635db1e9d",
      "tree": "f3c02a8d24fa0948d80272e8a0d79f42d51dea1a",
      "parents": [
        "53277e977d7fff93eb4cc68e2aff0d9b319849f0",
        "8fea4e72e4dcff9fa76168b9e26cf5907102f70b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jan 18 16:20:40 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 18 16:20:40 2013 -0800"
      },
      "message": "am 8fea4e72: Merge \"Rework ParceledListSlice to be much easier to use.\"\n\n* commit \u00278fea4e72e4dcff9fa76168b9e26cf5907102f70b\u0027:\n  Rework ParceledListSlice to be much easier to use.\n"
    },
    {
      "commit": "d8e1dbb6bc1fbaf4f2e38c3ba92ced94270deaac",
      "tree": "5f6d8b2c0e66c99289ae085cb6a6a3be168eb000",
      "parents": [
        "f25febf01453733e8bdd1ac241ecd9d3bcbef475"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 17 17:47:37 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jan 18 13:02:26 2013 -0800"
      },
      "message": "Rework ParceledListSlice to be much easier to use.\n\nTake advantage of this to return better information about\npackages filtered by permissions -- include the permissions\nthey have in the requested array.\n\nAlso fix issue #8026793 (Contact picture shows default pic\nwhile searching for a contact in qsb) by using the base\npackage name of the Context when reporting the app name\nof an operation.  Otherwise you could make a resource-only\ncontext for another application and do calls through that\nand get reported as the wrong app.\n\nChange-Id: I5e0488bf773acea5a3d22f245641828e1a106fb8\n"
    },
    {
      "commit": "7ed6c6d83b3301280a2150f0697a2a631a0168ad",
      "tree": "d5fcce8959f43f85e6586257eb6b6ab6c096cf8b",
      "parents": [
        "9f7803cbcb8a7733f5861ac521e4358e9bdceab4",
        "35654b61e8fe7bc85afcb076ddbb590d51c5865f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 16 12:14:53 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jan 16 12:14:53 2013 -0800"
      },
      "message": "am 35654b61: More work on App Ops service.\n\n* commit \u002735654b61e8fe7bc85afcb076ddbb590d51c5865f\u0027:\n  More work on App Ops service.\n"
    },
    {
      "commit": "35654b61e8fe7bc85afcb076ddbb590d51c5865f",
      "tree": "0f42a90b4deaa0156d84df5d79b78cd6f2ac8807",
      "parents": [
        "8a8b047f2d28f6b2d728731a7e71eeaf16f89700"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jan 14 17:38:02 2013 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jan 16 12:11:01 2013 -0800"
      },
      "message": "More work on App Ops service.\n\nImplemented reading and writing state to retain information\nacross boots, API to retrieve state from it, improved location\nmanager interaction to monitor both coarse and fine access\nand only note operations when location data is being delivered\nback to app (not when it is just registering to get the data at\nsome time in the future).\n\nAlso implement tracking of read/write ops on contacts and the\ncall log.  This involved tweaking the content provider protocol\nto pass over the name of the calling package, and some\ninfrastructure in the ContentProvider transport to note incoming\ncalls with the app ops service.  The contacts provider and call\nlog provider turn this on for themselves.\n\nThis also implements some of the mechanics of being able to ignore\nincoming provider calls...  all that is left are some new APIs for\nthe real content provider implementation to be involved with\nproviding the correct behavior for query() (return an empty\ncursor with the right columns) and insert() (need to figure out\nwhat URI to return).\n\nChange-Id: I36ebbcd63dee58264a480f3d3786891ca7cbdb4c\n"
    },
    {
      "commit": "3cd80d949ca88fbef4d8da495992ac8855ad069c",
      "tree": "aec3904c6e390e94b9ac1995b2757e6931987843",
      "parents": [
        "95bdeddb97b2f14e115751041b7831f73d92a4cd",
        "72c6137a7aa5e5ada6a4aeca52f33d060742beb6"
      ],
      "author": {
        "name": "Tor Norbye",
        "email": "tnorbye@google.com",
        "time": "Fri Jan 04 16:05:18 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 04 16:05:18 2013 -0800"
      },
      "message": "am 72c6137a: Handle empty flag attributes, such as gravity\u003d\"\"\n\n* commit \u002772c6137a7aa5e5ada6a4aeca52f33d060742beb6\u0027:\n  Handle empty flag attributes, such as gravity\u003d\"\"\n"
    },
    {
      "commit": "72c6137a7aa5e5ada6a4aeca52f33d060742beb6",
      "tree": "a590aabb109f56de4a4e28d0ba80b7be82ff9e90",
      "parents": [
        "48f7cfb10622f8675741f36bdf5b1f679e3fe37c"
      ],
      "author": {
        "name": "Tor Norbye",
        "email": "tnorbye@google.com",
        "time": "Fri Jan 04 15:46:25 2013 -0800"
      },
      "committer": {
        "name": "Tor Norbye",
        "email": "tnorbye@google.com",
        "time": "Fri Jan 04 15:48:58 2013 -0800"
      },
      "message": "Handle empty flag attributes, such as gravity\u003d\"\"\n\nWithout this, an empty string will be passed into\nXmlUtils.convertValueToInt, which throws an\nindex out of range exception.\n\nChange-Id: Ibd1a140e207653b205852087f33ccb87fbbb9bbc\n"
    },
    {
      "commit": "2fa54cef47887808d006f473a7d4f8dd5fb76704",
      "tree": "bbb9393b5d3f45806ffa244e9cec64c5047e8efa",
      "parents": [
        "6805d4aa8262146594c81f37983a051c0b4b4674",
        "ca79cf69d09efa0c327e9b1237d86a119aea5da7"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Dec 19 06:17:59 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 19 06:18:11 2012 -0800"
      },
      "message": "Merge \"Update framework to support r5967 of Skia.\" into master-chromium"
    },
    {
      "commit": "330dd534848562515c6c67cb3de13067e86866a1",
      "tree": "718eba6eb3a7c17d399353bf0416334d343d8964",
      "parents": [
        "9e83ea46b78bde4d17136a7b410e7c14955c9955"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Dec 18 12:03:11 2012 -0500"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Dec 18 12:03:11 2012 -0500"
      },
      "message": "Remove remaining doc references to StyledAttributes.\n\nIt appears StyledAttributes was renamed to TypedArray\nprior to fw 1.0.  Leaving references to the old name\naround in the public docs is confusing.\n\nDeliberating leaving...\n   tests/coretests/src/android/widget/LabelView.java\n... as is - it\u0027s clearly unused.\n\nChange-Id: I3f66e5f9cbe945d9d86530d37b88369b401f054d\n"
    },
    {
      "commit": "2ec5093e5a908cea532e571aead6a5c024c553f7",
      "tree": "bf5a81d0c58871f86b5ae09278c7875dd8152f71",
      "parents": [
        "545252f4fde6fbb70b07e97a120c7d1405758017"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Dec 14 17:45:44 2012 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Dec 14 17:45:44 2012 -0800"
      },
      "message": "Fixing the build\n\nChange-Id: I01349d65ac5915da090cfb018f99e0a508f9d5ad\n"
    },
    {
      "commit": "ca79cf69d09efa0c327e9b1237d86a119aea5da7",
      "tree": "0fd02203babacee45f23ba19f869f869f3de0f54",
      "parents": [
        "dbc8cee1d500702bc8b1a8cb6a6c0961ab4ae0ed"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Aug 14 16:44:52 2012 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Dec 12 15:28:54 2012 -0500"
      },
      "message": "Update framework to support r5967 of Skia.\n\nbug: 6906025\nChange-Id: Iefdb830ec3aa2ab3472c1c142484a7aa21788a15\n"
    },
    {
      "commit": "f9ae5f75af259437391e41dac7f3c4461c495dd9",
      "tree": "f102e47b480849cf5b5140d73473629bfcd68265",
      "parents": [
        "dac257cd73cce3e63dd21267520660dd6869baf4",
        "23307cbb6b432b658b0fd7437dacfedd6298af94"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 03 16:08:35 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Dec 03 16:08:35 2012 -0800"
      },
      "message": "am 23307cbb: am e0a676a3: Merge \"Fix issue #7649590: Background windows sometimes not being hidden for secondary users\" into jb-mr1.1-dev\n\n* commit \u002723307cbb6b432b658b0fd7437dacfedd6298af94\u0027:\n  Fix issue #7649590: Background windows sometimes not being hidden for secondary users\n"
    },
    {
      "commit": "bb4ca5271a806c94a59d98c5c718db7b89728246",
      "tree": "26e3c86678c04445c774e7e5856dd8d0b3e896d1",
      "parents": [
        "f87488095e49028eb3be5a8a53a372e38eba537c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 03 14:09:06 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 03 14:09:06 2012 -0800"
      },
      "message": "Fix issue #7649590: Background windows sometimes not being hidden for secondary users\n\nThere are two things going on here:\n\n(1) In secondary users, some times theme information such as whether\nthe window is full screen opaque was not being retrieved, so the window\nmanager didn\u0027t know that it could hide the windows behind the app.\nThis would just be a performance problem, except that:\n\n(2) There appear to be a number of applications that declare that they\nare full screen opaque, when in fact they are not.  Instead they are\nusing window surfaces with an alpha channel, and setting some pixels\nin their window to a non-opaque alpha level.  This will allow you to\nsee whatever is behind the app.  If the system happens to completely\nremove the windows behind the app, and somebody is filling the frame\nbuffer with black, then you will see what the app intends -- those\nparts of its UI blended with black.  If one of those cases doesn\u0027t\nhold (and though we have never guaranteed they would, in practice this\nis generally what happens), then you will see something else.\n\nAt any rate, if nothing else than for performance reasons, we need to\nfix issue #1.\n\nIt turns out what is happening here is that the AttributeCache used\nby the activity manager and window manager to retreive theme and other\ninformation about applications has not yet been updated for multi-user.\n\nOne of the things we retrieve from this is the theme information telling\nthe window manager whether an application\u0027s window should be treated\nas full screen opaque, allowing it to hide any windows behind it.  In\nthe current implementation, the AttributeCache always retrieves this\ninformation about the application as the primary user (user 0).\n\nSo, if you have an application that is installed on a secondary user but\nnot installed on the primary user, when the AttributeCache tries to retrieve\nthe requested information for it, then from the perspective of the primary user\nit considers the application not installed, and is not able to retrieve that\ninfo.\n\nThe change here makes AttributeCache multi-user aware, keeping all of its\ndata separately per-user, and requiring that callers now provide the user\nthey want to retrieve information for.  Activity manager and window manager\nare updated to be able to pass in the user when needed.  This required some\nfiddling of the window manager to have that information available -- in\nparticular it needs to be associated with the AppWindowToken.\n\nChange-Id: I4b50b4b3a41bab9d4689e61f3584778e451343c8\n"
    },
    {
      "commit": "152e9bb81aa5b2ab4637f4b2dae04b3ce89fa891",
      "tree": "8e955c6db3279776dc6795e125513c4f2877ea44",
      "parents": [
        "4d58730ff587645778636e87312b1b17846fcac9"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Oct 12 20:15:29 2012 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Dec 03 10:38:48 2012 -0800"
      },
      "message": "Refactoring of the screen magnification feature.\n\n1. The screen magnification feature was implemented entirely as a part of the accessibility\n   manager. To achieve that the window manager had to implement a bunch of hooks for an\n   external client to observe its internal state. This was problematic since it dilutes\n   the window manager interface and allows code that is deeply coupled with the window\n   manager to reside outside of it. Also the observer callbacks were IPCs which cannot\n   be called with the window manager\u0027s lock held. To avoid that the window manager had\n   to post messages requesting notification of interested parties which makes the code\n   consuming the callbacks to run asynchronously of the window manager. This causes timing\n   issues and adds unnecessary complexity.\n\n   Now the magnification logic is split in two halves. The first half that is responsible\n   to track the magnified portion of the screen and serve as a policy which windows can be\n   magnified and it is a part of the window manager. This part exposes higher level APIs\n   allowing interested parties with the right permissions to control the magnification\n   of a given display. The APIs also allow a client to be registered for callbacks on\n   interesting changes such as resize of the magnified region, etc. This part servers\n   as a mediator between magnification controllers and the window manager.\n\n   The second half is a controller that is responsible to drive the magnification\n   state based on touch interactions. It also presents a highlight when magnified to\n   suggest the magnified potion of the screen. The controller is responsible for auto\n   zooming out in case the user context changes - rotation, new actitivity. The controller\n   also auto pans if a dialog appears and it does not interesect the magnified frame.\n\nbug:7410464\n\n2. By design screen magnification and touch exploration work separately and together. If\n   magnification is enabled the user sees a larger version of the widgets and a sub section\n   of the screen content. Accessibility services use the introspection APIs to \"see\" what\n   is on the screen so they can speak it, navigate to the next item in response to a\n   gesture, etc. Hence, the information returned to accessibility services has to reflect\n   what a sighted user would see on the screen. Therefore, if the screen is magnified\n   we need to adjust the bounds and position of the infos describing views in a magnified\n   window such that the info bounds are equivalent to what the user sees.\n\n   To improve performance we keep accessibility node info caches in the client process.\n   However, when magnification state changes we have to clear these caches since the\n   bounds of the cached infos no longer reflect the screen content which just got smaller\n   or larger.\n\n   This patch propagates not only the window scale as before but also the X/Y pan and the\n   bounds of the magnified portion of the screen to the introspected app. This information\n   is used to adjust the bounds of the node infos coming from this window such that the\n   reported bounds are the same as the user sees not as the app thinks they are. Note that\n   if magnification is enabled we zoom the content and pan it along the X and Y axis. Also\n   recomputed is the isVisibleToUser property of the reported info since in a magnified\n   state the user sees a subset of the window content and the views not in the magnified\n   viewport should be reported as not visible to the user.\n\nbug:7344059\n\nChange-Id: I6f7832c7a6a65c5368b390eb1f1518d0c7afd7d2\n"
    },
    {
      "commit": "061b4fae3daf40c90b46e16b12e7f22142eb498c",
      "tree": "152e92dd48a0043fae26e6bc18e524f847f3d617",
      "parents": [
        "70eeec5c06db3bf38e94d95a284d393e79bf87a0",
        "a2bf6181dfca0f93461fc041f2bd2444551a4515"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Thu Nov 08 15:47:04 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 08 15:47:04 2012 -0800"
      },
      "message": "am a2bf6181: am 2c29deaa: am 6be441c5: Merge \"Add mechanism to kick keyguard to show the assistant\" into jb-mr1-lockscreen-dev\n\n* commit \u0027a2bf6181dfca0f93461fc041f2bd2444551a4515\u0027:\n  Add mechanism to kick keyguard to show the assistant\n"
    },
    {
      "commit": "bef827572ce9644253ea42ab91b11b8107d2300f",
      "tree": "91d080b4f6530643a26032fdf8c927ca85cc9bc3",
      "parents": [
        "6b646e82050c4364b400c1780b70131eea200439",
        "c7dc250d5a3dab93ff87e9986a71ae58ff124399"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Thu Nov 08 15:32:09 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Nov 08 15:32:09 2012 -0800"
      },
      "message": "am c7dc250d: am fe7e94a0: am 088fb915: Merge \"Add isSafeModeEnabled() API to WindowManagerService\" into jb-mr1-lockscreen-dev\n\n* commit \u0027c7dc250d5a3dab93ff87e9986a71ae58ff124399\u0027:\n  Add isSafeModeEnabled() API to WindowManagerService\n"
    },
    {
      "commit": "4eeb4f664ac6b5901a8e874dcf70c0382295f792",
      "tree": "8b8ff28c8f7aec9bffc45eb32eae82a013d259d1",
      "parents": [
        "838195db8f69968690971977e4b615df39504465"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Thu Nov 08 00:04:29 2012 -0800"
      },
      "committer": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Thu Nov 08 00:39:04 2012 -0800"
      },
      "message": "Add mechanism to kick keyguard to show the assistant\n\nFixes bug 7499778\n\nChange-Id: Ic9ea514feb489feeee6716f40bdb9792842f9515\n"
    },
    {
      "commit": "58ed5d748c0b9b64845975ef5844ad313de7c3f6",
      "tree": "507af3879bc894eb854712a1fe6c0953805a895c",
      "parents": [
        "9197d170b770f2b87abd0cd0e13dcf71e5a181c2",
        "768d9e1a72ceee7d4a5f608776b87b62d6ce4a04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "message": "am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u0027768d9e1a72ceee7d4a5f608776b87b62d6ce4a04\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "3a084af2e90849aaa8beb3a610189e3399c63ea0",
      "tree": "ba4b87d227674fd68f9ea395649fde32778620f0",
      "parents": [
        "9d547d6934f64189e368c0b190fb4cf49c95a557"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:19:47 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:27:31 2012 -0800"
      },
      "message": "Correct executable bit for source files\n\nMany media files and source code files were marked as executable in Git.\nRemove those.\n\nAlso a shell script and python script were not marked as executable.\n\nChange-Id: Ieb51bafb46c895a21d2e83696f5a901ba752b2c5\n"
    },
    {
      "commit": "bfec0a8616bc197ee3b7b71be6fed1939d0c3c4d",
      "tree": "72832bb9442488065ceae24e5d1ade9297d9f584",
      "parents": [
        "bb8abae507119612b4168b951354516b0bf7112d"
      ],
      "author": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Mon Nov 05 20:05:22 2012 -0800"
      },
      "committer": {
        "name": "Jim Miller",
        "email": "jaggies@google.com",
        "time": "Mon Nov 05 20:27:38 2012 -0800"
      },
      "message": "Add isSafeModeEnabled() API to WindowManagerService\n\nThis adds a means of determining when the device is in safe mode,\nas required by keyguard to disabled some features.\n\nChange-Id: I31d357e6738c92e1837f9e0263e5f3f4de66315a\n"
    },
    {
      "commit": "c48b0b940d632b9862ff6aa32665e37fe9e50845",
      "tree": "409e0ace2155f38c196a12f2e4e28282bfb9fde5",
      "parents": [
        "891b703f7b1e0e396d16477cc66a286da7161b49"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Oct 17 18:38:49 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Oct 18 13:59:51 2012 -0700"
      },
      "message": "Layoutlib: Read and close XML files as soon as possible.\n\nBecause passing an InputStream to KXML does not close the\nstream after the file has been parsed, the files are staying\nlocked on windows until the gc and finalizers are run.\n\nThis change preload the XML files and close their stream,\nand then pass the content in a stream to the parser.\n\nChange-Id: Iabe27989dc616ec9e7de88e52b1ec3af9f007f7c\n"
    },
    {
      "commit": "891b703f7b1e0e396d16477cc66a286da7161b49",
      "tree": "9014f76e1ca354199b55e224eabd246cc9e022f2",
      "parents": [
        "e13ae648504661ca158d15aa415568e351b380c4"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Oct 16 19:56:03 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Oct 17 17:15:31 2012 -0700"
      },
      "message": "Update layoutlib for jb mr1.\n\nStatus bar displayed on all devices.\nUpdate logic for displaying nav bar to whether or not\ndevice has soft button.\n\nUpdate navigation buttons to new look.\nRemove battery and signal from navigation bar.\n\nChange-Id: I8241d71269a17126218a3062ba727e379a8e6c25\n"
    },
    {
      "commit": "6dfd0b39a63559999a769f93d5cdb48abe675344",
      "tree": "359dca57c2f65588bfdf06ccad73e63171829063",
      "parents": [
        "732d88e14e4418feba1b80cf1d6010cddb1d5de5"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Oct 15 14:38:31 2012 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Mon Oct 15 15:14:44 2012 -0700"
      },
      "message": "Fix SDK layout rendering in Eclipse.\n\nChange-Id: I0e9e85632012c0929b987ee9d0ccf7c25eece322\n"
    },
    {
      "commit": "33877e15b8bfc50bd874027689a4794aa93b923d",
      "tree": "f2315456796e88f0623bf4fed1f2a43a49f3696d",
      "parents": [
        "786d10921b2c525ed22b78ec40ae2554eec85912",
        "5962b12bedc4a1d0354816c1cd6b06ba04f6d807"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Sun Oct 07 11:48:49 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Oct 07 11:48:50 2012 -0700"
      },
      "message": "Merge \"Adds showWhenLocked attribute to Activities.\" into jb-mr1-dev"
    },
    {
      "commit": "5962b12bedc4a1d0354816c1cd6b06ba04f6d807",
      "tree": "b9918fad07cf0e0ff84d510b6e17b31cf48394f9",
      "parents": [
        "88400d3a31139c40c4014faf86c243647087ef6c"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Fri Oct 05 14:45:52 2012 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Sat Oct 06 13:09:58 2012 -0700"
      },
      "message": "Adds showWhenLocked attribute to Activities.\n\nThe new attribute allows an Activity such as the alarm to appear\non all users screens.\n\nBug: 7213805 fixed.\nChange-Id: If7866b13d88c04af07debc69e0e875d0adc6050a\n"
    },
    {
      "commit": "c38c9be031ddad5cf551b55458889f11e01dc5b2",
      "tree": "12902e6c1bf90145600bebe0aaa847cd243025f6",
      "parents": [
        "b29088540b2ecb3046277fbeb5ee1c87abe74d95"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Oct 04 13:16:19 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 05 14:39:23 2012 -0700"
      },
      "message": "Coordinate screen on with the window manager.\n\nBug: 7267457\nChange-Id: Ic2c322253639e1f0b2e4e72a7b145025d0240f93\n"
    },
    {
      "commit": "f752202bee88e31ce765483ba2efa6999ae9c9ad",
      "tree": "bdab562d4383a67f3806617d2ca3aa3e53862d67",
      "parents": [
        "17f36d154f1a8ebe72fc35af332f5c0069503364"
      ],
      "author": {
        "name": "Adam Cohen",
        "email": "adamcohen@google.com",
        "time": "Wed Oct 03 20:03:18 2012 -0700"
      },
      "committer": {
        "name": "Adam Cohen",
        "email": "adamcohen@google.com",
        "time": "Thu Oct 04 17:53:01 2012 -0700"
      },
      "message": "Plumbing to allow keyguard to be shown with user switcher (issue 7175023)\n\n-\u003e Also reduced calls to lockNow, and moved this call in ActivityManagerService\n\nChange-Id: I9ba34ca902f7c0f71fa4ec302104688ca8d11f55\n"
    },
    {
      "commit": "c428aae6429c3fd5e2037c3793af399d9f6e23bf",
      "tree": "ea5452cc311e5440b6e3dbce5f856fbc8915b653",
      "parents": [
        "2e307a61a3730e6b65906f575d85258b197e3494"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Oct 03 16:38:22 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Oct 03 18:07:23 2012 -0700"
      },
      "message": "Fix issue #7267494, issue #7212347\n\n7267494 Calendar is not syncing\nCheck for whether a content provider is dead before returning\nit.  This is kind-of a band-aid, but probably the right thing\nto do; I\u0027m just not sure exactly the full details of why this\nproblem is happening.  Hopefully this \"fixes\" it, though I don\u0027t\nhave a way to repro to tell.\n\n7212347 System power off dialog is only visible to user 0\nMake it visible.  Also turn on some battery debugging stuff and\nclean it up so we can just keep it.\n\nChange-Id: I5add25bf2a763c8dfe1df23bc5c753a9ea5d157a\n"
    },
    {
      "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": "54059cd38de24bbffc2525b56955535df73bf1eb",
      "tree": "693abe2c8ae261ba276ef46f72e9c7b16cb2adf4",
      "parents": [
        "23316a1ef8868bc641ed72d42839c20b7b86fadb",
        "15c15eaac51c0c375d18fb70cd1bd066d87b034e"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Jul 10 18:38:21 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 10 18:38:21 2012 -0700"
      },
      "message": "am 15c15eaa: Merge \"Replace LruCache implementation for layoutlib. do not merge.\" into jb-dev\n\n* commit \u002715c15eaac51c0c375d18fb70cd1bd066d87b034e\u0027:\n  Replace LruCache implementation for layoutlib. do not merge.\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": "54a18ef7ad9da65a95f4d383952ae6268f8a4f34",
      "tree": "627ce814923bcd9cedc56c43b57faeddd2f1bea5",
      "parents": [
        "40a4ab130a3e3c99afb1a57e9aa30de03a89b51e"
      ],
      "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 12:51:30 2012 -0700"
      },
      "message": "Replace LruCache implementation for layoutlib. do not merge.\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\n(cherry picked from commit 01b6c755dbcf24e71192dc44757e2eea2a426091)\n\nChange-Id: Idc7bca820e472e281a3024a5b610fd55606cf428\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"
    }
  ],
  "next": "652b6d1e591f6684cda4b93d4712920f287991b4"
}
