)]}'
{
  "log": [
    {
      "commit": "da2f2e51c71b5ebc50fe76c3cd5a920c81a5ee92",
      "tree": "4a7ecf49e9cda12965c44b9c418bac23854143f9",
      "parents": [
        "9e76f415e62325673c07ecbe3ce3fa377b293d04",
        "799916e6ac706921e43a3382e5d9e06e13f87525"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Oct 23 23:17:23 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 23 23:17:23 2012 -0700"
      },
      "message": "am 799916e6: Merge \"Revert \"Check non-primary user dirs during package scan\"\" into jb-mr1-dev\n\n* commit \u0027799916e6ac706921e43a3382e5d9e06e13f87525\u0027:\n  Revert \"Check non-primary user dirs during package scan\"\n"
    },
    {
      "commit": "799916e6ac706921e43a3382e5d9e06e13f87525",
      "tree": "d5c2a1fe01b349a506d7766a68d11caeb7ba025e",
      "parents": [
        "f52cbb6b1800fc2b338e8c0883170567fcd0447a",
        "383fa18b511c195cc51a96c5504442bfec998e9f"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Oct 23 23:14:06 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 23 23:14:15 2012 -0700"
      },
      "message": "Merge \"Revert \"Check non-primary user dirs during package scan\"\" into jb-mr1-dev"
    },
    {
      "commit": "383fa18b511c195cc51a96c5504442bfec998e9f",
      "tree": "d8b158e6fc1205970a0f2c43557acba84a4fbfd5",
      "parents": [
        "4525f5b69cb44a9a0c92f9c525fc47541f456621"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Oct 23 23:12:19 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 23 23:12:19 2012 -0700"
      },
      "message": "Revert \"Check non-primary user dirs during package scan\"\n\nThis reverts commit 4525f5b69cb44a9a0c92f9c525fc47541f456621\n\nChange-Id: I31b7a0860972532478ab3420556b806bfa78739a\n"
    },
    {
      "commit": "f461d3f69f4533045167b4dc1f7445ad6ae47af3",
      "tree": "6ee0f34eb0600c8741d20d7ce454aa42509652c1",
      "parents": [
        "9e96c69e3e9ebdb820acd347b4691c32a5d76be4",
        "da2509c434ebb2a5a0da1bc270cae7f007cbb0f9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 23 17:06:24 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 23 17:06:24 2012 -0700"
      },
      "message": "am da2509c4: Merge \"Check non-primary user dirs during package scan\" into jb-mr1-dev\n\n* commit \u0027da2509c434ebb2a5a0da1bc270cae7f007cbb0f9\u0027:\n  Check non-primary user dirs during package scan\n"
    },
    {
      "commit": "da2509c434ebb2a5a0da1bc270cae7f007cbb0f9",
      "tree": "8517da587126105df96096234de09a19fc2fdb38",
      "parents": [
        "6757572b39d3802c4d7b69467b5ebf69a96c208b",
        "4525f5b69cb44a9a0c92f9c525fc47541f456621"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 23 17:03:08 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 23 17:03:09 2012 -0700"
      },
      "message": "Merge \"Check non-primary user dirs during package scan\" into jb-mr1-dev"
    },
    {
      "commit": "4525f5b69cb44a9a0c92f9c525fc47541f456621",
      "tree": "69472f1e1603516577ef1485f39dfc8fc0d40354",
      "parents": [
        "2278898126c1cea4bd345bb96313d381b4ad3993"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 22 14:24:23 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 22 18:48:24 2012 -0700"
      },
      "message": "Check non-primary user dirs during package scan\n\nDuring package scan, only the primary user data directories were\nchecked. If the secondary user didn\u0027t have an application directory, it\nwould happily ignore it. The app would then crash upon startup.\n\nBug: 7391882\nChange-Id: I1fa92aa27386104d4ac6bc5dc92bfbf2e7dfac9f\n"
    },
    {
      "commit": "55708a9dce5be627f68e388d4ad355595ad5fef5",
      "tree": "f6ececb0f045f05f926f8f7af274cf6de4627d2b",
      "parents": [
        "9defd0663e2b6a486f5bc72621bbbd4dfab666fb",
        "e03c0244717093e0fbc9b05073d3ae3dbd8fcea5"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 22 16:14:14 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 22 16:14:14 2012 -0700"
      },
      "message": "am e03c0244: Merge \"Clear data deletes too much\" into jb-mr1-dev\n\n* commit \u0027e03c0244717093e0fbc9b05073d3ae3dbd8fcea5\u0027:\n  Clear data deletes too much\n"
    },
    {
      "commit": "9157d3f3b70f5225e06b0a478f2d3c5ce3d923b2",
      "tree": "c02e39a9b7d640187137671a1dcef234369f95c7",
      "parents": [
        "2278898126c1cea4bd345bb96313d381b4ad3993"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 22 15:19:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 22 15:20:52 2012 -0700"
      },
      "message": "Clear data deletes too much\n\nBug: 7389445\nChange-Id: Ic12d7a8e37747dc1a9b71ec5f881b5e440e0a75e\n"
    },
    {
      "commit": "a5d29b2c14c2cbe7eeb1f3c41aeeffa1dd29f264",
      "tree": "a28d69dbd9acacbe5b631f8b97f8214ff201687f",
      "parents": [
        "a09dd3a6081b498476beddbbc2506f6d2be25a6b",
        "9bef3294d3660a85442829a25c9777e25d3c3cc8"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 19 16:40:07 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 19 16:40:07 2012 -0700"
      },
      "message": "am 9bef3294: Merge changes Ie3c8ca8d,Ia175b36d into jb-mr1-dev\n\n* commit \u00279bef3294d3660a85442829a25c9777e25d3c3cc8\u0027:\n  Try to free cache before giving up on install\n  Robustly add symlink and add for non-primary users\n"
    },
    {
      "commit": "a3e90798b7ad3ed62e5b31842c699b2f98bd457b",
      "tree": "01e322a27dfafaf0eb4938a095f3f7f32ed03d3e",
      "parents": [
        "341aa8e0e8753ddb5eca22311e7d671e0518f326"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 10:58:36 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 15:12:09 2012 -0700"
      },
      "message": "Robustly add symlink and add for non-primary users\n\nAmazingly, some apps still don\u0027t use the nativeLibraryPath. So add a lib\nsymlink for non-primary users to fix that.\n\nAlso, there was an error when the symlink existed that it would give up.\nThis shouldn\u0027t really happen, but in that case, just remove it and\ncreate a new one to be safe.\n\nAlso, move the downgrade code to the appropriate place. This downgrade\ncase triggered the above symlink existing bug.\n\nBug: 7318366\nBug: 7371571\nChange-Id: Ia175b36d98f00bdc2f2433b909aafd524eb34d15\n"
    },
    {
      "commit": "77ce60a59330d6059011d737142bd210db845d85",
      "tree": "5c68e2b5170c8c6f0aa4dbaf81a8e78b280d4e24",
      "parents": [
        "b9e224ccb5604032ee6a11789b4e03c747a15838",
        "7789c9bbfca079655e9285173d6175b94bc774b0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 15 18:29:51 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 15 18:29:51 2012 -0700"
      },
      "message": "am 7789c9bb: Merge \"Support pm clear as --user.\" into jb-mr1-dev\n\n* commit \u00277789c9bbfca079655e9285173d6175b94bc774b0\u0027:\n  Support pm clear as --user.\n"
    },
    {
      "commit": "a3e9ff7debde50f6b58ebc3033cbbad650c10ac7",
      "tree": "b94d2caf1fa4029650b6ca3fd57a9d3d1b54f684",
      "parents": [
        "52801aae89196b7ad16ef21b07d2d621e7d0bb61"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 15 16:16:39 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 15 16:16:39 2012 -0700"
      },
      "message": "Support pm clear as --user.\n\nBug: 7352703\nChange-Id: I0e9cc4f2313e5424d234c3cb051004c0321d9dac\n"
    },
    {
      "commit": "a00ffa53fbe7ced0147451242232f47d117d5e2d",
      "tree": "d3c5e8e513bc7169a2c0433da8c5dd6888e04490",
      "parents": [
        "a1d72e15f6fd5e6e330a70d550327ab8c8fcdbcf",
        "1016b2881d2b5f5d5e142afa287bd876b6360c2b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Oct 12 12:17:17 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 12 12:17:17 2012 -0700"
      },
      "message": "am 1016b288: Merge \"Pm command to get maximum users.\" into jb-mr1-dev\n\n* commit \u00271016b2881d2b5f5d5e142afa287bd876b6360c2b\u0027:\n  Pm command to get maximum users.\n"
    },
    {
      "commit": "4c76ea6b88fad2b0147c050c02c6fd3d886d6743",
      "tree": "044338379cdef31e7c0316da597da35a81b258c0",
      "parents": [
        "e6d3ccc99270aaf62808adc7475a25d96664f0fb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Oct 12 10:44:47 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Oct 12 10:46:01 2012 -0700"
      },
      "message": "Pm command to get maximum users.\n\nUsed to drive CTS tests.  Also print success message when removing\na user.\n\nBug: 7334718\nChange-Id: Ia3886ddf860cd000ce567b0fed2ef0a4e2a2295c\n"
    },
    {
      "commit": "9ad36dedd668c3bfa906397baa3d0aa76cfe1216",
      "tree": "00bd4503e505dbc28041d7a7a0e1a438ddb3495a",
      "parents": [
        "49db71e962b8ae17a3698534c800ea7511060dac",
        "9dfca20105aa998f5767b1b330bf9307ec479906"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 11 17:25:53 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 11 17:25:53 2012 -0700"
      },
      "message": "am 9dfca201: Merge \"Print newly generated userId.\" into jb-mr1-dev\n\n* commit \u00279dfca20105aa998f5767b1b330bf9307ec479906\u0027:\n  Print newly generated userId.\n"
    },
    {
      "commit": "e6d3ccc99270aaf62808adc7475a25d96664f0fb",
      "tree": "4ee82dce7ec5418b95688b9a7d3fd474d92b3f55",
      "parents": [
        "38f8688baeb0f610a47c17bb7810349502d62ab6"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 11 16:43:20 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Oct 11 16:44:18 2012 -0700"
      },
      "message": "Print newly generated userId.\n\nBug: 7334718\nChange-Id: Id4dc456b079bebbe9f2d7ea2a8343d2215f296dc\n"
    },
    {
      "commit": "31af905ac5388339fd0ffd87e6f25bd2a293dc0e",
      "tree": "5df9383c80d52c8ae7bb5b04039b6fb67d7f93b0",
      "parents": [
        "24169a6beb6726d34c83521f8c0467b4dbafb0de",
        "36db9d0879640a1cb9a8723d6649068a1c4c08de"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Oct 09 19:13:13 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 09 19:13:13 2012 -0700"
      },
      "message": "am 36db9d08: Merge \"Further work on issue #7307399: Framework needs a new pre-user-shutdown...\" into jb-mr1-dev\n\n* commit \u002736db9d0879640a1cb9a8723d6649068a1c4c08de\u0027:\n  Further work on issue #7307399: Framework needs a new pre-user-shutdown...\n"
    },
    {
      "commit": "c0bd747b0605af251ff136277f14220a5a4c9818",
      "tree": "42c57d29d70cb1a8db3ad34da224ac3882481029",
      "parents": [
        "840590dd642719f402491092944a12475d6d6a8e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Oct 09 14:00:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Oct 09 17:57:14 2012 -0700"
      },
      "message": "Further work on issue #7307399: Framework needs a new pre-user-shutdown...\n\n...phase \u0026 callback API\n\nI realized there were a few things wrong with what was there.  The new\nACTION_USER_STARTING was not being sent for the first user at boot, and\nthere was an existing problem where ACTION_USER_STARTED was sent every\ntime there was a user switch.\n\nAlso improved some debug output of broadcasts to make it easier to see\nwhat is going on in this stuff, and better reporting of why a service\ncouldn\u0027t be started.\n\nChange-Id: Id8a536defbbad1f73d94a37d13762436b822fbe3\n"
    },
    {
      "commit": "b17fdf7b512530647037a7805c175c36db1549d8",
      "tree": "6f39365d99652d743df43995626ff39053961bd8",
      "parents": [
        "261ba6207398e7c91ab669f45083499fdc3d6434",
        "af3cd21b08dd22d6ffd747c6314fd49fed3170a0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Oct 09 11:46:28 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 09 11:46:28 2012 -0700"
      },
      "message": "am af3cd21b: Merge \"New command line tool: \"settings\"\" into jb-mr1-dev\n\n* commit \u0027af3cd21b08dd22d6ffd747c6314fd49fed3170a0\u0027:\n  New command line tool: \"settings\"\n"
    },
    {
      "commit": "af75948cddd40a0fde5af051b700306744eae64c",
      "tree": "947f62cf61241b528b0dfa2d7e7ac9dda00fd3f2",
      "parents": [
        "bd03f5abb7bbd5552d49dfec4e78f3d9454238af"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Oct 08 14:56:52 2012 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Oct 08 18:39:27 2012 -0700"
      },
      "message": "New command line tool: \"settings\"\n\nBecause the usual content provider interface doesn\u0027t allow specification of\nthe target user under which to perform settings reads/writes, this CL introduces\na new command line app specifically for that.\n\nUsage:\n\n   settings [--user num] get namespace key\n   settings [--user num] put namespace key value\n\nIf a --user argument is not given, the owner user is targetted.\n\nBug 7299066\n\nChange-Id: I73108bb76b04fad133cc4e0f218d64490de549f1\n"
    },
    {
      "commit": "ce3db01cc8a27e6ee642e9e2c4548b5a03dfde2a",
      "tree": "230f973cd9e7c4ef27dd8e0ea7dbc2c15d99fbf0",
      "parents": [
        "8d8c13ec9b294a861b765bfde3349e7d49b13b30",
        "2036a94a9004613644bdbdab1b10e476be3f0213"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Oct 01 13:08:06 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 01 13:08:06 2012 -0700"
      },
      "message": "am 2036a94a: Merge \"Fix cache deletion for secondary users\" into jb-mr1-dev\n\n* commit \u00272036a94a9004613644bdbdab1b10e476be3f0213\u0027:\n  Fix cache deletion for secondary users\n"
    },
    {
      "commit": "8d8c13ec9b294a861b765bfde3349e7d49b13b30",
      "tree": "44300da6458129c12aaf34fbbaa59f7c88183037",
      "parents": [
        "3993bb00312a9d51b3e770a559a5d18bb9000b43",
        "710d705eae7144cb5c0f45c6c080f7c703898ef4"
      ],
      "author": {
        "name": "Dake Gu",
        "email": "dake@google.com",
        "time": "Mon Oct 01 13:06:24 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 01 13:06:25 2012 -0700"
      },
      "message": "Merge \"Add aah metadata service to whitelist DO NOT MERGE\" into jb-mr1-aah-dev"
    },
    {
      "commit": "710d705eae7144cb5c0f45c6c080f7c703898ef4",
      "tree": "bd17935aa7f8233bc4b09a14ff5e7859bafa4ac1",
      "parents": [
        "bfc88ede25d804602c019461ef7e0c84c3dabaeb"
      ],
      "author": {
        "name": "Dake Gu",
        "email": "dake@google.com",
        "time": "Mon Oct 01 12:35:58 2012 -0700"
      },
      "committer": {
        "name": "Dake Gu",
        "email": "dake@google.com",
        "time": "Mon Oct 01 12:41:51 2012 -0700"
      },
      "message": "Add aah metadata service to whitelist DO NOT MERGE\n\nTemporary solution for b/7262633.  We are using binder service for IPC between\nmediaserver and client app for sending synchronized beat tempo.  The change\nwill never be merged back to upstream.  Will replace it with a new IPC\nmechanism later.\n\nChange-Id: Ic06546a0085e401f49b65e0327247fcce1df681f\n"
    },
    {
      "commit": "54289b8b4a110cc1ae106d79785cc762a2aebd6e",
      "tree": "a414077d404f27aa8643ef1516ad9829b6fc214d",
      "parents": [
        "c56e5600501a5c376dc13e6a99fcec7782fc8718"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Oct 01 10:39:14 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Oct 01 11:19:55 2012 -0700"
      },
      "message": "Fix cache deletion for secondary users\n\nBug: 7249419\n\nChange-Id: Idbc0f9994508059ebf5055aea961b87e08b3673a\n"
    },
    {
      "commit": "3ff8e1a80058e5557d13693d3223e1aa011c0038",
      "tree": "62d3c43fa2261c2aec17b76f08b7c8cc784c81fc",
      "parents": [
        "1d3527354396d3aa48b494fb409d680cce32dc8b",
        "d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 28 15:53:19 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 28 15:54:44 2012 -0700"
      },
      "message": "Merge \"Fix issue #7211769 and #7244492, thrash around on #7226656.\" into jb-mr1-dev"
    },
    {
      "commit": "1d3527354396d3aa48b494fb409d680cce32dc8b",
      "tree": "6934b6b63276fdf0f30ad0c2cbec7ad08732a890",
      "parents": [
        "925a659d824089d2977b44a6740f793ae65f809a",
        "f41496f1791d983bf8bbbdf95f72528e59284b39"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 28 15:52:25 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 28 15:52:26 2012 -0700"
      },
      "message": "Merge \"Fix issue #7202950: After clearing data, clear data button is still enabled.\" into jb-mr1-dev"
    },
    {
      "commit": "d4ac8d7b3de27a9f0e4c6af2496ca71d794e42d1",
      "tree": "874663abeb7379376c3deeb68081606e6f62d8d3",
      "parents": [
        "97298cdcc0e699912288191c28bebe895759e75e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 27 23:20:10 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 28 15:37:22 2012 -0700"
      },
      "message": "Fix issue #7211769 and #7244492, thrash around on #7226656.\n\nIssue #7211769: Crash dialog from background user has non-working \"report\"\n\nThe report button now launches the issue reporter for the correct user.\nAlso for crashes on background users, either disable the report button,\nor simply don\u0027t show the dialog depending on the build config.\n\nIssue #7244492: Bugreport button in Quick Settings doesn\u0027t actually do anything\n\nNow they do.\n\nIssue #7226656: second user seeing primary user\u0027s apps\n\nI haven\u0027t had any success at reproducing this.  I have tried to tighten up\nthe path where we create the user to ensure nothing could cause the\nuser\u0027s applications to be accessed before the user it fully created and thus\nmake them installed...  but I can\u0027t convince myself that is the actual problem.\n\nAlso tightened up the user switch code to use forground broadcasts for all\nof the updates about the switch (since this is really a foreground operation),\nadded a facility to have BOOT_COMPELTED broadcasts not get launched for\nsecondary users and use that on a few key system receivers, fixed some debug\noutput.\n\nChange-Id: Iadf8f8e4878a86def2e495e9d0dc40c4fb347021\n"
    },
    {
      "commit": "f41496f1791d983bf8bbbdf95f72528e59284b39",
      "tree": "3bca6a251fbd6fd31431c7f9d4ead4f2cd141005",
      "parents": [
        "580ee8b0c6e1aea1e2e1d60499b603b9168b44f0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 27 18:48:09 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 27 18:48:09 2012 -0700"
      },
      "message": "Fix issue #7202950: After clearing data, clear data button is still enabled.\n\nCount the lib symlink against the app\u0027s code size.  Also be sure to\nlook at the new separate lib path for apps, and tweak the size\ncounting to also count the size of directory entries.\n\nChange-Id: I4b0fd5771f249faa05fd72f08062df885902cc97\n"
    },
    {
      "commit": "37d83a3caf138e35fa1a355787d20c351f6b37a6",
      "tree": "a4fe753ce045a1fc0eb7edc17641425981a6079f",
      "parents": [
        "0b1711582ff07d6d1e8e4de6c057eaf6a3473ac3"
      ],
      "author": {
        "name": "Ben Gruver",
        "email": "bgruv@google.com",
        "time": "Thu Sep 27 13:02:06 2012 -0700"
      },
      "committer": {
        "name": "Ben Gruver",
        "email": "bgruv@google.com",
        "time": "Thu Sep 27 13:02:06 2012 -0700"
      },
      "message": "Pass the originating uid to the package verifier\n\nBug: 6923241\nChange-Id: I85a3e0d53b469543cb0551d3a440d2663b5d0697\n"
    },
    {
      "commit": "b12e1354f25f04e9c9a71da76c6fca858b7d39d0",
      "tree": "3568c1a0ce0a3348fbfcb4d5773140f26f630f80",
      "parents": [
        "2fd6cb043901c1bfbf5f566d13522cc3c1c21fb4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 26 11:39:20 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 26 14:50:12 2012 -0700"
      },
      "message": "Maybe fix issue #7211766: bindService() to User u0 While u10 is...\n\n...Forground Sometimes Doesn\u0027t Take\n\nThe main change here is a one-liner in ActiveServices to check the\nuid when deciding whether to remove an item from mPendingServices.\nThis could cause the problem being seen -- if the same service for\ntwo users is starting at the same time, the second one would blow\naway the pending start of the first one.  Unfortunately I have had\ntrouble reproducing the bug, so I don\u0027t know if this is actually\nfixing it.  It\u0027s a bug, anyway.\n\nThe reason so much has changed here is because I spread around\nlogging and printing of the user ID associated with operations and\nobjects to make it easier to debug these kind of multi-user things.\n\nAlso includes some tweaks to the oom manager to allow more background\nprocesses (I have seen many times in logs where we thrash through\nprocesses because the LRU list is too short), plus to compensate an\nadditional time-based metric for when to get rid of background processes,\nplus some new logic to try to help things like Chrome keep around\ntheir service processes.\n\nChange-Id: Icda77fb2a1dd349969e3ff2c8fff0f19b40b31d3\n"
    },
    {
      "commit": "556b09e184b891d9542092962ed248616810e054",
      "tree": "8b924f113c33e48370dfd3d157edfd4a0b809533",
      "parents": [
        "6b3292ce5b3908c7433503f64c852cf2b27718ed"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sun Sep 23 17:46:53 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 24 11:02:45 2012 -0700"
      },
      "message": "Fix issue #6926562: Ensure all multi-user cache files are managed correctly\n\nNow we correctly iterate through the different user cache dirs.\n\nAlso update documentation to describe the new cache pruning behavior,\nand deprecate the file modes for making files world readable/writable\nwhich we really don\u0027t want people using any more.\n\nChange-Id: I3708df3ddc697b1f5c511143cce7cc40a5a3d0bd\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": "920ace0bbc2d4133dbec991d2636c99a57d6245e",
      "tree": "a69deeaa2cd76a15eaf402faeb95bba608bc6895",
      "parents": [
        "2f98008d06cbe48f0f5619d16f59988952c9b2ca"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Sep 20 22:15:37 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Sep 20 22:33:43 2012 -0700"
      },
      "message": "Query users excluding any being removed\n\nKeep track of user creation and last logged-in time.\nadb shell dumpsys users\nUser switcher shouldn\u0027t show users about to be removed.\nNo need to check for singleton for activities.\n\nBug: 7194894\nChange-Id: Ic9a59ea5bd544920479e191d1a1e8a77f8b6ddcf\n"
    },
    {
      "commit": "9ba2a188919e6e5bf8c042b26527fc090de677ef",
      "tree": "ffe81460ca6a2f255d7cb6fe93a79fb0b081a72a",
      "parents": [
        "faed98a161f58441ebce3dcb08cd8bf76a76da4e",
        "59c53c6224e2f84d31a56854ebe90d22055100d2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 11 13:56:04 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 11 13:56:04 2012 -0700"
      },
      "message": "Merge changes I4ad08873,If0562677,I5fe6ba32 into jb-mr1-dev\n\n* changes:\n  Don\u0027t auto-discover peers until scan requested.\n  Use wfdInfo to filter available sinks.\n  Allow adb shell am display-size to use bigger sizes.\n"
    },
    {
      "commit": "9bbd70a96397bd5f1445ad6c21977fccfb350dfa",
      "tree": "c743afec7bf0debfd58239d2a2bf5898d8cba94e",
      "parents": [
        "9f750af6c178d8abb5c12d34efba599e3d53aea4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Sep 10 11:13:36 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 11 10:55:17 2012 -0700"
      },
      "message": "Remove \"unlinklib\" command from installd\n\nunlinklib is no longer necessary since libraries are now either stored\nin an ASEC container or in /data/app-lib\n\nReplace lib directory with a symlink to the /data/app-lib directory even\nif it\u0027s a dangling link. That way developers don\u0027t name something \"lib\"\nin their directory which gets blown away during an update.\n\nChange-Id: I142cf13dba9c13aafbaf0ff8d5e9872cbf1cc910\n"
    },
    {
      "commit": "43aa15912891930833edfc101615a9c881de54a1",
      "tree": "efc406d48cce0d3ae7e1b299ffba0c65646cb089",
      "parents": [
        "df46c637550b4c6f0543574cfbd544329f48f5c7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 10 17:36:31 2012 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 10 17:50:18 2012 -0700"
      },
      "message": "Allow adb shell am display-size to use bigger sizes.\n\nWe now support scaling the logical display to fit the\nphysical display, whatever size it is.  So we can allow\nadb shell am display-size to use more or less arbitrary sizes\nalthough we do enforce an upper and lower bound to\nprotect the user.\n\nChange-Id: I5fe6ba32ad1f9e4fbcd6915f7d36850b987bbcc0\n"
    },
    {
      "commit": "4573e29faf40983f9d1df99bb0f506d77a868e05",
      "tree": "fc3c3d39f54d21efaf2d2e9327c143ae9eb6a2eb",
      "parents": [
        "d7f5a51baf2c46436dc5bac3807fb0d46cbff304",
        "1676c856d61b97c871dc2be0cb1f1fb1e12e24e9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 10 15:39:02 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 10 15:39:02 2012 -0700"
      },
      "message": "Merge \"Flesh out multi-user in am commands.\" into jb-mr1-dev"
    },
    {
      "commit": "1676c856d61b97c871dc2be0cb1f1fb1e12e24e9",
      "tree": "7352f5bccdec8d7b9d90f9fb1d43dfa901e00f4a",
      "parents": [
        "41bd89f6b61296492d3775e5ef30e94c5f18d34f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 10 14:52:30 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Sep 10 14:52:30 2012 -0700"
      },
      "message": "Flesh out multi-user in am commands.\n\nNow we default to the current user instead of user 0 for most commands\n(except where we can do the command for all users).\n\nMany more commands take a user argument: force-stop, kill, profile,\ndumpheap.\n\nImproved help text.\n\nChange-Id: I719a13b4d31b668f57ca21e51d7043ac3e0d4e1b\n"
    },
    {
      "commit": "d7f5a51baf2c46436dc5bac3807fb0d46cbff304",
      "tree": "e58ebfb7e060ecdd1ce769cc3a09f7327d58b762",
      "parents": [
        "e11dc0ddab438d3b6545bc5d1582e1deddb5d465",
        "b38070caa5143ab9fd1883e0c7c879533a480bc7"
      ],
      "author": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Mon Sep 10 14:12:47 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Sep 10 14:12:48 2012 -0700"
      },
      "message": "Merge \"IME support for trackball and generic motion events\" into jb-mr1-dev"
    },
    {
      "commit": "b38070caa5143ab9fd1883e0c7c879533a480bc7",
      "tree": "ffbed34eefd1fd81a028e1a14820d48953252b29",
      "parents": [
        "37ee53420ce47860807eb8eaeb454c12fa46797b"
      ],
      "author": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Fri Aug 24 13:46:02 2012 -0700"
      },
      "committer": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Mon Sep 10 14:01:42 2012 -0700"
      },
      "message": "IME support for trackball and generic motion events\n\nTrackball and generic motion events now pass through the IME in case\nit would like to handle them before passing them on to the view\nhierarchy.\n\nWhile I was at it, I also...\n...fixed the documentation on InputMethodService.onKeyUp()\n...added documentation to InputMethodService.onTrackballEvent()\n...added trackball and generic motion events to the \"input\" command\n...fixed input consistency verification involving ACTION_OUTSIDE\n\nBug: 7050005\nChange-Id: I40ab68df4a9542af6df25de6ec2ec500e4c02902\n"
    },
    {
      "commit": "5de4d989fbc08cf5135c07a74e2062bf64af95f1",
      "tree": "6e1740df03f570f31767f2516879bc4550e59da2",
      "parents": [
        "8727a73127dde026a797511d28355868797f0e46",
        "783f9e6615db5c90c184397cf1ee271e302c398b"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Sun Sep 09 14:46:44 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Sep 09 14:46:44 2012 -0700"
      },
      "message": "Merge \"Use correct PowerManager call to wake up screen\" into jb-mr1-dev"
    },
    {
      "commit": "783f9e6615db5c90c184397cf1ee271e302c398b",
      "tree": "c552f9768c06a47f2515f7ef116aea5bcb8c7cbc",
      "parents": [
        "add52a975aa78d9e24d3e63a8168c00a9bfb80ec"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Sun Sep 09 14:38:23 2012 -0700"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Sun Sep 09 14:43:09 2012 -0700"
      },
      "message": "Use correct PowerManager call to wake up screen\n\nThe current implementation does not actually wakes up the screen.\n\nChange-Id: Ief2dca013cfe40e03b64273fe7b09822e9ad42a7\n"
    },
    {
      "commit": "0c191624fba8484e811027a9db40a62a960ab7dc",
      "tree": "58c22c2bb7a920b6740da3e3268ebff01a308f80",
      "parents": [
        "add52a975aa78d9e24d3e63a8168c00a9bfb80ec"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sat Sep 08 17:03:48 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sun Sep 09 12:12:43 2012 -0700"
      },
      "message": "Remove \"protect\" command from installd\n\nNo one uses the \"protect\" command anymore, so remove it from installd.\n\nChange-Id: Ia990bae6f95cd6e317496f5dd173ec15164d7164\n"
    },
    {
      "commit": "151ec4c9f8ca34625733730a4551a23eb97cda23",
      "tree": "9a0ab8bed19904dce51ae3d23f5ff72c0581b7e2",
      "parents": [
        "4aacf93d40b4be82aa35bf164d6fd6536c8b2a50"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Sep 07 19:25:16 2012 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Sep 08 19:14:00 2012 -0700"
      },
      "message": "More multi-user methods in PM\n\npm can list installed packages by user now.\n\nBug: 6926465\n\nChange-Id: I822311bfd6e7e2d6fb315fc484739fbf953c9bb6\n"
    },
    {
      "commit": "cd620591b764cd999f18878985444fba01d5b710",
      "tree": "4e5da1d1ca16e8e45e5e89d5b6123b3f98a418a8",
      "parents": [
        "1275abd013eee87b3fec5b704a799440cb1c71fe",
        "7de350a91301985b7f2d9f28edde5aade8495d9b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 07 15:58:43 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 07 15:58:44 2012 -0700"
      },
      "message": "Merge \"installd: fix forward locking symlink\" into jb-mr1-dev"
    },
    {
      "commit": "7de350a91301985b7f2d9f28edde5aade8495d9b",
      "tree": "9db121eeed2e9d947564d465670c093f48ef0616",
      "parents": [
        "37ee53420ce47860807eb8eaeb454c12fa46797b"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 07 15:48:11 2012 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Sep 07 15:48:11 2012 -0700"
      },
      "message": "installd: fix forward locking symlink\n\ninstalld was not creating a compatibility symlink when\ninstalling a forward locked application.  Fix.\n\nBug: 7121527\nChange-Id: Ied507ab2b759d8658af563e6ac8f0dbb0d286cce\n"
    },
    {
      "commit": "649d0d71b245d88746b78399ffa1f75da7c80974",
      "tree": "2e09499bacc887453c6fbe0c2a2c737e3d0bb247",
      "parents": [
        "55e6b77bda7da1684ca32493d9e03184bd441dab",
        "5e03e2ca7d25b899b129baad2dd5eca6bf99d88a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 07 14:11:56 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 07 14:11:56 2012 -0700"
      },
      "message": "Merge \"More multi-user stuff:\" into jb-mr1-dev"
    },
    {
      "commit": "5e03e2ca7d25b899b129baad2dd5eca6bf99d88a",
      "tree": "10c601a58b0bbeb6902d43e0862c58f3ec121c78",
      "parents": [
        "970683c5d42a1d8588d656d4e570ce4f0f6e0abc"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 06 14:21:19 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 07 13:55:23 2012 -0700"
      },
      "message": "More multi-user stuff:\n\n- New (hidden) isUserRunning() API.\n- Maintain LRU list of visited users.\n- New FLAG_IS_DATA_ONLY for ApplicationInfo.\n- Clean up pending intent records when force-stopping a user (or package).\n  (Also fixes bug #6880627: PendingIntent.getService() returns stale\n  intent of force stopped app)\n- Fix force-stopping when installing an app to do the force-stop across\n  all users for that app.\n- When selecting which processes to kill during a force stop, do this\n  based on the actual packages loaded in the process, not just process\n  name matching.\n- You can now use --user option in am when starting activities, services,\n  and instrumentation.\n- The am --user option accepts \"current\" and \"all\" as arguments.\n- The pm uninstall command now uninstalls for all users, so it matches\n  the semantics of the install command.\n- PhoneWindowManager now explicitly says to start home in the current\n  user.\n- Activity manager call to retrieve the MIME type from a content provider\n  now takes a user argument, so it will direct this to the proper user.\n- The package manager uninstall paths are now implemented around\n  PackageSetting, not PackageParser.Package.  This allows them to work\n  even if the application\u0027s apk has been removed (in which case it only\n  exists as a PackageSetting, not the PackageParser.Package parsed from\n  the apk).\n\nChange-Id: I3522f6fcf32603090bd6e01cc90ce70b6c5aae40\n"
    },
    {
      "commit": "3065963f817f9a0f032ec7992c4154cfdeed443d",
      "tree": "851cf3cad6d5cc7b3a8ecfbb46211ab92a19ad5e",
      "parents": [
        "9ca26e43652b516f6d38dc92120d802b5e8bfde4"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Thu Sep 06 11:41:20 2012 -0700"
      },
      "committer": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Thu Sep 06 11:43:03 2012 -0700"
      },
      "message": "Wrapped call to notifyAll() in a synchronized block\n\nChange-Id: I452caa56bef4541b53917bdd6f22034161255dd1\nBug: 7118468\n"
    },
    {
      "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"
    }
  ],
  "next": "3a3c7e7bc4f599c35f5ed4feeead15c6c5a4621f"
}
