)]}'
{
  "log": [
    {
      "commit": "0116136f4ca252c31a96a055eea4be8a52b32f3b",
      "tree": "00ea5a7be96d6286323db96ffa605ebf6a71bf5d",
      "parents": [
        "2ecaedd96cdcd0c83afa042cb8ff8e4358afa3cf",
        "812b19a425b8304ac9e5408cc8ceb9f363c72559"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Sep 04 16:29:28 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 04 16:29:28 2012 -0700"
      },
      "message": "Merge \"installd: reduce privileges.\" into jb-mr1-dev"
    },
    {
      "commit": "812b19a425b8304ac9e5408cc8ceb9f363c72559",
      "tree": "6463a4310d8e3f715988788833bfa51e6ea62689",
      "parents": [
        "e94831e5ed4aa3b1ebc5444cc1b16cdab8cb92f8"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Aug 31 16:08:06 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Sep 04 14:58:22 2012 -0700"
      },
      "message": "installd: reduce privileges.\n\nMake installd run with fewer privileges. This will help make\nexploitation of installd based vulnerabilities more difficult\nto perform.\n\ninstalld now runs with the following privileges:\n\n* CAP_DAC_OVERRIDE\n* CAP_CHOWN\n\nThese two capabilities are needed to add and remove files\nfrom application\u0027s home directories.\n\n* CAP_SETUID\n* CAP_SETGID\n\nThese permissions are needed to further drop privileges when\nrunning dexopt as the application UID.\n\n\"installd\" no longer runs with full root privileges.  It cannot,\nfor example, mount and unmount filesystems, install modules,\nperform direct I/O, etc.\n\nChange-Id: Ib407e41e5e4c95f35a5c6a154812c5e8ae3006ed\n"
    },
    {
      "commit": "e2bdca5c4330b6bc9cc26480ae4c1eefe5ee9ce9",
      "tree": "73aa5b32f41bea32f379145db03291b021226ac4",
      "parents": [
        "52fba38f7d155e22e7487fc173243b4df2a9e76a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 11:13:41 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 11:13:41 2012 -0700"
      },
      "message": "Fix my fix.\n\nChange-Id: I35fce760f8d91fceb554d372e7423749a4ac6d2d\n"
    },
    {
      "commit": "52fba38f7d155e22e7487fc173243b4df2a9e76a",
      "tree": "7b5e68bf029e89086643f812bcbf3a88acbedc98",
      "parents": [
        "7d69e8bd2168a81a5cb68da99d025c6f290bf166"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 11:08:43 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 04 11:08:43 2012 -0700"
      },
      "message": "Fix build.\n\nChange-Id: I15592889b8679d946e402dcfdeb124df349cbd4d\n"
    },
    {
      "commit": "4120375d46091df8527bb701882e056fbb0e6b06",
      "tree": "30a3e6bb32f1912b8ab687e2ede8cb1cb18fe908",
      "parents": [
        "176d105d2f71198966b566d36d4e856a797695c7"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 31 14:05:51 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 31 15:11:13 2012 -0700"
      },
      "message": "Remove Binder.getOrigCallingUid().\n\nReplaced all remaining places that used it with explicit user\nspecification.\n\nWhile doing this, I ran into stuff that was creating PendingIntent\nobjects (that now need to specify the explicit user they are for),\nwhich are also posting notifications...  but have no way to specify\nthe user for the notification.\n\nSo the notification manager in the system process now also gets a\nformal concept of a user associated with the notification, which\nis passed in to all the necessary aidl calls.  I also removed the\nold deprecated aidl interface for posting/cancelling notifications,\nsince we now always need a user supplied.\n\nThere is more work that needs to be done here, though.  For example\nI think we need to be able to specify USER_ALL for a notification that\nshould be shown to all users (such as low storage or low battery).\nAlong with that, the PendingIntent creation needs to be tweaked to\nbe able to handle USER_CURRENT by evaluating the user at the point the\npending intent is sent.\n\nThat\u0027s for another change, however.\n\nChange-Id: I468e14dce8def0e13e0870571e7c31ed32b6310c\n"
    },
    {
      "commit": "e671ccec0f4d0fc5fe11ffc9b3b40637e6d2ddda",
      "tree": "00d9b0d408a578da28260dc91bc2be965475de49",
      "parents": [
        "c0c1c94e2df33ca8b85bb25fa89bf8379f9a6415",
        "8ea0dc6a89b011d4f478c0c8192570d69cf7ce79"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 30 10:28:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 30 10:28:52 2012 -0700"
      },
      "message": "Merge \"Shared OBB storage across users.\" into jb-mr1-dev"
    },
    {
      "commit": "8ea0dc6a89b011d4f478c0c8192570d69cf7ce79",
      "tree": "9fc56f81dbfa266e1b92d5c4fc88e1140143f247",
      "parents": [
        "0d43c567cea30e6fb7af0f7adadb1c620339c0f5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 27 15:46:54 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 29 16:20:03 2012 -0700"
      },
      "message": "Shared OBB storage across users.\n\nTo avoid downloading large OBB files separately for each user,\nprovide a shared view of /sdcard/Android/obb to all apps.  Added\nupgrade step to migrate the owners existing OBB files to become\nthe default view.\n\nBug: 7008879\nChange-Id: I199321552fa7d4b97d5ed7fc3b3bc41f23618601\n"
    },
    {
      "commit": "80a4af2bbc6af42ae605e454bf89558e564f5244",
      "tree": "3cd054c0e9576c9fda33fc36670ef10458f71ee8",
      "parents": [
        "def8b0f011b5b2b02235063d5021ddfd58aa0baf"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 19:18:31 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 28 16:30:55 2012 -0700"
      },
      "message": "Start implementing concept of \"running\" users.\n\nThe activity manager now keeps track of which users are running.\n\nInitially, only user 0 is running.\n\nWhen you switch to another user, that user is started so it is\nrunning.  It is only at this point that BOOT_COMPLETED is sent\nfor that user and it is allowed to execute anything.\n\nYou can stop any user except user 0, which brings it back to the\nsame state as when you first boot the device.  This is also used\nto be able to more cleaning delete a user, by first stopping it\nbefore removing its data.\n\nThere is a new broadcast ACTION_USER_STOPPED sent when a user is\nstopped; system services need to handle this like they currently\nhandle ACTION_PACKAGE_RESTARTED when individual packages are\nrestarted.\n\nChange-Id: I89adbd7cbaf4a0bb72ea201385f93477f40a4119\n"
    },
    {
      "commit": "ac66d4a8d653331a03c27d5444467fd943503c9b",
      "tree": "9ada9edb5caf7d685b2b664826c7ac6b6e4e9fad",
      "parents": [
        "f920271828f654dec2a72240e73a940247f25315",
        "0b722fe9ce98d97dbcb6fefd170b85ab7037e528"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 27 17:15:25 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 27 17:15:25 2012 -0700"
      },
      "message": "Merge \"Use new surface flinger API.\" into jb-mr1-dev"
    },
    {
      "commit": "0e17e5bc43373ff9dd8d567f876a26f990ed638e",
      "tree": "344da2d01806715678bede4ec7f4c3d04eb21ead",
      "parents": [
        "40edfc97795e34b1f24b15ca8f0ccba37fa1efbc",
        "786b44046a79d6c4c9cd07f5989d491c7196ad80"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 15:59:56 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 27 15:59:56 2012 -0700"
      },
      "message": "Merge \"Fix installing applications from non-primary users.\" into jb-mr1-dev"
    },
    {
      "commit": "786b44046a79d6c4c9cd07f5989d491c7196ad80",
      "tree": "ac3d22036260f4e56340903c4ae71f8f7c81e8fe",
      "parents": [
        "9d9ea05cde56f6663f57925212c87860d1cbc1b2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 15:14:02 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 15:16:33 2012 -0700"
      },
      "message": "Fix installing applications from non-primary users.\n\nWe also now send the correct broadcasts to each user.\n\nYou no longer need to be running the shell as root\nto be able to create/remove users.\n\nAlso added some more man page material to the pm command, and\ngot rid of a bunch of showUsage() calls that now make error\nmessages completely buried because of how large the usage info\nhas become.\n\nAnd the package manager now shows the user each historical broadcast\nwas sent to.\n\nChange-Id: Iab42498e1352a0c023069139c80fc04d2d69ab4b\n"
    },
    {
      "commit": "0b722fe9ce98d97dbcb6fefd170b85ab7037e528",
      "tree": "67b40b76ec957ba919dd9e7d9b450fa7d2b2bfd9",
      "parents": [
        "d59db50ab0c3c7a232b2a564e763ca46c6f6ebfa"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Aug 24 22:40:14 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Aug 27 14:34:53 2012 -0700"
      },
      "message": "Use new surface flinger API.\n\nChange-Id: Ic888577408a59a36481a48010e19c5e77c24e211\n"
    },
    {
      "commit": "62e2709c3ff91760108c31e6f60fcf57c8c8da46",
      "tree": "370f1898ef0dfce341f0f28e3bc656d8b43d47f7",
      "parents": [
        "9d9ea05cde56f6663f57925212c87860d1cbc1b2",
        "dc9b0128c52cc797847240e81ebc6de75229a3ab"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 27 11:42:30 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 27 11:42:30 2012 -0700"
      },
      "message": "Merge \"Ensure /data/media before trying to upgrade.\" into jb-mr1-dev"
    },
    {
      "commit": "dc9b0128c52cc797847240e81ebc6de75229a3ab",
      "tree": "6169a10209cdc666c920a0fdb88a7e7b72b9e810",
      "parents": [
        "080ca09c7f4c0033d0efece23687b71f7f8febc9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 27 11:41:55 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 27 11:41:55 2012 -0700"
      },
      "message": "Ensure /data/media before trying to upgrade.\n\nMost devices create the path in their init.rc, but create it just\nto be sure.  This fixes emulator boot failure.\n\nBug: 7058844\nChange-Id: Icab3ce11c4304d972d13e1d9a0c269cfe05b9370\n"
    },
    {
      "commit": "7e0e19d4201374d72b7082492bd269dbdb17d972",
      "tree": "32b9080c4bf6da4ed4fb51fc46dbbefdaf1b5b92",
      "parents": [
        "71d7c3c628fbce04b8bdb60f127588ada00bae13"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 10:57:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 27 10:57:30 2012 -0700"
      },
      "message": "Restore man page entries.\n\nChange-Id: I002808037ec117c039aeb71f425c1f43d4cac6d8\n"
    },
    {
      "commit": "a31803fca6c61486e88d742a8ff58f178195f980",
      "tree": "26c5f9b3e72f70d25bc5dca7f8e9cfccf424d6fa",
      "parents": [
        "65e08d25faced6059b873c9b175b683ee305dc8b",
        "7767eac3232ba2fb9828766813cdb481d6a97584"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 24 14:36:21 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 24 14:36:22 2012 -0700"
      },
      "message": "Merge \"Keep track of whether an app is installed for each user.\" into jb-mr1-dev"
    },
    {
      "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": "794d62f6078d23ff32f098f9d472f492be01b72f",
      "tree": "1217fe0b7a7ce88e1c7fbf8efb0e98e6ea864b17",
      "parents": [
        "2c1dfa29b40a988e3ea8f6922768465743aafddc"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Aug 24 12:58:27 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Aug 24 12:58:27 2012 -0700"
      },
      "message": "Fix permissions on cloned data dirs\n\nThis makes the downloaded apk visible to the package installer\n\nChange-Id: I0f60cf279a3c6a08c7479f93ef9135d7428f2385\n"
    },
    {
      "commit": "0c3804950236fe170ebf6cc7a5f1e3e305b8f315",
      "tree": "832ea4ab2c17fe568df894aa3ed7438a01d97533",
      "parents": [
        "a5d5d608ccd885d8328879dde782a8cc93b7cf4f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Aug 20 17:23:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 21 10:34:20 2012 -0700"
      },
      "message": "Improve multi-user app management.\n\nIntroduce API to get per-user storage information, keep track\nof services associated with users, and various small cleanup.\n\nChange-Id: I5d4e784e7ff3cccfed627d66a090d2f464202634\n"
    },
    {
      "commit": "a5d5d608ccd885d8328879dde782a8cc93b7cf4f",
      "tree": "fa07d3db774f101e8f55210c47bf7d1b8232e63b",
      "parents": [
        "33da458dd832996d8b0ae945d6ab2896faff4afa",
        "37a37f445cbcd64376af153dd79ea2a123d9405d"
      ],
      "author": {
        "name": "Brian Muramatsu",
        "email": "btmura@google.com",
        "time": "Mon Aug 20 16:57:13 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 20 16:57:14 2012 -0700"
      },
      "message": "Merge \"add wireless charger support\" into jb-mr1-dev"
    },
    {
      "commit": "706e8ba26bf0de19ad5f736516dae40c4c88c2d7",
      "tree": "2c45b61e1420f9a7442de8517b1eca6802d507c0",
      "parents": [
        "99de2459e200e0c86d55d5eee7ea000fd030990f"
      ],
      "author": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Mon Aug 20 13:20:14 2012 -0700"
      },
      "committer": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Mon Aug 20 13:20:14 2012 -0700"
      },
      "message": "Pass URLs to package verifiers\n\nThis change passes the originating URL and accompanied referrer to\npackage verifiers, when available.\n\nBug: 6544677\nChange-Id: I9ebc71bc13f549bd88267e444816151a99bda000\n"
    },
    {
      "commit": "37a37f445cbcd64376af153dd79ea2a123d9405d",
      "tree": "7b2ae5f75d4c6bff056472da64752473e1d211f9",
      "parents": [
        "82d53ce283b7c275624d66e9bf20cfe2614af5c4"
      ],
      "author": {
        "name": "Brian Muramatsu",
        "email": "btmura@google.com",
        "time": "Tue Aug 14 15:21:02 2012 -0700"
      },
      "committer": {
        "name": "Brian Muramatsu",
        "email": "btmura@google.com",
        "time": "Mon Aug 20 10:04:12 2012 -0700"
      },
      "message": "add wireless charger support\n\nbug: 6879638\n\n- add new enum value BATTERY_PLUGGED_WIRELESS\n- check for sys online file with contents \"Wireless\"\n\nChange-Id: I22dc3c40f50573c98643e7b5cbcb237d0216530d\n"
    },
    {
      "commit": "91bbb8a1e9f8b4324fd086fa9b26a4e9fe57569b",
      "tree": "7ff82c8ef886380f52271db950d98bbbffeb0ad9",
      "parents": [
        "cc48c144bb0c15e003d1b9469c87a2c132ea6308"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 16 23:28:50 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 16 23:29:34 2012 -0700"
      },
      "message": "Create media paths for existing users.\n\nBug: 6925012\nChange-Id: I23bd9187217645cf538e074527c143a911a61299\n"
    },
    {
      "commit": "c584b65b2093396c9a0c9303dab6ff6cb81ac315",
      "tree": "1cb29ffba0fa43c4fcb9ebe6603c5891853a36f2",
      "parents": [
        "a579f7926af72597f1c11c5df0486253d5d2c435",
        "5b1ada2562c17921adf6a62ea62bcb445160983c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Aug 16 14:32:38 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Aug 16 14:32:39 2012 -0700"
      },
      "message": "Merge \"Multi-user external storage support.\" into jb-mr1-dev"
    },
    {
      "commit": "5b1ada2562c17921adf6a62ea62bcb445160983c",
      "tree": "de45aa88e185f4ce052df43acf486e77778adcfb",
      "parents": [
        "4d1988699b11a9409015ef38a825d0de841a1d0f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 14 18:47:09 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 15 19:45:53 2012 -0700"
      },
      "message": "Multi-user external storage support.\n\nEmulated external storage always has multi-user support using paths\nlike \"/data/media/\u003cuser_id\u003e\".  Creates and destroys these paths along\nwith user data.  Uses new ensure_dir() to create directories while\nalways ensuring permissions.\n\nAdd external storage mount mode to zygote, supporting both single-\nand multi-user devices.  For example, devices with physical SD cards\nare treated as single-user.  Begin migrating to mount mode instead\nof relying on sdcard_r GID to enforce READ_EXTERNAL_STORAGE.\n\nBug: 6925012\nChange-Id: I9b872ded992cd078e2c013567d59f9f0032ec02b\n"
    },
    {
      "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": "258848d2ae04f447ff1c18023fa76b139fcc0862",
      "tree": "8736421f4007d81206d0f0ea8b32a2013508976a",
      "parents": [
        "75f0fac91bd7fa67fa76cfdd4e163b9f35be0432"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Aug 10 17:06:33 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Aug 11 18:24:07 2012 -0700"
      },
      "message": "User Manager service to manage users and query user details\n\nMoved a bunch of methods from PackageManager to UserManager.\n\nFix launching of activities from recents to correct user.\n\nGuest creation APIs\n\nChange-Id: I0733405e6eb2829675665e225c759d6baa2b708f\n"
    },
    {
      "commit": "a56d9cecee8a34e0554770ac6253dd3a76b9199c",
      "tree": "3e617e7c34c9dafec25b373af7cd392154881b19",
      "parents": [
        "f007bd3cf8cacd75287781c1bb37fe4167c79cba",
        "e1d7c711df3e3a2d2f195457882aa4ddb5626167"
      ],
      "author": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Wed Aug 08 13:50:55 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 08 13:50:56 2012 -0700"
      },
      "message": "Merge \"Revert \"Pass URLs to package verifiers\"\" into jb-mr1-dev"
    },
    {
      "commit": "e1d7c711df3e3a2d2f195457882aa4ddb5626167",
      "tree": "d27b6e508c1bdbd29028034471ee46acfe5d6cf8",
      "parents": [
        "24713907fe4632d263aea82f7a35c8fb08918a09"
      ],
      "author": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Wed Aug 08 12:46:06 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Aug 08 12:46:06 2012 -0700"
      },
      "message": "Revert \"Pass URLs to package verifiers\"\n\nThis reverts commit 24713907fe4632d263aea82f7a35c8fb08918a09\n\nChange-Id: Ie04ba73475b813635c4a74915c45e83250801b6b\n"
    },
    {
      "commit": "dde331cebd87982faded6818ad5f9927ff994c96",
      "tree": "c2f9c4c62113fc93948d3988fc09cc3727c4b9ca",
      "parents": [
        "5345c310af8363948cee6a91d11add3ec51e8a9c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 03 14:01:57 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 03 17:27:29 2012 -0700"
      },
      "message": "We can now (kind-of) change screen density on the fly.\n\nPreloaded drawables now have a density associated with them, so we\ncan load the correct drawable if we are using a different density.\n\nWindow manager now formally keeps track of the density for each\nscreen, allowing it to be overridden like you can already do with\nsize, and relies on this density to drive itself internally and\nthe configurations it reports.\n\nThere are a new set of Bitmap constructors where you provide a\nDisplayMetrics so they can be constructed with the correct density.\n(This will be for when you can have different windows in the same\napp running at different densities.)\n\nActivityThread now watches for density changes, and pushes them\nto the DENSITY_DEVICE and Bitmap global density values for that\nprocess.\n\nA new am command allows you to change the density.\n"
    },
    {
      "commit": "24713907fe4632d263aea82f7a35c8fb08918a09",
      "tree": "fbf80caed2388c579d64b20b86b9b9f2586b1640",
      "parents": [
        "26ea2e5df58edfd14717c86854f6bb99975b6a77"
      ],
      "author": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Thu Jul 26 14:07:53 2012 -0700"
      },
      "committer": {
        "name": "rich cannings",
        "email": "richc@google.com",
        "time": "Thu Aug 02 11:26:47 2012 -0700"
      },
      "message": "Pass URLs to package verifiers\n\nThis change passes the originating URL and accompanied referrer to\npackage verifiers, when available.\n\nBug: 6544677\nChange-Id: If9ff6663ad7f3426b7aea2aceb1413b689788138\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": "00efe44923af27094cfc201064ed920f93b0bde0",
      "tree": "262eca9afafe36ecd55ee4e2202466244e7b4acd",
      "parents": [
        "36b536be60b48ba119c85d7c4a1bed41a30fb4b1",
        "b3e4b46db028c35d6d12c5f8f25b0463833fb51d"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 31 09:36:17 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 31 09:36:17 2012 -0700"
      },
      "message": "am b3e4b46d: am e583bcf1: Merge \"Explicitly set lib dir permissions during unlink\" into jb-dev\n\n* commit \u0027b3e4b46db028c35d6d12c5f8f25b0463833fb51d\u0027:\n  Explicitly set lib dir permissions during unlink\n"
    },
    {
      "commit": "b3e4b46db028c35d6d12c5f8f25b0463833fb51d",
      "tree": "ac0814988205812fd5d4c538485316c982d843d3",
      "parents": [
        "5dcbe638ee063201fb476ef475d2beb347f02097",
        "e583bcf13c13957bdf20f8bc5e23258b083b2f51"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 31 09:34:26 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 31 09:34:26 2012 -0700"
      },
      "message": "am e583bcf1: Merge \"Explicitly set lib dir permissions during unlink\" into jb-dev\n\n* commit \u0027e583bcf13c13957bdf20f8bc5e23258b083b2f51\u0027:\n  Explicitly set lib dir permissions during unlink\n"
    },
    {
      "commit": "515087d1c586c6c24222e03bbd01af58bdf0ed8d",
      "tree": "32a8c08ba2b38f4a7e4bdc9c0c458602b23a30b1",
      "parents": [
        "47db02bad8fed67025669c41ef0c0dd9cafe7ed2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jul 30 15:00:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jul 30 15:01:20 2012 -0700"
      },
      "message": "Explicitly set lib dir permissions during unlink\n\nThe default umask changed, so we have to explicitly set the mode of the\nlib directory when we create it in unlinklib.\n\nBug: 6857022\nChange-Id: I06fc3f29e99d686bbbb96184d8c314d4cc57e9fe\n"
    },
    {
      "commit": "92c6d2fc50ec2a33a2a990fe66cd70090eb461ca",
      "tree": "cb5238dfab2eaf2e7cbe6775415c30219533e204",
      "parents": [
        "aa871b0ff0fb38112a1693e80e1146cecc5db21d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 25 19:22:59 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 25 20:38:27 2012 -0700"
      },
      "message": "update to new getDisplayInfo API\n\nChange-Id: I8051b4f9f23d3ef4791176de1bbcfafacae7d579\n"
    },
    {
      "commit": "b8acd060d409f0e81ab3510b429cb86d3f34adb8",
      "tree": "c962d2494558d8805147879ef7e6d6d81eae8f00",
      "parents": [
        "a56d273438036d79e770efd0e436449534ee8b9b",
        "fa6e1ea773a74aa6a996a783ff16c495ab3cc822"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Jul 20 10:00:45 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jul 20 10:00:45 2012 -0700"
      },
      "message": "am fa6e1ea7: am 2c932143: Merge \"s/LOG/ALOG/ in HAVE_SELINUX blocks\"\n\n* commit \u0027fa6e1ea773a74aa6a996a783ff16c495ab3cc822\u0027:\n  s/LOG/ALOG/ in HAVE_SELINUX blocks\n"
    },
    {
      "commit": "1abb1cb3a8fe17f7866150604c2fd73751da787e",
      "tree": "a2f4fa365665fc5b25fc66c6f7b90ea3ca719cfc",
      "parents": [
        "34196187365687d3f144a6de5fef811b52545ac0"
      ],
      "author": {
        "name": "Jaikumar Ganesh",
        "email": "jaikumar@google.com",
        "time": "Wed Jan 25 16:14:50 2012 -0800"
      },
      "committer": {
        "name": "Matthew Xie",
        "email": "mattx@google.com",
        "time": "Fri Jul 13 22:22:51 2012 -0700"
      },
      "message": "Changes to Bluetooth Service structure.\n\nChanges to make Bluetooth Service part of the system_service.\nThese changes may be temporary.\n\nChanges to update to the new disable API.\n\nChange-Id: If89dba17e6e6c6daa53c37684221763a2da076e9\n\nConflicts:\n\n\tservices/java/com/android/server/pm/PackageManagerService.java\n"
    },
    {
      "commit": "197a0c82a1fbf337ec0a85d36b6b89c3d6e8a0ac",
      "tree": "91ddac285a05fd389615ed6fab622d65b4bf2cee",
      "parents": [
        "9c469ca0ff92ffa533faed9416d725be2204ed55"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 12 14:46:04 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jul 12 14:46:04 2012 -0700"
      },
      "message": "Improve cleanup of file caches.\n\nThis rewrites installd\u0027s code for deleting cache files to be better:\n\n- Isn\u0027t really stupid about just deleting directories in the order\n  they are found on the filesytem; now collects all cache files and\n  sorts them by mod time to determine which to delete.\n- Also deletes cache files in /data/media and for all users.\n\nThis also tweaks DeviceStorageMonitor to be a little smarter about\ndeciding when to flush cache files, having upper and lower limits\nthat it allows memory to get down to and then flash files to reach\nthe higher free storage limit.  This should reduce the amount that\nwe perform flushing when starting to reach the storage limit.\n\nFinally add a new pm command to force a cache flush.\n\nChange-Id: I02229038e1ad553d1168393e5cb6d5025933271d\n"
    },
    {
      "commit": "365861e3aae9cccdb19b8d4ee375c57e0a431f1e",
      "tree": "7684a611694772d9322ef44b138e316542482665",
      "parents": [
        "13a3a87fa7264df29a1f698ce80ada2de3561962"
      ],
      "author": {
        "name": "Joshua Brindle",
        "email": "jbrindle@tresys.com",
        "time": "Tue Jul 10 10:22:36 2012 -0400"
      },
      "committer": {
        "name": "Joshua Brindle",
        "email": "jbrindle@tresys.com",
        "time": "Tue Jul 10 11:02:01 2012 -0400"
      },
      "message": "s/LOG/ALOG/ in HAVE_SELINUX blocks\n\nThe latest push changed LOG(E|V) to ALOG(E|V) but it was not updated in HAVE_SELINUX blocks.\n\nChange-Id: I626588589dd00775ba29f2a256ac29e481598dc3\nSigned-off-by: Joshua Brindle \u003cjbrindle@tresys.com\u003e\n"
    },
    {
      "commit": "4f741c3c2234ef8fec39ca71f6c22b875a3cd3eb",
      "tree": "fb73c37fdc92fdd2cf04130326dda3753b8df348",
      "parents": [
        "664089112503b182c080296cc4c8fca4afe8538b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 28 14:55:55 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 28 15:10:44 2012 -0700"
      },
      "message": "move sensorservice to the frameworks/native project\n\nChange-Id: I285c190904b2b6b92df3e40154d178407a712f6e\n"
    },
    {
      "commit": "8b3895392662640b84d3e2bbadb0bc53c456cea5",
      "tree": "9722e370b7c76334ca484e3c911c9664c108225c",
      "parents": [
        "3a9ff158fe45b3ee986dfa5f3c56fa48f781a5a9",
        "06c93386374de3812629908f21c057a8d60c4b12"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 20 13:37:13 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 20 13:37:13 2012 -0700"
      },
      "message": "am 06c93386: Merge \"Exit boot animation cleanly.\" into jb-dev\n\n* commit \u002706c93386374de3812629908f21c057a8d60c4b12\u0027:\n  Exit boot animation cleanly.\n"
    },
    {
      "commit": "d3782b26b2026e60a8e0d4b967a156369f2a46f8",
      "tree": "4cdd65f7346993aea94bedf15fbd91e910b74b33",
      "parents": [
        "fe54cb6f3da7fe95d5141d97b0c6780e001ad058"
      ],
      "author": {
        "name": "Kevin Hester",
        "email": "khester@google.com",
        "time": "Thu Apr 26 10:38:55 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 19 17:38:43 2012 -0700"
      },
      "message": "Exit boot animation cleanly.\n\nThe desc.txt file can now mark parts as \u0027must finish cleanly\u0027 by using\n\u0027c\u0027 as the part line prefix rather than \u0027p\u0027.  If so indicated, if the\nbootanimation is asked to quit it will do so only after waiting to\nfinish that part.\n\nI considered either making init.c service killing smarter or promoting\nbootanim to be a bindable service with a requestExit method.  However,\nthese changes are probably too big/risky given our ship date.  So\nI used a property as a mailbox between SurfaceFlinger and bootanim.\n\nBug: 6679877\nChange-Id: I1f8dd9e7da1ea80a483b31fa14c4a5645922d774\n"
    },
    {
      "commit": "39758edbed0be8f3d75427f750db6e9d005cd16a",
      "tree": "3a475ef1a8294bf6492d7e4d904149fe0bcd4720",
      "parents": [
        "56b3a321e7c6f03d1bc0c5c0915d56bc46b7a33e",
        "386ce58a21b81390d2831b0f1107d03773af687a"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jun 18 16:51:41 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 18 16:51:41 2012 -0700"
      },
      "message": "am 386ce58a: Merge \"Don\\\u0027t backup or delete the backup file, if it\\\u0027s in the backup path.\" into jb-dev\n\n* commit \u0027386ce58a21b81390d2831b0f1107d03773af687a\u0027:\n  Don\u0027t backup or delete the backup file, if it\u0027s in the backup path.\n"
    },
    {
      "commit": "386ce58a21b81390d2831b0f1107d03773af687a",
      "tree": "8e117be0756c7fb0621edcaeb78cbfb25f596602",
      "parents": [
        "1991850de7bbcc534c2cb457f33055c533542136",
        "0ba48a5402926b23f2459ce5039d3fe75938c0f4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jun 18 16:49:28 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 18 16:49:28 2012 -0700"
      },
      "message": "Merge \"Don\u0027t backup or delete the backup file, if it\u0027s in the backup path.\" into jb-dev"
    },
    {
      "commit": "0ba48a5402926b23f2459ce5039d3fe75938c0f4",
      "tree": "92cd80c7ba68b92d95e08f1fe201c0f6b017eb67",
      "parents": [
        "1c9581023ced89a209fca9c4e40305f8e0859732"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jun 18 13:04:27 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jun 18 13:04:27 2012 -0700"
      },
      "message": "Don\u0027t backup or delete the backup file, if it\u0027s in the backup path.\n\nChange-Id: Ie77782722a271e09f8cbde7fb5393e8127d4334d\n"
    },
    {
      "commit": "33ef4ee71277888304a3c67fdd8dfddd728b4c88",
      "tree": "801ef4c7dd0c1aad76254717e10d4d2d0c4c99da",
      "parents": [
        "98e955d295441636ba19688e18a8223691256d2c",
        "4de60b26091b269c22803297c88b66ca5e3aed5f"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jun 18 10:26:36 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jun 18 10:26:36 2012 -0700"
      },
      "message": "resolved conflicts for merge of 4de60b26 to jb-dev-plus-aosp\n\nChange-Id: Id1b1847a3ab5c0f51ac8a732fce5ba12e5810259\n"
    },
    {
      "commit": "4503cf67b57a2a75e86ce4e36ccb69249048c996",
      "tree": "fefc9f47f15765a3bc1511a208def1aaa917f430",
      "parents": [
        "963218905ab31ccd2cf7ff57d372b185624543a4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Jun 14 13:05:18 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Jun 14 15:28:37 2012 -0700"
      },
      "message": "Make lib dir before changing ownership of app dir\n\nBug: 6668897\nChange-Id: I8998a50359892277b15e80b5b5590ff94b125467\n"
    },
    {
      "commit": "11d536b38116e72a40829bd976f9f78f50d53d1a",
      "tree": "6fb646a6ea6de65b0b62a4c8318410fd0dd8b0cd",
      "parents": [
        "2e1f18b9ba9af40d5e1f0874e091b8f487a2d50d",
        "ceb8067920043a430478be386c56c244355d4c9f"
      ],
      "author": {
        "name": "Justin Ho",
        "email": "justinho@google.com",
        "time": "Tue Jun 12 12:45:46 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 12 12:45:46 2012 -0700"
      },
      "message": "am ceb80679: Merge \"make the boot animation 32-bits to avoid banding\" into jb-dev\n\n* commit \u0027ceb8067920043a430478be386c56c244355d4c9f\u0027:\n  make the boot animation 32-bits to avoid banding\n"
    },
    {
      "commit": "60691ce1600cb79ec9bb9957eee29be7a6a5e5d2",
      "tree": "644c7b8e65eab2cc4f74192bbd18a2d816118159",
      "parents": [
        "0d8eba64b2ee2921915e0f6793ddd2d8f44e2428"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 11 14:08:02 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 11 14:52:32 2012 -0700"
      },
      "message": "make the boot animation 32-bits to avoid banding\n\nBug: 6611693\n\nChange-Id: Id31b711ea755c89240eaea26f6403a031cd939e4\n"
    },
    {
      "commit": "3a3c7e7bc4f599c35f5ed4feeead15c6c5a4621f",
      "tree": "84d266d0090e6d85fcf469e686a40dd9b35fd91c",
      "parents": [
        "d26f7139a7ff42ca1be470657515767f7509955b",
        "63dd4c65c41187967ba0828d386117f90020840e"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Fri Jun 08 14:01:54 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 08 14:01:54 2012 -0700"
      },
      "message": "am 63dd4c65: am 60b3d59d: Merge \"Modify installd to set the SELinux security context on package directories.\"\n\n* commit \u002763dd4c65c41187967ba0828d386117f90020840e\u0027:\n  Modify installd to set the SELinux security context on package directories.\n"
    },
    {
      "commit": "60b3d59d7f788046a45a5fd4e97ec7235fb55787",
      "tree": "3a368d16fee045adf83a1a870b267b82ed5c6de8",
      "parents": [
        "7b2d056342176b5e7ff19842fc9202f2f8d36b76",
        "0b58e6a1a97eded73cb9cbbe53cdde4c6595ddd6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Fri Jun 08 12:27:41 2012 -0700"
      },
      "committer": {
        "name": "android code review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 08 12:27:42 2012 -0700"
      },
      "message": "Merge \"Modify installd to set the SELinux security context on package directories.\""
    },
    {
      "commit": "d0c5f515c05d05c9d24971695337daf9d6ce409c",
      "tree": "bce8b771249be92852eb2914c0d8927ee4ab18ab",
      "parents": [
        "0646411cbd91039e843c0f3067ea0a379176978a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 07 16:53:59 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 07 16:57:57 2012 -0700"
      },
      "message": "Fix issue #6295373: \"Package com.google.android.apps.authenticator2 has...\n\n...mismatched uid: X on disk, Y in settings\" errors on Froyo and Gingerbread\n\nDeal more gracefully with the uid changing in three ways:\n\n1. If the uid on disk has become root, then have installd change it to\n   the application\u0027s uid.  This is to correct a potential case where\n   installd was interrupted while linking or unlinking the libs dir,\n   during which it temporarily changes the owner of the dir to root\n   so that a malicious app can not get in its way.  So if the uid on\n   disk has become root, we assume we can safely just change it back\n   to the correct uid.\n\n2. When scaning packages at boot, use the same \"delete and rebuild data\n   directory\" code for third party applications as we have for system\n   applications.  This allows us to at least end up in a state where the\n   app will run, even if its data is lost.\n\n3. But we really don\u0027t want to get in to case 2, so if an application\n   update is being installed and we find that the uid we now have for\n   the app is different than the one on disk, fail the update.  This will\n   protect against for example a developer changing the sharedUserId of\n   their app and getting into this bad state.\n\nBug: 6295373\nChange-Id: Ic802fdd818ac62449ff3c61d1fff1aa4d4942f39\n"
    },
    {
      "commit": "fd3d009dde21d7670d42d26f197f67c4c8e59184",
      "tree": "7e91bd87dcab0b4e6e470400924ce9e657642259",
      "parents": [
        "5ab6e12b450d13c8eb501001c7a8669826b86ea4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 30 17:57:06 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 30 17:57:06 2012 -0700"
      },
      "message": "Remove some unnecessary man page entries\n\nChange-Id: I1ceda3f5efac83b80ab4b6e7cae4086aeed5062a\n"
    },
    {
      "commit": "13b907353f18215b52b5ceda24bbf520d91d72a1",
      "tree": "5b32cdf7b5729f68c0b61dadbeab7ffd263b25b0",
      "parents": [
        "d7e4ae48c576d5aaef75754b29a8b87c1f0d6427"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 21 12:13:31 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 21 13:29:06 2012 -0700"
      },
      "message": "Remove unused, obsolete debug code\n\nAll these features have either been abandonned and left un-maintained\nfor years or can be replaced by systrace.\n\nChange-Id: I42e4579a8078744047e5fe08a7a15254970b09bc\n"
    },
    {
      "commit": "db7dd2af93ae96e5749cfbe978c2695049d9d782",
      "tree": "43e6441ce2d9edab412fc3faf19cc4ab9e967455",
      "parents": [
        "26511012c40dbe704f4791654b28b9e0e05589d8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sat May 12 15:08:21 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sat May 12 15:08:21 2012 -0700"
      },
      "message": "fix BootAnimation timing\n\nWe were including the delay of the previous frame when\ncalculating the delay needed between a frame and the next.\nThis caused a bad jitter in the animation timing.\n\nWe also now use clock_nanosleep().\n\nChange-Id: Iebb8cca4d57fe2f11d83b23a736e03db7a7d2006\n"
    },
    {
      "commit": "995cb9739a04e7fe20c0a86c400db706b12cb221",
      "tree": "9c4ccaa5078ccd3891dd0f90a536cfbd326c9806",
      "parents": [
        "b3e9ee23795e6c7c4bc2c0a7e776b7ee34e8f08e",
        "ca13fed08bf38c2f2811b3ec3f995d0ca57ac6ac"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 17:35:28 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 09 17:35:28 2012 -0700"
      },
      "message": "Merge \"Empower the \u0027input\u0027 command with keycode labels.\" into jb-dev"
    },
    {
      "commit": "ca13fed08bf38c2f2811b3ec3f995d0ca57ac6ac",
      "tree": "a9abe1bce747df20cc0eacfb2207d3b86f557415",
      "parents": [
        "7873d5b3ff587ffff33dae628aaa581b099db61e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 17:18:20 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 09 17:18:20 2012 -0700"
      },
      "message": "Empower the \u0027input\u0027 command with keycode labels.\n\nChange-Id: Ia077f8ee0732599cec9b04efc2f828d3d22f5bac\n"
    },
    {
      "commit": "ceb1b0bfaea56251796b08c07b963de7403d84eb",
      "tree": "fea73b05f6b4d47da174eca362693958cf5d785a",
      "parents": [
        "476b03b0c0d5cae4d1b114c6f80858d59ba36cad"
      ],
      "author": {
        "name": "Anonymous Coward",
        "email": "nobody@android.com",
        "time": "Tue Apr 24 10:35:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 07 16:34:49 2012 -0700"
      },
      "message": "Add encryption parameters to package installation\n\nChange-Id: Ic9f8ab9f8110f08bb3c00725cfce5b8ee7b766f3\n"
    },
    {
      "commit": "7fdde0cee2ac90da6603585f4789644fbf00925d",
      "tree": "198d946ccee07b288a5a33733c93694e18584e48",
      "parents": [
        "c9ca7f38bccfa56bbca44998758869ec8c71f4d3",
        "f0e3edc0709dc190190e0ca386478f4a0da92e7a"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Tue May 01 15:47:28 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 01 15:47:28 2012 -0700"
      },
      "message": "Merge \"remove extra semi colon\" into jb-dev"
    },
    {
      "commit": "f0e3edc0709dc190190e0ca386478f4a0da92e7a",
      "tree": "69149266c611bfceb1c26e1e1dcad4253c9c8c86",
      "parents": [
        "6113ce3be4ba7208bac7d9f0cad7e83104dbc8d3"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Mon Apr 30 18:29:23 2012 -0700"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Mon Apr 30 18:29:23 2012 -0700"
      },
      "message": "remove extra semi colon\n\nEclipse has been complaining about it...\n\nChange-Id: I39fb4eeab26af883dd2287baf49ec244db453365\n"
    },
    {
      "commit": "719a6320a789e76566d6416d5ec35491d21f5c44",
      "tree": "3054ec8d31d3c2cd1936667aaeac46ae257109f5",
      "parents": [
        "263d044c790923d7d83ab036e79a3decc25c7b4d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 30 13:46:54 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 30 13:46:54 2012 -0700"
      },
      "message": "Change permission enforcement through pm command.\n\nAdd \"set-permission-enforced\", which can currently only mutate\nenforcement of READ_EXTERNAL_STORAGE.\n\nBug: 6363043\nChange-Id: I3f7929738c8c36b0a54fbf171c03fe16c09b5d99\n"
    },
    {
      "commit": "59d3d868112f8bbd14f466d0096789548b176d34",
      "tree": "492208b0e399efd666d2385e5a96c2e732609642",
      "parents": [
        "7725180c646d1976a2a2097735862a75ec47c544"
      ],
      "author": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Fri Apr 27 10:06:16 2012 -0700"
      },
      "committer": {
        "name": "Robert Greenwalt",
        "email": "rgreenwalt@google.com",
        "time": "Fri Apr 27 10:06:16 2012 -0700"
      },
      "message": "Add Usb control to svc.\n\nWe used to have control over usb via ndc but recent changes removed that.\nThe reverse_tether.sh script needs control (on rooted devices) to run\nso added this.\n\nbug:4208971\nChange-Id: I722fc0e14540890be0d79a0b7d22f23b2d57f20c\n"
    },
    {
      "commit": "fd135bc809589d4cadcdbcc7ececaf2d9d0969cf",
      "tree": "6605529aca5a347b7cc728b6af89d5c9e9671aac",
      "parents": [
        "4961295d19e27dd0854f2b07ae126f79ce935c8c",
        "f4b6628e5084bf317eab5326c51cbecb8fabdc45"
      ],
      "author": {
        "name": "Travis Geiselbrecht",
        "email": "travisg@google.com",
        "time": "Tue Apr 24 14:23:25 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 24 14:23:25 2012 -0700"
      },
      "message": "am f4b6628e: BootAnimation: fix bug to delay the appropriate amount of time per frame\n\n* commit \u0027f4b6628e5084bf317eab5326c51cbecb8fabdc45\u0027:\n  BootAnimation: fix bug to delay the appropriate amount of time per frame\n"
    },
    {
      "commit": "f4b6628e5084bf317eab5326c51cbecb8fabdc45",
      "tree": "192b53b1e8acf2ccaa56f15d95270658e4a934aa",
      "parents": [
        "5c84720322afaae4f4a7e0ea6ad71c309df7eb80"
      ],
      "author": {
        "name": "Travis Geiselbrecht",
        "email": "travisg@google.com",
        "time": "Tue Apr 24 14:14:55 2012 -0700"
      },
      "committer": {
        "name": "Travis Geiselbrecht",
        "email": "travisg@google.com",
        "time": "Tue Apr 24 14:14:55 2012 -0700"
      },
      "message": "BootAnimation: fix bug to delay the appropriate amount of time per frame\n\nChange-Id: I300b67a97a9a685cec59df12d8d605c2b0b49180\n"
    },
    {
      "commit": "7df7d2022d9bebc21a13dcb7ddacaa61f9c2e38e",
      "tree": "ba66ba6c9223f2c53786cc8bcf086af0ba885e56",
      "parents": [
        "661f362a2c531c46fdce5359b176a30ba7d16e1f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 19 18:00:04 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 19 18:00:04 2012 -0700"
      },
      "message": "Fix issue #4499996: LiveWallpaperPreview activity intent filter\n\nChange-Id: I5fc71503d2c59c907da954dbda3587394e6405bf\n"
    },
    {
      "commit": "9f25b7fdf216c9ef0bd2322cd223eeaf0d60f77f",
      "tree": "b0b509a261874435cab3f5f1a727c02b399bd91c",
      "parents": [
        "54ae14749bc7f9e73cfda35a8b49f9efa80a77fb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 14:30:49 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 10 18:23:58 2012 -0700"
      },
      "message": "Request key maps from input manager service.\n\nInstead of each application loading the KeyCharacterMap from\nthe file system, get them from the input manager service as\npart of the InputDevice object.\n\nRefactored InputManager to be a proper singleton instead of\nhaving a bunch of static methods.\n\nInputManager now maintains a cache of all InputDevice objects\nthat it has loaded.  Currently we never invalidate the cache\nwhich can cause InputDevice to return stale motion ranges if\nthe device is reconfigured.  This will be fixed in a future change.\n\nAdded a fake InputDevice with ID -1 to represent the virtual keyboard.\n\nChange-Id: If7a695839ad0972317a5aab89e9d1e42ace28eb7\n"
    },
    {
      "commit": "90d82ea0085b30894c5297df5faee0b4b655a94e",
      "tree": "0504a46d4c581979c12bd4a58cad6b9004013afe",
      "parents": [
        "e7aff2998489dcf2baf731150ebb63a8e8c509cf",
        "bb4cd8259269743fa8f0912b064961477b368c4f"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Fri Apr 06 10:30:49 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 06 10:30:49 2012 -0700"
      },
      "message": "Merge \"Build /system/bin/asan/app_process.\""
    },
    {
      "commit": "ac14351e16e1258f1cb54e2bf772b8be004eb2b8",
      "tree": "55c22fe8e19d35764f00a6ffad899e4fd2c4ccd0",
      "parents": [
        "030711c39b6093024d784c1c3d7566bd5a3e3489"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 05 18:57:33 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 05 19:33:11 2012 -0700"
      },
      "message": "Move some APIs from window manager to input manager.\n\nSimplified input injection API down to just one call.\n\nRemoved all input state reading API.  It was only used by the\nwindow manager policy and required a permission that applications\ncould not obtain.  READ_INPUT_STATE is now unused and deprecated.\n\nChange-Id: I41278141586ddee9468cae0fb59ff0dced6cbc00\n"
    },
    {
      "commit": "bb4cd8259269743fa8f0912b064961477b368c4f",
      "tree": "a2f1cece969241290b281ef3fd72db4aba469d1c",
      "parents": [
        "5e63d99ca5b292702d79ce3e144721710d7106db"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Mon Apr 02 16:16:04 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Apr 04 21:51:44 2012 +0400"
      },
      "message": "Build /system/bin/asan/app_process.\n\nChange-Id: Id3fa26a1bc0e0832bfde73dbd3acce15ecce823d\n"
    },
    {
      "commit": "5bb508fac6453c75afe8acc2fec6380bc0ebdb06",
      "tree": "2187a2a450cdf80d9b1ea10eb53d7d15b09753e6",
      "parents": [
        "cb5c734790e1e3d8496b4c75c57e8a537784c056"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Wed Apr 04 08:12:46 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 04 08:12:46 2012 -0700"
      },
      "message": "Revert \"Build /system/bin/asan/app_process.\"\n\nThis reverts commit cb5c734790e1e3d8496b4c75c57e8a537784c056"
    },
    {
      "commit": "cb5c734790e1e3d8496b4c75c57e8a537784c056",
      "tree": "fa85c044e00d7e2c60f1cd9e2ed58170d16859d5",
      "parents": [
        "ee80082ef7c6575ab36ef63c9f11808a44c371ad"
      ],
      "author": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Mon Apr 02 16:16:04 2012 +0400"
      },
      "committer": {
        "name": "Evgeniy Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Apr 03 22:17:00 2012 +0400"
      },
      "message": "Build /system/bin/asan/app_process.\n\nChange-Id: Icdfe215a7e86466a07fe0508775c89963a0a4787\n"
    },
    {
      "commit": "d927a1d99630c05ff773f0e9e8791ca9a965e020",
      "tree": "760f8a19e317d68f937eda312efab59200880ecd",
      "parents": [
        "f9c1f9935b349fe1a3f27be4462026dd212f8b78"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Mar 28 10:42:44 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Wed Mar 28 10:42:44 2012 -0700"
      },
      "message": "Deleted the media, camera, drm related files since they are relocated\n\nChange-Id: I9bc5573ee07e30b305b5b879023aa9ec69e10b91\n"
    },
    {
      "commit": "b347e33daf8102448b10679b224d447a0610698b",
      "tree": "eb1a2d13d5c73c6543d5214e02bb5df2e770b1f9",
      "parents": [
        "8296628ed89d98a76a904cbca53ffeb62db8bbda"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Mar 26 12:38:43 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Mar 26 12:39:38 2012 -0700"
      },
      "message": "move dumpstate and dumpsys from frameworks/base to frameworks/native\n\nChange-Id: Ifdff51a974a9ee3c8ee7b04648a45d2f278ce4df\n"
    },
    {
      "commit": "b3e2e24f789d41d6c38b8ad4c252cf9f6e2122d8",
      "tree": "3db78e2b9860b33fc0a75cdd9e3ddba2f97410db",
      "parents": [
        "61bf87428c0f3366d0c4ec203ff96331b7ec3546",
        "9b8e496f4d143280deff137c5f30ca8907bc28db"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 26 11:43:06 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 11:43:06 2012 -0700"
      },
      "message": "Merge \"Provisional support for secure decryption of media streams.\""
    },
    {
      "commit": "9b8e496f4d143280deff137c5f30ca8907bc28db",
      "tree": "f6136e4a5bf55c67ac721f1fc94b8d6aadc0fa6f",
      "parents": [
        "7061b5ffb37ea15f235effa1faaf22bb1750c7f5"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 26 11:13:27 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Mar 26 11:24:04 2012 -0700"
      },
      "message": "Provisional support for secure decryption of media streams.\n\nChange-Id: Ib3982a9c960bfdb0cb7e1b174440b141b194cfbe\n"
    },
    {
      "commit": "56ca534e65427bdefb7674060f5faa94539b6995",
      "tree": "14a6e9891916e5154ab159120f2632697bea0d7e",
      "parents": [
        "eba00ce996d6646f558f25890f0a551de8e7ecf7",
        "fe6ecdae580efef872df6f1d6b4e22db70afee20"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Mar 26 11:22:29 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 11:22:29 2012 -0700"
      },
      "message": "Merge changes Ib4d0e0c0,Iea8f4a23\n\n* changes:\n  libmedia: remove skia include\n  stagefright: remove dependency on skia\n"
    },
    {
      "commit": "c610a6bac76f2c67e6986e76eb1d4fb716d0f89e",
      "tree": "8ea44d2e6f6cf6756e68733d553586c856af4432",
      "parents": [
        "7061b5ffb37ea15f235effa1faaf22bb1750c7f5",
        "7ac3ed1d7679e9cb90b44c6ab1629318b17c0690"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Mar 26 09:03:07 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 26 09:03:07 2012 -0700"
      },
      "message": "Merge \"resist umask changes, make dirs 0711\""
    },
    {
      "commit": "7c424a34d7d242e989170f63f6dff07fe3f078ad",
      "tree": "bf171798c74327df7b27f82e34631d347b7cd4f7",
      "parents": [
        "8dd6574809cc9799cf43a7349769eaeb70b63e2d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sat Mar 24 15:12:07 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sat Mar 24 23:34:43 2012 -0700"
      },
      "message": "stagefright: remove dependency on skia\n\nskia is only used to write a jpeg file, link directly to libjpeg\ninstead.\n\nChange-Id: Iea8f4a2347c38328776541d2b74bcbdea3f62041\n"
    },
    {
      "commit": "209cfdf4f6daf9c2959a3d1eef5544121c79c664",
      "tree": "b100ad98ba8ea7d41c8d8b6069c6aff8c63df46b",
      "parents": [
        "3b3a5b100b2ec63d8f6511b655c74f629b7d1981"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Sat Mar 24 10:48:40 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Sat Mar 24 10:59:14 2012 -0700"
      },
      "message": "Remove JNI in LOCAL_C_INCLUDE from non-JNI related Android.mk files.\n\no related-to-bug: 6214141\n\nChange-Id: Ic88d1732b3e014af47532a0809e01f6086e8464d\n"
    },
    {
      "commit": "7ac3ed1d7679e9cb90b44c6ab1629318b17c0690",
      "tree": "d90a4d55b2537500d16a3c6e60ec6e7681e65a85",
      "parents": [
        "cbe55a1c93056cf2878007ebf823a0ac2ad168b1"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 23 17:52:33 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Mar 23 18:00:47 2012 -0700"
      },
      "message": "resist umask changes, make dirs 0711\n\nMake sure /data/user directory permissions get explicitly set\nregardless of the system umask.\n\nChange directory permissions to 0711. No need for read permissions.\n\nBug: 3272072\nChange-Id: Ida7f3c6656f4e0c9d0a9f7648491cc853c4e44ca\n"
    },
    {
      "commit": "ad812a23df775062f0185076557e7f3fdfa57943",
      "tree": "d170b440d49fb188203bfe2d2b72f844d6b8a0f0",
      "parents": [
        "df78cd5ee959f57c35dd9d6ad0f6871c72438f3c",
        "483f3b06ea84440a082e21b68ec2c2e54046f5a6"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 22 15:11:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 22 15:11:51 2012 -0700"
      },
      "message": "Merge \"Package restrictions per user\""
    },
    {
      "commit": "8686938aa51a8c0005120f242cb187c25fe7bcb2",
      "tree": "7627e6c766af410bf88aa180d53b549834934651",
      "parents": [
        "af0c843672322af3e7af8d684fc3375ef9291843"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Tue Sep 20 15:39:58 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Mar 22 13:18:08 2012 -0700"
      },
      "message": "Use NuPlayer for media playback everywhere\n\nif media.stagefright.use-nuplayer is set to true.\n\nChange-Id: Ibb217e7d7d5195b7feeea557554fe78e1585744c\n"
    },
    {
      "commit": "483f3b06ea84440a082e21b68ec2c2e54046f5a6",
      "tree": "cc0dff8ea3d133a4dc910bc1e90c85380cea2064",
      "parents": [
        "8fca15f1f2273fa429e58f783d0970251d0942e5"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Mar 13 16:08:00 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 22 10:08:24 2012 -0700"
      },
      "message": "Package restrictions per user\n\nPackages can be enabled/disabled per user.\nThis requires maintaining stopped/launched states and\nenabled / disabled components and packages per user.\n\nRefactored pm.Settings and PackageSettingsBase to keep\ntrack of states per user.\n\nMigrated the stopped-packages.xml to users/\u003cu\u003e/package-restrictions.xml\n\nChanged intent resolution to handle individual user restrictions.\nBunch of IPackageManager calls now have a userId argument.\nMake AppWidgetService handle removals of packages.\n\nAdded some tests for pm.Settings and PackageManager.\n\nChange-Id: Ia83b529e1df88dbcb3bd55ebfc952a6e9b20e861\n"
    },
    {
      "commit": "4d3f82e8d99558551b876ad075ad999cb92f5327",
      "tree": "d225dd55f6e0b99d986a583f5523d5cf989bef9e",
      "parents": [
        "748601bc627d2b3c34161b186cdb3b91e119290f",
        "ae75f994cc50837afe79d3bfbc576811e3602fef"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 16:21:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 19 16:21:04 2012 -0700"
      },
      "message": "Merge \"Add libmedia_native\""
    },
    {
      "commit": "f6b8f7b34f5fe94cd1d8753ec356b967293f1f9c",
      "tree": "33525b50e1e39afd9c39e4858fd710ee8304a19c",
      "parents": [
        "b106153ba97f3eded6e71ffc92859314b614e0ba",
        "94a36440ba11f7e9d6d444e985a7510cb56f886b"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 19 07:31:58 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 19 07:31:58 2012 -0700"
      },
      "message": "Merge \"audio_channel_in/out_mask_from_count\""
    },
    {
      "commit": "baad5d5f0de40c4b161aaf8bb87aee4e57784c50",
      "tree": "7b6f6bb875bf4285c0f383cd3d632618ecd25654",
      "parents": [
        "b070521ee1403788ee6acc4b1ed11e374192d40b",
        "29ba7e66804e91cbd05fed74893061b4971ec52b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 16 15:19:51 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 16 15:19:51 2012 -0700"
      },
      "message": "Merge \"resolved conflicts for merge of 354e0346 to master\""
    },
    {
      "commit": "29ba7e66804e91cbd05fed74893061b4971ec52b",
      "tree": "ca4939082344887f6879023a0a08801ab2092e3e",
      "parents": [
        "4108fbc299bb0c02293ff53fa670308ed81607f7",
        "354e034697d667fbab5d3f9af28704dca4ad7b12"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 16 15:03:36 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 16 15:03:36 2012 -0700"
      },
      "message": "resolved conflicts for merge of 354e0346 to master\n\nChange-Id: I432f5f43aa1e19c6a474e8656fe0e3715828e8af\n"
    },
    {
      "commit": "a7110640d0d7a479f8e614c8fff10a6672bfe4bd",
      "tree": "6e0cff5568502fec4748ebc47274cf3f2a1f33da",
      "parents": [
        "ddc421d19c797096de77c24f68a37ad23216e2a7"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Mar 16 13:19:20 2012 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Mar 16 13:19:20 2012 -0700"
      },
      "message": "Report an error instead of waiting for EOS indefinitely in sf2.\n\nChange-Id: Id7bcfb90a3b6a61f0df8bd8f39ea4ffa3c433d87\n"
    },
    {
      "commit": "5da418d3319add35f15197db39195984b0262e84",
      "tree": "6478bcad8909ed9172281a7ec3e475d0febc5052",
      "parents": [
        "a1faacd268b431f73c07be7db5e1b7388f6655c1",
        "ce06c000b4133c63414c3244c3325e25315ab179"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 16 11:55:48 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 16 11:55:48 2012 -0700"
      },
      "message": "am ce06c000: Merge \"Debugging code for #6169553: Make Phone launch faster\" into ics-mr1\n\n* commit \u0027ce06c000b4133c63414c3244c3325e25315ab179\u0027:\n  Debugging code for #6169553: Make Phone launch faster\n"
    },
    {
      "commit": "c032a73b511d4006e083a646b7dd23d54ed373ac",
      "tree": "e2455e95c160534c644a277121da7e7f525e6b4c",
      "parents": [
        "c8e83aa73e174be163649bb80989b9099fbb74cf",
        "ce06c000b4133c63414c3244c3325e25315ab179"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 16 11:55:05 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Mar 16 11:55:05 2012 -0700"
      },
      "message": "am ce06c000: Merge \"Debugging code for #6169553: Make Phone launch faster\" into ics-mr1\n\n* commit \u0027ce06c000b4133c63414c3244c3325e25315ab179\u0027:\n  Debugging code for #6169553: Make Phone launch faster\n"
    },
    {
      "commit": "ae75f994cc50837afe79d3bfbc576811e3602fef",
      "tree": "54200155dc1dc7f1b1e96c3cef9a48b6909af213",
      "parents": [
        "2937a9ea0a81a0400f0189221f775561ff3b0a6c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 16 11:42:24 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 16 11:51:30 2012 -0700"
      },
      "message": "Add libmedia_native\n\nChange-Id: Ib8cff8abd73723b793f08da99ad59549f219e0e7\n"
    },
    {
      "commit": "2a29b3ad1350785aedea3442b38042885533576c",
      "tree": "110eb4b7982347f7fb8bdc309369a98d44ea4993",
      "parents": [
        "7f94977867ae67aa4f75d9db5de94e1233a2d7fe"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Mar 15 15:48:38 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Mar 15 15:48:38 2012 -0700"
      },
      "message": "Debugging code for #6169553: Make Phone launch faster\n\nThe activity manager now has a tick when launching an app every\n500ms, where it collects the current stack traces of the app if\nit hasn\u0027t finished launching.  These traces are included as part\nof dumpstate.\n\nThis is only done on non-user builds.\n\nChange-Id: I7f09ea00aab821ac81795f48c9d68fcca65f89fe\n"
    },
    {
      "commit": "94a36440ba11f7e9d6d444e985a7510cb56f886b",
      "tree": "3c7f6f87eef75d41e416460b30133594b2747378",
      "parents": [
        "4513bc0f28d210a970166f6ce35c3bbab1e49522"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 12:56:06 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Mar 15 13:15:27 2012 -0700"
      },
      "message": "audio_channel_in/out_mask_from_count\n\nand avoid ambiguous term \"channels\" where it might be confusing\nas to whether it is a channel mask or channel count\n\nChange-Id: I744fa08ccb6001a98c97bd638d2c9d56836c4234\n"
    },
    {
      "commit": "00b0a85e906fb62d37981ca03452eefd8b9fc254",
      "tree": "67b1787bd97c11cbc424a6e1ed26d18fdf6542b1",
      "parents": [
        "58984b0738372bcc8b5862276836ab014377ff94"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 13 16:03:05 2012 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 14 15:48:22 2012 -0700"
      },
      "message": "Remove false dependencies\n\nChange-Id: I2a2976eb27b262bcba0c76ab37d822407d2337a7\n"
    },
    {
      "commit": "a4972e951bf2bdb7afdafee95b3ab0c15b8bacae",
      "tree": "9800a9dcd62d945a8ad71549ebcef70393ef5442",
      "parents": [
        "89ea4ca9c26f3c7e365525a0b83500e85517a457"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 10:38:05 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 14 12:57:14 2012 -0700"
      },
      "message": "Add new \"options\" argument to all startActivity APIs.\n\nThis will be used to allow new features to be requested...  such as,\nsay, a special kind of animation.  Right now there are no options\ndefined.\n\nChange-Id: I4eb6f27275cdd4bf186f6da316ab93a2372ad4b7\n"
    },
    {
      "commit": "e1dea48f92fd087573ac76c6acd03f5a19181ece",
      "tree": "74f3810d794210df8f54d229006c9dcfc6bcd5ea",
      "parents": [
        "958ec9d0b2f2063a03d3ea2b9bb86897125401b0"
      ],
      "author": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 12 14:37:53 2012 -0700"
      },
      "committer": {
        "name": "James Dong",
        "email": "jdong@google.com",
        "time": "Mon Mar 12 21:28:57 2012 -0700"
      },
      "message": "Switched to use the header files in /frameworks/native\nand deleted the duplicate header files in /frameworks/base\n\no related-to-bug: 6044887\n\nChange-Id: I17e0692d9a9b5c8796ded36677c833ca8ab36795\n"
    },
    {
      "commit": "92a8b22e7410e74e1cba1b856333116652af8a5c",
      "tree": "fd340b33bdcf7d2b5f84d9f9454a5805efff54b6",
      "parents": [
        "64d10a1da0a702ffeb086ad9c4a632f2712f1dad"
      ],
      "author": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Fri Mar 09 16:24:04 2012 -0800"
      },
      "committer": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Mon Mar 12 12:18:53 2012 -0700"
      },
      "message": "ActivityManager: add option to allow OpenGL trace.\n\nThis patch adds an option to enable tracing of OpenGL functions.\nOpenGL tracing can be enabled by passing \"--opengl-trace\" option\nto am start.  This option requires either a device in debug mode,\nor that the application itself has debug permission set.\n\nChange-Id: I77788bfe97c9108943b1f947ce81afe8293d78a0\n"
    },
    {
      "commit": "442df22dac012fa5ac7b73267f0ea9e306b2f533",
      "tree": "161afb45e99d9d43e45f17bf052475ddfca4110a",
      "parents": [
        "a9821bdd0245c433914cf2379bf7e418270995da"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Mar 09 09:46:33 2012 -0800"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Mar 09 09:46:33 2012 -0800"
      },
      "message": "fix EOS handling in codec test.\n\nChange-Id: I5eb6d00aa0c1a728a951c7ffa4faebcadd7b14a6\n"
    }
  ],
  "next": "7d8775a87eeedfcd9349f56f667b636f6643766e"
}
