)]}'
{
  "log": [
    {
      "commit": "0114263a1aff5dea92fdafbec81c1b40093e9aba",
      "tree": "b58346761de3577c5176853e02c1397329e90f08",
      "parents": [
        "915d5245533c449550b9dae54b71414394ae2d74",
        "e29cd4724ff41f1cd81c1493f02fb0ba2b2f8197"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Fri Mar 04 13:13:26 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 04 13:13:27 2016 +0000"
      },
      "message": "Merge \"enforceCanSetDeviceOwnerLocked should enforce userId \u003d\u003d USER_SYSTEM for non-split user mode\" into nyc-dev"
    },
    {
      "commit": "e29cd4724ff41f1cd81c1493f02fb0ba2b2f8197",
      "tree": "e79cf2c441715b0c1a974cbe48181653428e42f8",
      "parents": [
        "5676ae256a15b73d724c38940356be324fc9647a"
      ],
      "author": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Wed Mar 02 20:57:42 2016 +0000"
      },
      "committer": {
        "name": "Victor Chang",
        "email": "vichang@google.com",
        "time": "Fri Mar 04 10:34:43 2016 +0000"
      },
      "message": "enforceCanSetDeviceOwnerLocked should enforce userId \u003d\u003d USER_SYSTEM for non-split user mode\n\nBug: 27453111\nChange-Id: I1acdfecdf4474696e904a6a4df189453be306aa4\n"
    },
    {
      "commit": "bfecba2938bd01299c74bc7d7cf0191c1908776a",
      "tree": "7f05776c6405cadd1a84703b2d4c6cf9b7887b97",
      "parents": [
        "e7636e47504034c048872f251a0a7cb240017b31"
      ],
      "author": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Sun Feb 21 01:09:26 2016 +0900"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Wed Mar 02 17:01:50 2016 +0900"
      },
      "message": "Speed up ConnectivityServiceTest.\n\n1. Override WakeupMessage with an implementation that uses\n   sendEmptyMessageDelayed. This allows us to replace a\n   6-second sleep with a 150ms wait.\n2. Change waitFor()\u0027s polling interval from 100ms to 50ms.\n\nWith these changes ConnectivityServiceTest goes from ~9s to ~3s.\n\nChange-Id: Id78aab9cded90a5b17f09d7f437904e179808dd2\n"
    },
    {
      "commit": "b7ffb764370805aa0734d2f31bc2def34df04d86",
      "tree": "3778a67f3709566fd6bcb47622065ffb0fc131fd",
      "parents": [
        "aa8a5cd9bb54add680e2390ede2e4a741ec11db9",
        "531a34430072b9296aaeb47d9e7d04326a93fee4"
      ],
      "author": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Wed Mar 02 04:18:02 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 02 04:18:03 2016 +0000"
      },
      "message": "Merge changes Ic366b532,I0179b45b into nyc-dev\n\n* changes:\n  Move PinningNetworkCallback out to a new NetworkPinner class.\n  Use MessageUtils in ConnectivityManager.\n"
    },
    {
      "commit": "531a34430072b9296aaeb47d9e7d04326a93fee4",
      "tree": "1296e1183fcd17755eb6176853fa4779eecfdfbb",
      "parents": [
        "fcfa7d921a173847a0b3946983612e031e73c44c"
      ],
      "author": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Tue Mar 01 12:55:58 2016 +0900"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Wed Mar 02 12:50:35 2016 +0900"
      },
      "message": "Move PinningNetworkCallback out to a new NetworkPinner class.\n\nAlso add tests.\n\nBug: 19159232\nChange-Id: Ic366b53259ee5944a8e864876425a6558c0a7216\n"
    },
    {
      "commit": "f0f629ffe44716b8d900929135142f0ebb9325f4",
      "tree": "7fe012d6a0313677a6cd916b7dc47174e615858b",
      "parents": [
        "3070d75bf3a6a054f299872a602569f3fceee02f"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Thu Feb 25 09:34:04 2016 -0500"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Feb 26 10:54:08 2016 -0500"
      },
      "message": "Introduce IMPORTANCE_MIN.\n\nAllow HUNs for \u003e\u003d IMPORTANCE_HIGH.\nAllow full screen intents for IMPORTANCE_MAX.\n\nBug: 22960980\nBug: 26918284\nChange-Id: Id4d2b90ea2e21563dbc716db411060d826e73699\n"
    },
    {
      "commit": "a4fae1545ae38f61385e45e8f635994f447efca5",
      "tree": "7647f09b0643415cf38c2357f5989d75d3585921",
      "parents": [
        "785eb6039b8b161c36bfa1e6add1cd1cd7975208",
        "889c0880661bda16e3759995e03766ddf0350732"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Feb 24 22:20:06 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 24 22:20:08 2016 +0000"
      },
      "message": "Merge \"Support safe mode properly.\" into nyc-dev"
    },
    {
      "commit": "889c0880661bda16e3759995e03766ddf0350732",
      "tree": "d8855cbc9129cd2dd5b9b1315d577d5c59e6fd6c",
      "parents": [
        "eefb17ac61698e1b1fe9ed9e6e4d3695d3100053"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 16 15:20:30 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Feb 24 13:12:01 2016 -0800"
      },
      "message": "Support safe mode properly.\n\nIn safe mode, IPM.queryXxx() doesn\u0027t work.  Use IPM.getReceiverInfo()\ndirectly instead.\n\nBug 27108276\n\nChange-Id: Ice8f882559b8f0596a19ddb3a16395a4dc538a25\n"
    },
    {
      "commit": "1085ff6ee531931ef7f55cbadbc83616f619b292",
      "tree": "d22fbecb4f8ab5f6fb4d69b74970d79c5f9e357c",
      "parents": [
        "f8df4d0d430bef68254c695eb60e702638e8ff02"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 23 17:04:58 2016 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 23 17:04:58 2016 -0800"
      },
      "message": "Work towards issue #26390161: Throttle syncs/jobs when system is low on RAM\n\nFirst, we need to make the job scheduler prioritize jobs for\nforeground apps over background apps (so we will degrade well\nwhen we are limiting the number of concurrent jobs).\n\nSo now the job scheduler keeps track of the process state of\neach uid, and uses that to bump up the priority of jobs\nassociated with foreground uids.  Added constants for priorities\nsince we have different places specifying priorities.\n\nAlso cleaned up a bit of the reporting of \"wrapped\" jobs from\nthe sync manager -- there is a new tag argument that can be supplied,\nto have the name and tag used in various places be based on that\ninstead of the useless internal class name.\n\nChange-Id: I8781750ddfac1472a98e1873fc38c014425db3d6\n"
    },
    {
      "commit": "2f36fd6fc94b62b8ccd03cdcea89826d05414f93",
      "tree": "cd6761bfa8af839ca5b9acebf0a7698b97c417fe",
      "parents": [
        "272fe13331cad7197e47c19056d2f49dd26ba0b3"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Feb 18 18:36:08 2016 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Feb 22 12:42:29 2016 -0800"
      },
      "message": "Limit scheduled jobs to 100 per app\n\nPackages that are entitled to schedule jobs on behalf of other uids\nare not subject to the limit.  Also break the JobStore\u0027s monolithic\nset of jobs into per-uid slices for efficiency and orthogonality.\n\nBug 27150350\n\nChange-Id: I8f5f718bf200d55f9977a6fc53b7f617e7652ad9\n"
    },
    {
      "commit": "b0001f6fb1383d9824c2733896b0b348e7f77240",
      "tree": "33875a7674f9a882d88735264026e77e008c977b",
      "parents": [
        "9d3a4e1c31e07d37edc59cf7613cd392152b9d26"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 16 10:30:33 2016 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 19 18:29:34 2016 -0800"
      },
      "message": "Remove internal locking from JobStatus.\n\nNow all state of JobStatus is implicitly protected by the lock\nof whoever is using it -- in this case the global lock for the\nJobSchedulerService.  This allows us to remove all of the atomic\nvariables and just replace those with a simple bit field.\n\nThe required constraints for a job are now statically defined\nonce a JobStatus is created, and don\u0027t change.  (They wouldn\u0027t\nchange before, but now this is absolutely specified to be the\ncase.)  This required tweaking the constructors a bit so that\nthe earliest and latest run times are computed as part of the\ncore class initialization.\n\nAlso clarified methods on StateController that are called with\nthe lock held, and took advantage of that in the various\ncontrollers to not now redundantly re-acquire the lock.\n\nChange-Id: I595c5e7d1bff1bd2ff906d612581af82878a25ee\n"
    },
    {
      "commit": "33d31c5b70c7d056e799e34bb6eccbe6939714ea",
      "tree": "8f754971ad5144d2503fec7252588bbfdb11f6b6",
      "parents": [
        "263e21f12cba4a2c5b4a6ac07fad55a4afc2ec45"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 16 10:30:33 2016 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Feb 19 16:49:47 2016 -0800"
      },
      "message": "Simplify job scheduler service locking.\n\nUnify all locks to just one lock protecting the entire service.\nThere is really no need for more complicated locking -- there is\nnothing in the code that can take a long time to complete.  And\nhaving a single lock will allow various parts of the code to be\nmuch simpler and easier to maintain.\n\nThis is just the first step of the change, switching all of the\nlocking to use one lock.  With this done, we can now start\nsimplifying the code.  For example, JobStatus no longer needs\nto do any locking (or have atomic variables and such), it can\njust rely on its callers holding the global service lock.\n\nChange-Id: I502916ed7f2994b601750c67a59a96b1a4e95c6d\n"
    },
    {
      "commit": "73d96fb4bbe1e3796e655314619bf9897d07c929",
      "tree": "9bbaf1c4ba347cc8d7d2ddcc243ff1afd2391d4b",
      "parents": [
        "ea168d229d316c84652e88ad0f19adbaa884d731",
        "ef37f284364cc45c2ed91bfe04c489d2cedd32d2"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Feb 19 19:17:23 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 19 19:17:25 2016 +0000"
      },
      "message": "Merge \"Remove Notification Topics.\" into nyc-dev"
    },
    {
      "commit": "4ab36372fb7f2f8236d9fa308ec508582fc52607",
      "tree": "8002bdacc0c332b7b18866e14f6d2b3a394e4597",
      "parents": [
        "5042001350bcc74fc58a77eb1122dc4a64a703df",
        "2a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Feb 19 00:21:47 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 19 00:21:48 2016 +0000"
      },
      "message": "Merge \"Clean up on UserManagerService and DPMS\" into nyc-dev"
    },
    {
      "commit": "2a3c3da0fc07ef37abc45cfb0166bdf5f7f202b6",
      "tree": "88f20a020b35ba051f4f1adcc6654a66de85f103",
      "parents": [
        "0bc3cc9c2fdc18eb305088adb9be72953df14473"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Feb 18 14:25:30 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Feb 19 00:20:56 2016 +0000"
      },
      "message": "Clean up on UserManagerService and DPMS\n\n- Avoid the ART warning about 4.1 compatibility\n- Avoid integer overflow in DPMS\n\nBug 27243525\nBug 27242859\n\nChange-Id: I92af323287e348fbd0eff31e6cf9823be8e41024\n"
    },
    {
      "commit": "24f62ea63482e6c5d5ba3357951e13e25221eb2e",
      "tree": "06963e423e18c27a49ca60d0f5eff7f0cc2a8128",
      "parents": [
        "0d198d3afc14897ecfcc4972ecd67bc0c2d6651b",
        "60949288064460894bdd288f4865cdb180c0e501"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Feb 18 20:26:40 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 18 20:26:41 2016 +0000"
      },
      "message": "Merge \"Fix bugs in user restriction migration\" into nyc-dev"
    },
    {
      "commit": "60949288064460894bdd288f4865cdb180c0e501",
      "tree": "5299f3e7fb6de2b33fff5a269ff45c2ce1743f62",
      "parents": [
        "0bc3cc9c2fdc18eb305088adb9be72953df14473"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Feb 17 16:52:59 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Feb 18 12:09:30 2016 -0800"
      },
      "message": "Fix bugs in user restriction migration\n\nOriginally I didn\u0027t know user-0 could have PO, so I excluded this case\nfrom migration.  Now we handle it properly.\n\nAlso make sure only restrictions that can actually be set by each\nowner moves to the owner restriction.  (Because of this, we no longer\nhave to have DISALLOW_WALLPAPER in the exception list, because\nowners can\u0027t set DISALLOW_WALLPAPER.)\n\nBug 27225996\n\nChange-Id: I6ad79d90e6c4400abbb1e4feba6ba59e3b650815\n"
    },
    {
      "commit": "12d7ea815b772b1013f9f5a583d296701a702a0c",
      "tree": "32d8146c23e24bf340802e97bfa230a1d0bb37f2",
      "parents": [
        "003ee198518490c9572e610ddc21e8b3a024364c",
        "cd42acd9515bdce89d4f1401ee2888d684bf1918"
      ],
      "author": {
        "name": "Antonio Cansado",
        "email": "acansado@google.com",
        "time": "Thu Feb 18 19:43:41 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 18 19:43:42 2016 +0000"
      },
      "message": "Merge \"Implementation of data usage callbacks.\" into nyc-dev"
    },
    {
      "commit": "ef37f284364cc45c2ed91bfe04c489d2cedd32d2",
      "tree": "e2d145fa134fbb6d8a98723a9ddf330a414995fa",
      "parents": [
        "0f900c02d9aafa9a98ff39ea7d661c1cdfbddcdb"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Feb 12 09:11:27 2016 -0500"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Thu Feb 18 08:55:33 2016 -0500"
      },
      "message": "Remove Notification Topics.\n\nBug: 23220370\nChange-Id: Ifbcdbab1cf6974c192483091512f75762784a98e\n"
    },
    {
      "commit": "cd42acd9515bdce89d4f1401ee2888d684bf1918",
      "tree": "6c94609f6bbf2c6808409ab07c3490fe10881b6d",
      "parents": [
        "c86f234c51ebcb78164d850177eb2143112f9f65"
      ],
      "author": {
        "name": "Antonio Cansado",
        "email": "acansado@google.com",
        "time": "Wed Feb 17 13:03:38 2016 -0800"
      },
      "committer": {
        "name": "Antonio Cansado",
        "email": "acansado@google.com",
        "time": "Wed Feb 17 18:43:53 2016 -0800"
      },
      "message": "Implementation of data usage callbacks.\n\nNetworkStatsService will register data usage requests\nand keep data usage stats scoped to the request.\n\nThere are different types of data usage requests\n- scoped to a set of NetworkTemplate; these are restrictred to\ndevice owners and carrier apps and allow the caller to monitor\nall activity on the specified interfaces.\n- scoped to all uids visible to the user, if the user has\nandroid.Manifest.permission#PACKAGE_USAGE_STATS permission.\nThe set of uids may change over time, so we keep track of that.\n- scoped to a set of uids given by the caller, granted that\nthe caller has access to those uids.\n- scoped to the caller\u0027s own data usage. This doesn\u0027t require\nPACKAGE_USAGE_STATS.\n\nBug: 25812785\nChange-Id: Ie11f35fc1f29d0dbe82f7fc924b169bb55c76708\n"
    },
    {
      "commit": "184db600df42c2b27a2d34deecab57d591434b22",
      "tree": "ec3c5a28bb13da00efca91705ce7099f8d3a1033",
      "parents": [
        "c18766d065152ee6c5870a9809b35577f71ed8e1"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Feb 17 15:35:01 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Feb 17 15:35:01 2016 -0800"
      },
      "message": "Ensure DO/PO are also DA.\n\nBug 24503508\n\nChange-Id: Ib957b84d5bee185501636c406d9aaf4985a79d8d\n"
    },
    {
      "commit": "dafec11e698daf054730cfb04db64f3e31a0c9ff",
      "tree": "73932fb9f69e0714c2b1ed47cda5a90b2ec2cd75",
      "parents": [
        "61def3e43537599204290447d57967a37eef0fa4",
        "1a5ee776ee51ae6fba30c8f3b33e26eb7f9dedc6"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 16 20:47:09 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 16 20:47:10 2016 +0000"
      },
      "message": "Merge \"Don\u0027t allow deactivating DAs when the user is not unlocked\" into nyc-dev"
    },
    {
      "commit": "b55fa08c74141d2c0e4ef9218214e1ba30bac8b8",
      "tree": "a61c2201dc4ca63e75858788455ec6917d191b7c",
      "parents": [
        "8e552f2eaef9c31c6e69c3babe6639829afd7b1c",
        "8e64e2e6a4d2964b6a4147f5cccd03de934c86cd"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Tue Feb 16 14:55:43 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 16 14:55:44 2016 +0000"
      },
      "message": "Merge \"Fixes JobScheduler not persisting flex and sourcePackage\" into nyc-dev"
    },
    {
      "commit": "8e64e2e6a4d2964b6a4147f5cccd03de934c86cd",
      "tree": "de84db7285af54cd1f7073388d3be54256d72b39",
      "parents": [
        "46d537716e00878073a740101f1e1e088f728817"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Fri Feb 12 15:49:31 2016 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Mon Feb 15 15:51:52 2016 +0000"
      },
      "message": "Fixes JobScheduler not persisting flex and sourcePackage\n\nThere was a bug with persisteing and restoring flex and\nsourcePackage. Fixed it and added tests.\n\nChange-Id: Ie8e4714b4727ecef4254773fd4339b28f4a47c01\n"
    },
    {
      "commit": "1a5ee776ee51ae6fba30c8f3b33e26eb7f9dedc6",
      "tree": "d0dec9807612d70de1c18c27136c197188284d16",
      "parents": [
        "9036f9989b83d2954a7af9ab01f5925ebe76eadf"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Feb 12 15:34:57 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Feb 12 16:04:42 2016 -0800"
      },
      "message": "Don\u0027t allow deactivating DAs when the user is not unlocked\n\nBug 27149570\n\nChange-Id: I772d9cbd6edc822c8f7b1988905b702e05e674cd\n"
    },
    {
      "commit": "ed1928a981cbff9a67b5c1786ded8cbdf848056b",
      "tree": "132ed9014f8145c3f8a6072f610bbf5c41cc4cae",
      "parents": [
        "ed5c8f0216bf97e896936e2a2e24fc3fb18303a1"
      ],
      "author": {
        "name": "Rubin Xu",
        "email": "rubinxu@google.com",
        "time": "Thu Feb 11 17:23:06 2016 +0000"
      },
      "committer": {
        "name": "Rubin Xu",
        "email": "rubinxu@google.com",
        "time": "Thu Feb 11 17:23:06 2016 +0000"
      },
      "message": "Fix testApplicationRestrictionsManagingApp unit test\n\nThe API now requires the app restriction manager app to exist\non the current user when it is called.\n\nChange-Id: I809816d4f5d73378c23b18d7b74ebb282b7dc444\n"
    },
    {
      "commit": "2b4c8f926fdc8a2ccb88668ca85edfd3ecb9913a",
      "tree": "d547a882743f1ee0260ab37115c6af0e75822ee1",
      "parents": [
        "4fdeed95012827234128fdbd3eacee08d00c3cf2"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Mon Feb 08 23:52:27 2016 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Wed Feb 10 19:09:44 2016 +0000"
      },
      "message": "SyncManager sync blow up fix\n\nDuplicates for periodic syncs would be\ncreated just after boot and when a\nperiodic sync was delayed. This CL fixes\nthe behavior.\n\nBug: 26954967\nChange-Id: I2440961629d443a62f96360563d435af9137857b\n(cherry picked from commit 1675400a7cd0b56e5adc5606fb4fea77f8d24ea5)\n"
    },
    {
      "commit": "354cd3ce2213a1032d9138ea6fa1420f055ab08c",
      "tree": "ac68754da1a191d4a178bddc76499fb75d8cd829",
      "parents": [
        "95728a5db6595e473acf8f428f238afc2fdbbe80"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Dec 17 11:35:04 2015 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Feb 08 15:14:07 2016 -0800"
      },
      "message": "Multi packages per APK\n\nThis change introduces the ability to have multiple packages per\nAPK. The feature is currently restricted to privileged apps and\nupdates to such apps.\n\nIn essence the manifest can have multiple child package declarations.\nA child package can declare everything an Android package can except\nsome tags or attributes that are not applicable and instead inherited\nfrom the parent when needed. For example, the target SDK of the parent\napplies to all children.\n\nA child package can be updated only through the parent package.\nA package with multiple child packages is installed, uninstalled\natomically - no partial installs where some child packages are not\ninstalled.\n\nThe remaining work is to ensure broadcasts are also sent for child\npackages. This will come in a subsequent change.\n\nSample app:ag/848432\n\nDesign doc: https://docs.google.com/document/d/18nFWtJuZchLxrHf5SBbJW03-Ky9Rh_G0-OVB14b6u78\n\nChange-Id: I6fd021d981bf5786290e0c53502724a14c97358c\n"
    },
    {
      "commit": "0ab80e6c261339d17585522a6b69d98a16779c0b",
      "tree": "e3c50ac41756f1fb04d9c95694cb0bb2d157be67",
      "parents": [
        "b7289330e1ae201691dc5b2aa2b6b3a65795e4cb",
        "5f3dec374fac97365ec95ec407a1cffc2c3907c9"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Mon Feb 08 11:41:25 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Feb 08 11:41:25 2016 +0000"
      },
      "message": "Fix FrameworksServicesTests.apk to include libc++.so\nam: 5f3dec374f\n\n* commit \u00275f3dec374fac97365ec95ec407a1cffc2c3907c9\u0027:\n  Fix FrameworksServicesTests.apk to include libc++.so\n"
    },
    {
      "commit": "5f3dec374fac97365ec95ec407a1cffc2c3907c9",
      "tree": "818807dda836685dd0e88604efcc8753d3743465",
      "parents": [
        "6c4aac0bdee2678818f577490c4acfdeeba81c59"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Sun Feb 07 21:55:45 2016 -0500"
      },
      "committer": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Sun Feb 07 21:58:09 2016 -0500"
      },
      "message": "Fix FrameworksServicesTests.apk to include libc++.so\n\nlibc++.so is no longer accessible to the app, so it must be\nbundled in the app. This should get ApfTest passing again.\n\nChange-Id: Ide004cb84f7f50feffb8f5acb46b7001dcffd208\n"
    },
    {
      "commit": "046cc21b7569e25508bf71fca4fb6d36c893b27b",
      "tree": "153cd9ba2b1fbfeaa7a17e47b14146901823e828",
      "parents": [
        "89c6073cd015d9d167492c80a5f21a2a52d3f231",
        "a93542f9d341897f3206f775fd5720663b17504f"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 05 19:41:03 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 05 19:41:04 2016 +0000"
      },
      "message": "Merge \"Rewrite app standby stats\""
    },
    {
      "commit": "a93542f9d341897f3206f775fd5720663b17504f",
      "tree": "9fe0d52848f824b84388a41fcaa891397b1a4e94",
      "parents": [
        "a37278b0a6ce94f06fd403155e17b7d42606741b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 03 18:02:06 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 05 11:38:29 2016 -0800"
      },
      "message": "Rewrite app standby stats\n\nDon\u0027t mix up with usage stats. Keep a separate db and history\nbased on elapsed time and screen on time.\n\nUnit tests for AppIdleHistory class.\n\nBug: 26989006\nChange-Id: If343785b46da1db67f7c1c1263854c2732a232c6\n"
    },
    {
      "commit": "5eec76504ff2ac5a05c73951b7fe38cc6a560bb9",
      "tree": "6a80a67f60ae36c5c23ed93c7fca415367b85dcd",
      "parents": [
        "1fc4a277625e62c886f84dee68f2a809928907a5",
        "8375fcec625d482af894cfed7b608f10cacb0f5d"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Feb 05 13:31:10 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 05 13:31:10 2016 +0000"
      },
      "message": "Merge \"Fix unit tests\""
    },
    {
      "commit": "44278472d84f2bf3c48dcd7e21cd4b97525d7efd",
      "tree": "22bc6579f1936feff4c14e93b9cc5ba5f24b1057",
      "parents": [
        "c9088c5d1b1fdba84c151355d95715e86d72b688",
        "514a3bfde6ccc8ca80f3bacdd370e2d4672b3d85"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Fri Feb 05 01:50:07 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Feb 05 01:50:07 2016 +0000"
      },
      "message": "Fix FrameworksServicesTests.apk to include libnativehelper.so\nam: 514a3bfde6\n\n* commit \u0027514a3bfde6ccc8ca80f3bacdd370e2d4672b3d85\u0027:\n  Fix FrameworksServicesTests.apk to include libnativehelper.so\n"
    },
    {
      "commit": "8375fcec625d482af894cfed7b608f10cacb0f5d",
      "tree": "1d9ed0c675722eba59d20df377b1fb82f4ec7ed4",
      "parents": [
        "5f09616e6bb793e789167e3281478b13413d0932"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Feb 04 18:25:22 2016 +0000"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Feb 04 18:25:22 2016 +0000"
      },
      "message": "Fix unit tests\n\nhttp://ag/858485 added a new flag and the mockito didn\u0027t match\nthe call any more\n\nChange-Id: I8f99b1b6063488aeced08513b11c79bf0162006e\n"
    },
    {
      "commit": "514a3bfde6ccc8ca80f3bacdd370e2d4672b3d85",
      "tree": "13ea0f1b5d2e0de62834d897ccdb24a559dd71d9",
      "parents": [
        "7a504417f23a1388d2a9bf53f0871d274e70c6b2"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Thu Feb 04 09:11:40 2016 -0500"
      },
      "committer": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Thu Feb 04 09:11:40 2016 -0500"
      },
      "message": "Fix FrameworksServicesTests.apk to include libnativehelper.so\n\nlibnativehelper.so is no longer accessible to the app, so it must be\nbundled in the app. This should get ApfTest passing again.\n\nChange-Id: Ie4fe66e44d46ddb12b3c7ac5c91118a69a8ebe2e\n"
    },
    {
      "commit": "8514a8131f4644877c5d9c34a1588ee3d854c035",
      "tree": "1520028070574f7bec42cffb7cd055db97c55a99",
      "parents": [
        "061371b3ee1ac5bf6a6c398b20659305cc4a6aa1",
        "44307adcf371bacad4de6925a9207bdbfdc6f874"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Wed Feb 03 17:12:47 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Feb 03 17:12:47 2016 +0000"
      },
      "message": "Merge \"Android packet filtering program interpreter test \u0026 program generator\" into mm-wireless-dev\nam: 44307adcf3\n\n* commit \u002744307adcf371bacad4de6925a9207bdbfdc6f874\u0027:\n  Android packet filtering program interpreter test \u0026 program generator\n"
    },
    {
      "commit": "44307adcf371bacad4de6925a9207bdbfdc6f874",
      "tree": "ae5b53eee2bf7ac16b66039a8129610129f82a8c",
      "parents": [
        "6076cb0b859185b075d3a70655afb192d68d0774",
        "d38fb7662d0e525eee57062ee8c14f661b1aee2d"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Wed Feb 03 16:48:43 2016 +0000"
      },
      "committer": {
        "name": "Android Partner Code Review",
        "email": "android-gerrit-partner@google.com",
        "time": "Wed Feb 03 16:48:43 2016 +0000"
      },
      "message": "Merge \"Android packet filtering program interpreter test \u0026 program generator\" into mm-wireless-dev"
    },
    {
      "commit": "d38fb7662d0e525eee57062ee8c14f661b1aee2d",
      "tree": "1236fd5692eb7a725570ecca6a8445eb2cd5f367",
      "parents": [
        "a3fc54f0d879cbf0bdbb5bd2fe5043dd19232191"
      ],
      "author": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Thu Jan 07 23:13:19 2016 -0500"
      },
      "committer": {
        "name": "Paul Jensen",
        "email": "pauljensen@google.com",
        "time": "Wed Feb 03 10:19:13 2016 -0500"
      },
      "message": "Android packet filtering program interpreter test \u0026 program generator\n\nChange-Id: I17951bd6320b9eb3b6c43f2ae37f62c2025705c1\n"
    },
    {
      "commit": "90b896533eb6a8867e7951bbbdbbacd9b520199c",
      "tree": "327ebaad690188e17abced1f640dcf8bf59d4a11",
      "parents": [
        "0ef8fcca4da4065d40c8f2c4251d1b247efb6913"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Jan 28 14:44:18 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 02 14:54:06 2016 -0800"
      },
      "message": "DO / PO Shouldn\u0027t be removed as active admin...\n\neven if they asked.\n\nAlso clear(Device|Profile)Owner should remove them as the active admin\ntoo.\n\nAlso add some more unit tests.\n\nBug 26858840\n\nChange-Id: I7b3ed92e1b4cbe803381ed6e3f64d8de17b2ebb0\n"
    },
    {
      "commit": "49caead1c2608f57ac6c260396c6bfd058b921ae",
      "tree": "4083541111331e1b4200f87c8925f368ddf474b3",
      "parents": [
        "4ee5d5d5cf219266ea1a5385e50222c65451ffc5"
      ],
      "author": {
        "name": "Rubin Xu",
        "email": "rubinxu@google.com",
        "time": "Tue Feb 02 18:00:28 2016 +0000"
      },
      "committer": {
        "name": "Rubin Xu",
        "email": "rubinxu@google.com",
        "time": "Tue Feb 02 18:00:28 2016 +0000"
      },
      "message": "Call SecurityLog methods via Injector\n\nThis is to make sure the unit test can mock them out.\n\nBug: 26911599\nChange-Id: I07a1a8b43ad5716a4b667bc5266b3b03997268c5\n"
    },
    {
      "commit": "3f3657a61b54d495bf2e692289eb92a48fe5a0b2",
      "tree": "486fc0eec30f9d66ffda178f957acd486cfeea5a",
      "parents": [
        "3641a80aa60dd07d9482743404c85c3ef8bcb6c8"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Jan 28 14:44:18 2016 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon Feb 01 15:21:49 2016 -0800"
      },
      "message": "Fix DPM unit tests\n\nBug 26911599\n\nChange-Id: I874c9cd4f63c79bc984777ef3b1b654a414c4911\n"
    },
    {
      "commit": "a491c07f36350cbb13b0a3070508553ba6c96608",
      "tree": "641e5a405ab609d927e9b61cb0fa6955a1519e1f",
      "parents": [
        "15d21b3aca1c3eeb3932752194e9f196b546387b",
        "8c834c07675052c984728cbf79f7c2e0d8246e43"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Mon Feb 01 15:32:58 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 01 15:32:58 2016 +0000"
      },
      "message": "Merge \"SyncManager on JobScheduler\""
    },
    {
      "commit": "8c834c07675052c984728cbf79f7c2e0d8246e43",
      "tree": "9a8aaa1a5e24bd13aa87d64d2ae0062c240f721e",
      "parents": [
        "bc0ce990435fe02a356b3e43272f692709f633ed"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Thu Jan 07 13:53:16 2016 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Fri Jan 29 22:15:15 2016 +0000"
      },
      "message": "SyncManager on JobScheduler\n\nSyncManager now uses JobScheduler for scheduling\nand persistence purposes.\n\nChange-Id: I38c92aedbf4d891ca297644d0b706835aaedfcd6\n"
    },
    {
      "commit": "7b9f2e1d86e5017dbf5530356ec30d090f703a67",
      "tree": "3e467266366fb39cabade957b54c2da4539d47ef",
      "parents": [
        "d4efab1173a55618e307f3cef078efa727270955",
        "940e8577a1569140521fb605336997863529f7ad"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Thu Jan 28 18:58:05 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 28 18:58:05 2016 +0000"
      },
      "message": "Merge \"Added SystemApi for getting serial numbers of users\""
    },
    {
      "commit": "940e8577a1569140521fb605336997863529f7ad",
      "tree": "03c861eb54ff3956f196df70161913428c00a382",
      "parents": [
        "9068fd387cd9a27f04dd08766109ecd033920826"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jan 26 12:03:51 2016 -0800"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Thu Jan 28 10:55:28 2016 -0800"
      },
      "message": "Added SystemApi for getting serial numbers of users\n\nAlso added UserHandle version of queryBroadcastReceiversAsUser.\n\nBug: 25844894\nChange-Id: I78ecbef186e4ced10425ae2899db72c2d91c5792\n"
    },
    {
      "commit": "e496c555b94086020b0ec155f6a87f6645c6cd93",
      "tree": "e41a10a50fe69f163ed9f5597f6b63460930565f",
      "parents": [
        "ec498e8ebedbfbb614808ca1cd4455886fa80af1",
        "bd0858ba679cced35bda55a643707ad69e4caa34"
      ],
      "author": {
        "name": "Etan Cohen",
        "email": "etancohen@google.com",
        "time": "Thu Jan 28 18:24:23 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 28 18:24:23 2016 +0000"
      },
      "message": "Merge \"Allow NetworkFactories to match any network specifier on a request\" into mm-wireless-dev\nam: bd0858ba67\n\n* commit \u0027bd0858ba679cced35bda55a643707ad69e4caa34\u0027:\n  Allow NetworkFactories to match any network specifier on a request\n"
    },
    {
      "commit": "92d456e9a62d7dadb3e21f481f7453bd82b1aa23",
      "tree": "8192b47f0075c8111d193b978e903cc7617008c5",
      "parents": [
        "554bc800565a0e83be859c8a3767b2cac153dbf2"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Mon Jan 25 16:36:59 2016 -0500"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Tue Jan 26 15:43:10 2016 -0500"
      },
      "message": "Show app level settings when an app doesn\u0027t use topics.\n\nChange-Id: I205062868ac3a44aa24a29bcb82a9374026287a7\n"
    },
    {
      "commit": "44a18081546345a0655748717862a89ae6dd7948",
      "tree": "d32fbe357c2212c15f361d37f15228bf9c0a86a0",
      "parents": [
        "65630250065f822ea92c4798a3113d50e3d82f8c",
        "afad8783699b1ba6f3c7ee5961d6ddc2bd771dc1"
      ],
      "author": {
        "name": "Alan Treadway",
        "email": "alantreadway@google.com",
        "time": "Tue Jan 26 09:59:40 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 26 09:59:40 2016 +0000"
      },
      "message": "Merge \"Add explicit and persistent user provisioning state.\""
    },
    {
      "commit": "6d009037271b487b45716c3a1f72037b89de6d75",
      "tree": "4fbb91755477ab859f2111798a632a3f9409f71b",
      "parents": [
        "ab83fd5739bf475c07e8e7ff140489cdcdcb73be"
      ],
      "author": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Mon Jan 25 18:56:38 2016 +0000"
      },
      "committer": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Tue Jan 26 09:49:51 2016 +0000"
      },
      "message": "Add SmallTest annotation to DevicePolicyManagerTest\n\nAdding this annotation makes sure that the tests get picked up by\ncontinuous integration tests.\n\nChange-Id: Ia9166898803dd0037f6bb20cb6a12333ed347fd3\n"
    },
    {
      "commit": "afad8783699b1ba6f3c7ee5961d6ddc2bd771dc1",
      "tree": "b003623b28ba92db60746872de361f203d5a7f0b",
      "parents": [
        "fe434a15d6bde9299b51dc284b336944e5cf8a1c"
      ],
      "author": {
        "name": "Alan Treadway",
        "email": "alantreadway@google.com",
        "time": "Tue Jan 19 15:15:08 2016 +0000"
      },
      "committer": {
        "name": "Alan Treadway",
        "email": "alantreadway@google.com",
        "time": "Mon Jan 25 15:46:30 2016 +0000"
      },
      "message": "Add explicit and persistent user provisioning state.\n\nAdd explicit modelling of provisioning state so that integration\nof management provisioning flows with packages such as setup-wizard\nare cleaner, and can be more direct. Previously we relied upon\nUSER_SETUP_COMPLETE secure setting and HOME intents to signal intent,\nbut this is not very clear and can be fragile.\n\nBug: 25858670\nChange-Id: Idc56a040f710c3aee281db420f21717da3960722\n"
    },
    {
      "commit": "fe434a15d6bde9299b51dc284b336944e5cf8a1c",
      "tree": "72c76a142e1a8b467d72e7bac22af995cf152fb8",
      "parents": [
        "313b825fe64aa67a44ab883b791520f2d396aaab",
        "623999185029a2c5baf29efe4ebdcbcdebcca294"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Jan 25 15:19:06 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jan 25 15:19:06 2016 +0000"
      },
      "message": "Merge \"Add additional APIs supported work on the parent DPM instance\""
    },
    {
      "commit": "4c052f237a108457fca3d3864c5654ebd4505111",
      "tree": "0edca7593322d68b25682f9048abfd1b3c9461b1",
      "parents": [
        "9ef46c26f1ef5230da0caf955a90474f3b7a14d9"
      ],
      "author": {
        "name": "Bartosz Fabianowski",
        "email": "bartfab@google.com",
        "time": "Mon Jan 25 14:18:43 2016 +0100"
      },
      "committer": {
        "name": "Bartosz Fabianowski",
        "email": "bartfab@google.com",
        "time": "Mon Jan 25 14:18:43 2016 +0100"
      },
      "message": "Implement user affiliation\n\nA user/profile is considered affiliated if it is managed by the same\nentity as the device. This is determined by having the device owner and\nprofile owners specify a set of opaque affiliation ids each. If the sets\nintersect, they must have come from the same source, which means that the\ndevice owner and profile owner are controlled by the same entity.\n\nBUG\u003d25599229\n\nChange-Id: I393fe0de70272307ed3c811aaba4b48a5109c562\n"
    },
    {
      "commit": "623999185029a2c5baf29efe4ebdcbcdebcca294",
      "tree": "d0b869dd0096ca2605d74e9184e7980c72c7945b",
      "parents": [
        "9ef46c26f1ef5230da0caf955a90474f3b7a14d9"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Jan 11 15:37:55 2016 +0000"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Mon Jan 25 12:57:12 2016 +0000"
      },
      "message": "Add additional APIs supported work on the parent DPM instance\n\nBug: 22543972\nChange-Id: I05061e34d120c64d5c49ca6b7b4014d7dadb68f4\n"
    },
    {
      "commit": "c48e3b602ead581b06669f59aad786bdc05eb6b0",
      "tree": "64a393b210a61d30c9c6e80f642356d0a3a6efe4",
      "parents": [
        "2f14ced3fc16957357e9ad2440927f68f57ecb68",
        "a6a78076eeb27084ed815ce0492d4ffe08134bec"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Wed Jan 20 01:43:02 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 20 01:43:02 2016 +0000"
      },
      "message": "Merge \"Implement roaming tracking in NetworkStats summary queries.\""
    },
    {
      "commit": "a6a78076eeb27084ed815ce0492d4ffe08134bec",
      "tree": "7f07d26355876009254e771fa61e9d63ca4e6b46",
      "parents": [
        "f2c9628cac0240b9a39b8eadddf4c0528cd45c2d"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Mon Jan 11 16:02:17 2016 -0800"
      },
      "committer": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Tue Jan 19 16:57:51 2016 -0800"
      },
      "message": "Implement roaming tracking in NetworkStats summary queries.\n\nWhether a network is deemed roaming or not was already being tracked\nas part of the NetworkIdentitySet, so the underlying data store\nalready tracks roaming and native data separately. However, this data\nwas being aggregated together in NetworkStatsCollection#getSummary,\nsince the NetworkIdentitySet is converted to an iface name for the\npurposes of matching, and the iface name will be identical whether or\nnot the iface is considered roaming. Now it is separated.\n\nAlso fixes a long-standing bug in NetworkIdentitySet where an identity\nread from a saved file would always be considered roaming \u003d\u003d false,\neven if it wasn\u0027t at the time it was written.\n\nBug: 25813438\nChange-Id: I11ab5b51182ed8da7af8fde468df065f9fdc3dad\n"
    },
    {
      "commit": "3ee3b9d17b2aec84e791f3efa6b9453cab0d9c9b",
      "tree": "86672439a094f26922075f40619d0f02380710d8",
      "parents": [
        "12747879b0204b9dfee997eddc981d09289e8b77",
        "09a88f5f3e7d4a3bbfce04ac06594ac590c67d27"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Sat Jan 16 02:00:00 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Jan 16 02:00:00 2016 +0000"
      },
      "message": "Merge \"Keeping only running users recents in memory\""
    },
    {
      "commit": "09a88f5f3e7d4a3bbfce04ac06594ac590c67d27",
      "tree": "2f7d4a849e55b24e230e8927a9f8ce5069b8bbe9",
      "parents": [
        "477e26cf931290f6b3353fab43a05406eea223f9"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Wed Dec 02 14:36:31 2015 -0800"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Fri Jan 15 17:45:35 2016 -0800"
      },
      "message": "Keeping only running users recents in memory\n\nCurrently, all the users\u0027 recent tasks are loaded into memory and kept\nin sync with the persistent storage. This changes the system so\nthat it loads a users recents into memory lazily (i.e. when\ngetRecentTasks is called for that user) and unloads them from the\nmemory as soon as the user is stopped. This also required bucketizing\nthe taskIds per user, so that the next available taskId can be assigned\nwithout having knowledge of all the tasks that are stored away in\npersistent storage but are not available in memory.\nBug-Id: b/24569398\n\nChange-Id: Ia5cb64d9f4ee727225dce34e45ca63e946ac27a8\n"
    },
    {
      "commit": "17971e383f97db0d398b86ae537448605f70894e",
      "tree": "c81bcc78fd12a104d684b283f694c04d3b9088ad",
      "parents": [
        "8414c671bd6c490bbbfbe51d7b2f8f32a6fb58e4",
        "5db09084c8e4efc6311754243c39962fc8e7a766"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Fri Jan 15 13:54:08 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 15 13:54:08 2016 +0000"
      },
      "message": "Merge \"Added priority to JobScheduler scheduling\""
    },
    {
      "commit": "5db09084c8e4efc6311754243c39962fc8e7a766",
      "tree": "64c8f0a1c52d132c3a24dbbaa10f0c243080a5b5",
      "parents": [
        "198ce1a5e6fbe2cb84263e427032e9715e27379f"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Thu Jan 07 13:38:29 2016 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Thu Jan 14 19:09:03 2016 +0000"
      },
      "message": "Added priority to JobScheduler scheduling\n\nPriority can be assigned to jobs. Higher priority\njobs can preempt lower priority ones. Reason for\ncalling onStopJob (timeout, preempt, etc.) is set\non the JobParameters object.\n\nReference:\nhttps://docs.google.com/document/d/1fuVO5rBCkODx8wjk6uulFCP1Uzfx7IVsw2EyKKrGqVA\n\nChange-Id: Ic36016514cec076984d44086316d8d00d896b3aa\n"
    },
    {
      "commit": "b6bb986889cebd19a22f89c0631f03d0ab711a77",
      "tree": "30bcb52bf4742e84640bf993c7c3b8d8742ad40f",
      "parents": [
        "0c57596905977e7243a9e4bae9dbf7a18742ec54",
        "b7c2487c8b5fbd154643b8ddade8d88507cae137"
      ],
      "author": {
        "name": "Udam Saini",
        "email": "udam@google.com",
        "time": "Tue Jan 12 18:40:45 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 12 18:40:45 2016 +0000"
      },
      "message": "Merge \"Makes captive portal server calculation in one place.\""
    },
    {
      "commit": "4175be2f4e1e27490f38c387525d0c0cba88b47b",
      "tree": "e6fa152fab6bc0a4314d1489c97cbda7bf006239",
      "parents": [
        "5aa86938b8b50a20830bc3d608321fc4c0afb0e8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jan 09 14:57:45 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jan 09 14:57:47 2016 -0700"
      },
      "message": "Triage SearchManagerService for missing apps.\n\nSearchables aren\u0027t available until after the user is unlocked.  We\ncould scan for them while locked, but we\u0027re aiming for a minimalist\nenvironment, and scanning them while locked would require us to send\na changed broadcast on every boot.\n\nSwitch to using new SystemService lifecycle for faster event\ndelivery.  Restore broken global search observer.  Verified that\napps on external storage are handled correctly.\n\nBug: 26471205\nChange-Id: Id99ffe2ea6db37a394454cc7dfa4eab10280ff35\n"
    },
    {
      "commit": "b7c2487c8b5fbd154643b8ddade8d88507cae137",
      "tree": "597a8160f63ab4133d60d13386ef28e478c22913",
      "parents": [
        "5a5d6aeec0ee6b3f9ffea55a4f015edc84828b1e"
      ],
      "author": {
        "name": "Udam Saini",
        "email": "udam@google.com",
        "time": "Mon Jan 04 12:16:14 2016 -0800"
      },
      "committer": {
        "name": "Udam Saini",
        "email": "udam@google.com",
        "time": "Fri Jan 08 14:38:31 2016 -0800"
      },
      "message": "Makes captive portal server calculation in one place.\n\nThis also creates a hidden api for the captive portal server calculation\nso that the Setup Wizard can use this as well.\n\nbug:13246857\nChange-Id: I4dfd0916df97cfce13252c7cc15f7bd05ed95f77\n"
    },
    {
      "commit": "51f3908c6a788f82d8188762c0680594a54b17ae",
      "tree": "51dea2fd1c7c8ec934b77a1007754e75ef4d8481",
      "parents": [
        "bc98c55db4187021862d8fdeb332cbcd25e4749b",
        "e06b4d1d9f718b9fe02980fea794a36831a16db2"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Wed Jan 06 22:26:16 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 06 22:26:16 2016 +0000"
      },
      "message": "Merge \"Consistent naming for PackageManager methods.\""
    },
    {
      "commit": "e06b4d1d9f718b9fe02980fea794a36831a16db2",
      "tree": "cfef7d72c17fc71b008f0c9a8f08d49553a30e16",
      "parents": [
        "2a90f673f5819e05ea72f6aba3e75956e0f807dc"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 14:51:50 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 15:21:06 2016 -0700"
      },
      "message": "Consistent naming for PackageManager methods.\n\nWhen hidden PackageManager methods take a userId argument, they\nshould be named explicitly with the \"AsUser\" suffix.  This fixes\nseveral lagging examples so that we can pave the way to safely\nstart passing flags to new methods without scary overloading.\n\nAlso fix spacing issues in various logging statements.\n\nChange-Id: I1e42f7f66427410275df713bea04f6e0445fba28\n"
    },
    {
      "commit": "028d6906d5671bcc8239ead2496f9eb10e4a142b",
      "tree": "be799c8216f561bfb44e96409293dc20eebb12ed",
      "parents": [
        "feffc39adaa88d4da85c3373939e84173180f469",
        "06de4e77c20be239384262b1508f0cf53bedb145"
      ],
      "author": {
        "name": "Kenny Guy",
        "email": "kennyguy@google.com",
        "time": "Wed Jan 06 16:27:18 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 06 16:27:18 2016 +0000"
      },
      "message": "Merge \"Add support message for device admins\""
    },
    {
      "commit": "06de4e77c20be239384262b1508f0cf53bedb145",
      "tree": "c8a6bcae32d26c001e80466c5fed6d4ffff3ec54",
      "parents": [
        "c33f357b50f24cf1d2a05e594f4d4bd16a6c2f0c"
      ],
      "author": {
        "name": "Kenny Guy",
        "email": "kennyguy@google.com",
        "time": "Tue Dec 22 12:07:39 2015 +0000"
      },
      "committer": {
        "name": "Kenny Guy",
        "email": "kennyguy@google.com",
        "time": "Tue Jan 05 19:07:04 2016 +0000"
      },
      "message": "Add support message for device admins\n\nAllow admins to set a long and short support\nmessage for settings to display.\n\nBug: 25659579\nChange-Id: Ib645490785642e49c69d8dbc65455eb3398547ee\n"
    },
    {
      "commit": "51017d0e23ce9855fabcf786a2067ceb19121fbc",
      "tree": "48d2c9e0f88cb34a55bb40aa6e8c807148388a08",
      "parents": [
        "4a5b54fb3b02db53c1f46aafe07a318bdc5d7e3c"
      ],
      "author": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Tue Dec 15 15:34:46 2015 -0500"
      },
      "committer": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Mon Jan 04 11:22:37 2016 -0500"
      },
      "message": "implement assistant service connection\n\nAdded a guest-mode to ManagedServices.\nLike system services, the lifecycle of a guest is not managed.\nUnlike system services, guests are not considered privledged.\n\nThe Assistant gets all the usual listener events.\nImplemented adjustImportance.\nFuture work: enqueued, clicked, visibility, removed, annotations\n\nBug: 22455414\nChange-Id: Ic41c0bf625b5e98cb577b49098bba23a539bb507\n"
    },
    {
      "commit": "f8373b5afc6dd25350bbca7093178807f1cc9ed6",
      "tree": "b956ebb9ad5081af06456e1dfd745fb2346523a2",
      "parents": [
        "44b8102d7137b30d3aa6c297cea849ae73e1e10b"
      ],
      "author": {
        "name": "Mahaver Chopra",
        "email": "mahaver@google.com",
        "time": "Wed Dec 23 14:42:18 2015 +0000"
      },
      "committer": {
        "name": "Mahaver Chopra",
        "email": "mahaver@google.com",
        "time": "Tue Dec 29 15:39:02 2015 +0000"
      },
      "message": "DPM Test: DA and PO cannot call DPM.reboot()\n\nBug: 25304994\nChange-Id: Ifaccf3625314f4bfcd7f99413abc9067cc3dd2f9\n"
    },
    {
      "commit": "bf60f728cc7ed326fb8978afd9f589a685bb87b7",
      "tree": "5a15ee1171b17e7e7dae97a48f91a2e715d0d926",
      "parents": [
        "12a47ac41ed7d9968d6ceae50402a41f8a8ba79c"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Dec 10 16:26:44 2015 +0000"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Thu Dec 17 10:57:09 2015 +0000"
      },
      "message": "Device or profile owner can let another app manage app restrictions\n\nThe device or profile owner can allow another\npackage to set app restrictions for any app in that user\n\nSimilar to the way it can give permission to access\nCA certificate related APIs from M.\n\nBug: 22541936\nChange-Id: I0c1b0804ad300dfa4fbdc1c7721c5d8653d77861\n"
    },
    {
      "commit": "40e2ce37d3ddd9b2c33ba3b68e6c28c67e1edea0",
      "tree": "0045c22f1d4ee7b6a3177d6146023195187f78c9",
      "parents": [
        "f99104dadddb8d7587aaa607821d284e214eb997",
        "1efb1335814aea8ee0696144ca0ab24159b86e54"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Tue Dec 15 19:04:25 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 15 19:04:25 2015 +0000"
      },
      "message": "Merge \"Relax permissions around NetworkStatsManager APIs.\""
    },
    {
      "commit": "c14fb58da8ca3eb984f0f88fd45979bfa72cf8fc",
      "tree": "3bb50d9f5f5dad28ee8587586d1bd8f532e2b62a",
      "parents": [
        "4c1b495f4f9b05e34a2583eb4537cebdda981d4f",
        "b7e3fd80e52cd7a3607f36044d6c3b94bb985b27"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Tue Dec 15 17:48:46 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 15 17:48:46 2015 +0000"
      },
      "message": "Merge \"Fix bit-rotted NetworkStatsServiceTest.\""
    },
    {
      "commit": "ddb9ef0357e3ee609e188fb9e1e461f95aa601fa",
      "tree": "c633b8d293316ff15696af60f8b5328635b85bbc",
      "parents": [
        "9be302b47c81fb1d575b5019598984ed5d0cb24e"
      ],
      "author": {
        "name": "Etan Cohen",
        "email": "etancohen@google.com",
        "time": "Wed Nov 18 10:56:15 2015 -0800"
      },
      "committer": {
        "name": "Etan Cohen",
        "email": "etancohen@google.com",
        "time": "Tue Dec 15 08:06:54 2015 -0800"
      },
      "message": "Allow NetworkFactories to match any network specifier on a request\n\nCurrent usage of NetworkSpecifier: network factory will match a request\nif the request has either a (1) empty network specifier, or (2) a\nnetwork specifier which is identical to that of the network factory.\nNote: \u0027matching\u0027 w.r.t. network specifier - all other matching rules\nare still in effect.\n\nChange: add rule (3) or the network specifier of the network factory\nis the special string (which is defined as \"*\" and which user-facing\nnetwork requests aren\u0027t allowed to use).\n\nRationale: allows on-demand network creation.\n\nExample:\n- Can specify a Wi-Fi NetworkRequest with NetworkSpecifier\u003d\"ssid\"\n- It will match a Wi-Fi network factory specifying NetworkSpecifier\u003d\"*\"\n- That network factory will bring up a Wi-Fi network, connecting to the\n  specified SSID.\n- Once the network is created it will create a NetworkAgent which will\n  now have a NetworkSpecifier matching that of the request (not the\n  match-all special string!)\n\nThat final step of making sure that the NetworkAgent matches the request\nand not the match-all is critical to delivering any subsequent callbacks\ncorrectly. I.e. your network will only get callbacks which match it.\n\nBug: 26192833\nChange-Id: I49e3b492e0bb48a3f6e9a34e3f94f0e1cf89741f\n"
    },
    {
      "commit": "1efb1335814aea8ee0696144ca0ab24159b86e54",
      "tree": "84bddd461afacd7e0011c6b344b04253a037a1de",
      "parents": [
        "b7e3fd80e52cd7a3607f36044d6c3b94bb985b27"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Wed Dec 09 18:04:50 2015 -0800"
      },
      "committer": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Mon Dec 14 17:16:37 2015 -0800"
      },
      "message": "Relax permissions around NetworkStatsManager APIs.\n\nCurrently, access to network usage history and statistics requires a\nsignature|privileged permission, an AppOps bit (associated with the\nPACKAGE_USAGE_STATS permission), or device/profile ownership. Once\naccess is granted via one of these mechanisms, it generally applies to\nany UID running in the same user as the caller.\n\nThis CL expands access as follows:\n\n-Any app can access its own usage history with no extra requirements.\n-Carrier-privileged applications can access usage history for the\nentire device.\n-Device owners can access per-UID breakdowns for usage. Previously\nthey could access the summary for the whole device, but not the\nindividual breakdowns.\n\nWe simplify the permission model by defining three access levels -\nDEFAULT (own app only), USER (all apps in the same user), and DEVICE\n(all apps on the device), and propagate these levels throughout.\n\nFinally, this CL fixes an apparent bug in\nNetworkStatsSerice#hasAppOpsPermissions - if the AppOp bit was in\nMODE_DEFAULT, hasAppOpsPermission would always return false instead of\nfalling back to the PackageManager permission check.\n\nBug: 25812859\nBug: 25813856\nChange-Id: Ic96e0776e2a4215a400163872acea1ededfaced9\n"
    },
    {
      "commit": "b7e3fd80e52cd7a3607f36044d6c3b94bb985b27",
      "tree": "c85f1848da7d80995617dc827e69b41de6dee320",
      "parents": [
        "709bf2a37c26944846375f6f59fbc815428bdeec"
      ],
      "author": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Mon Dec 14 13:02:54 2015 -0800"
      },
      "committer": {
        "name": "Jeff Davidson",
        "email": "jpd@google.com",
        "time": "Mon Dec 14 13:05:30 2015 -0800"
      },
      "message": "Fix bit-rotted NetworkStatsServiceTest.\n\nBreakages:\n\n-ag/574873 - Renders testReportXtOverDev obsolete as this is no longer\n             a supported mode. Test has been removed.\n-ag/600223 - Tests were sending a CONNECTIVITY_ACTION bcast to trigger\n             a call to updateIfaces(), but the listener was removed.\n             Tests now call forceUpdateIfaces() directly.\n-ag/648284 - Calls to get VPN info were not mocked.\n\nChange-Id: I309f2b5d006549104cb1d3cb83e99363dd6dac16\n"
    },
    {
      "commit": "72be84fd8c2e3b6760e95a118d50e203c16ec379",
      "tree": "7b42865dbe4bf7aea6f5ff426c148b88e7a9f63a",
      "parents": [
        "fca2a63f8b8492559809434a5c250962042b0c4a",
        "bdf3376616c276ed18a51185351b44fd16eeae29"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Dec 11 21:21:50 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 11 21:21:50 2015 +0000"
      },
      "message": "Merge \"use importance instead of score\""
    },
    {
      "commit": "bdf3376616c276ed18a51185351b44fd16eeae29",
      "tree": "f31490bfc05ed7ab001a26caca1ad131a4979913",
      "parents": [
        "5f986095bed776c119d2f5452e0afeac3a437ea2"
      ],
      "author": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Fri Dec 04 15:50:51 2015 -0500"
      },
      "committer": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Fri Dec 11 16:09:18 2015 -0500"
      },
      "message": "use importance instead of score\n\nChange-Id: Id3b0a074671943b4fcabb63fe990cbfd1e46bdfd\n"
    },
    {
      "commit": "055d8396ef6b99f9dcd639e98cce6029fca1c145",
      "tree": "15b5d1bc9b3bbcfe84115ee4f7115b6d4de186a8",
      "parents": [
        "714391771f735daf5186a3f830e57634d8e988e5",
        "5485ed46ff337769589c6e06b3469246e60b9e3b"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Dec 11 18:14:19 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 11 18:14:19 2015 +0000"
      },
      "message": "Merge \"Allow PO to set DO restrictions if it\u0027s on user 0\""
    },
    {
      "commit": "4aa47e58c4f8d654981a9d6a7362c8bb8b2a7e30",
      "tree": "6a79d172b6d22dbf3c897eec2a4bc69609df6bdf",
      "parents": [
        "13a6158d6e516b9ea4ecf159a131332bcee42c86"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Oct 01 10:24:31 2015 -0700"
      },
      "committer": {
        "name": "Randy Pan",
        "email": "zpan@google.com",
        "time": "Thu Dec 10 16:06:50 2015 -0800"
      },
      "message": "DO NOT MERGE Introduce direct listener API for alarm delivery\n\nThe Alarm Manager now supports a set() variant that takes a listener\ncallback to invoke at alarm trigger time rather than a PendingIntent.\nThis is much lower overhead and has guaranteed low delivery latency\nfrom the trigger time.  The tradeoff is that the app must be running\n*continuously* from the time the alarm is set to the time it is\ndelivered.  If the app exits for any reason before the alarm fires,\nthe listener becomes invalid and the alarm will be dropped.  This is\nmore or less equivalent to setting an alarm with a broadcast\nPendingIntent that matches only a runtime-registered receiver.\n\nThe app\u0027s alarm listener can be any object that implements the new\nAlarmManager.OnAlarmListener interface and implements its onAlarm()\nmethod.  There is no data delivered at alarm trigger time: whatever\nstate needs to be associated with the specific alarm instance should\nsimply be packaged inside the OnAlarmListener instance.\n\nAn alarm using OnAlarmListener can request that the onAlarm() method\nbe called on an arbitrary handler.  If the program passes \u0027null\u0027 for\nthis parameter when setting the alarm, the callback occurs on the\napplication\u0027s main Looper thread.\n\nCherry-picked from 14a7bb0d370fffdf902a4e2345f46754ed2d7684\nBug 20157436\n\nChange-Id: I2eb030a24efdd466a2eee1666c5231201b43684b\n"
    },
    {
      "commit": "7cb501310e36534c56997a760cd7206542669ee1",
      "tree": "2ef7dd795dbbbea5405e0e279624526c35e0c928",
      "parents": [
        "167fb24d122a89c0a1be2dd72cee2a02d7e31e1a"
      ],
      "author": {
        "name": "Erik Kline",
        "email": "ek@google.com",
        "time": "Mon Aug 10 13:28:50 2015 +0900"
      },
      "committer": {
        "name": "Randy Pan",
        "email": "zpan@google.com",
        "time": "Thu Dec 10 16:06:50 2015 -0800"
      },
      "message": "DO NOT MERGE Refactor netlink and IpReachabilityMonitor into services/net\n\n    - netlink from core to services/net/netlink\n    - IpReachabilityMonitor from core to services/net/ip\n\nCherry-picked from 02cc5a030a6f132e776b754dd5684ae632009f76\nChange-Id: I45ac3f591bade45dd5ec441111b02b621234c0e4\n"
    },
    {
      "commit": "5485ed46ff337769589c6e06b3469246e60b9e3b",
      "tree": "e4a82f3e249abfc107469496935fd7b7c3875332",
      "parents": [
        "2ce4f73bf72d26310c2de0f9a1bd40db2872b5d6"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Dec 09 11:38:23 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Dec 10 15:54:26 2015 -0800"
      },
      "message": "Allow PO to set DO restrictions if it\u0027s on user 0\n\nBug 26091525\n\nChange-Id: Ie6d2cd4ade076d8d2ec47243ff1280b95b7c9044\n"
    },
    {
      "commit": "e0e413e2b17a0164e15c77f4ab51b3166f9111d2",
      "tree": "74aa91f46362c7cb351aa6f505f7c8eab790bdf5",
      "parents": [
        "27cf982641e5e84669565634bbb45940f6b1209a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Dec 09 17:22:26 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 10 12:12:00 2015 -0800"
      },
      "message": "Add new target SDK filtering feature to BroadcastOptions.\n\nYou can now control the range of target SDKs that receivers\nwill be need to have in order to receive your broadcast.\n\nUse this for CONNECTIVITY_ACTION to not allow N+ applications\nto receive these broadcasts through their manifest.\n\nAlso tweak the broadcast debug output code to now include the\ndisposition of each receiver in the list.  This is becoming\nimportant as skipping receivers is becoming a more common\nthing to have happen.\n\nChange-Id: I251daf68575c07cbb447536286ab4e68b7015148\n"
    },
    {
      "commit": "b3b9258ab6a01af5e0df4b8385b73084cd9ec530",
      "tree": "dcfc121fd3217c897106f86cab7a79dd02845628",
      "parents": [
        "43aecc85e85c46f457764eea22cca42b7ee912d1"
      ],
      "author": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Mon Dec 07 11:22:13 2015 -0800"
      },
      "committer": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Mon Dec 07 11:32:50 2015 -0800"
      },
      "message": "UserManager: get/set user account name\n\nBug: 25935510\nChange-Id: I0b621fb300be74209534e08a11f1d1a7c049cd5a\n"
    },
    {
      "commit": "c0309868832b8aee6e52b14e1c0d47b67553194a",
      "tree": "5acb97afe236aa0e3ae1d0d0314c59e4f6f96657",
      "parents": [
        "21217af63b0a3d5d7e2bf4eb68b23db45cb009c1",
        "5d25ee7a006fda7150ba251cff92c27130611f88"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Dec 04 20:37:28 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 04 20:37:28 2015 +0000"
      },
      "message": "Merge \"Topics can now have an Importance.\""
    },
    {
      "commit": "5d25ee7a006fda7150ba251cff92c27130611f88",
      "tree": "323050e797f6f787f5700f6f86bd3de5a881ac16",
      "parents": [
        "0a07982778505d2283ff455684a5acb10767eb7d"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Nov 20 15:38:20 2015 -0500"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Fri Dec 04 15:20:34 2015 -0500"
      },
      "message": "Topics can now have an Importance.\n\nBug: 22451710\nChange-Id: I627121da6c4b85492715a8e8a099656dca52b734\n"
    },
    {
      "commit": "9d8a1048bb666c68402dce031bebfa07c92a42db",
      "tree": "55ec622f8df2e96ddc1eb5332316b87e0fba1e07",
      "parents": [
        "d19c5c14038a2b7b2b152900db5a81ee0f2f8517"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Dec 03 17:56:20 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Dec 04 09:36:39 2015 -0700"
      },
      "message": "Handle non-encryption-aware accounts and sync.\n\nThe system can now boot in a \"locked\" state where only encryption\naware (EA) components can be safely started.  When in this state,\nPackageManager already filters away non-EA components, but system\nservices like AccountManager and SyncManager need to carefully handle\nthese temporarily \"missing\" components.\n\nAs a guiding principle, all known Accounts are still present when\nthe device is locked, but communication with underlying non-EA\nauthenticators is blocked.\n\nTo keep things simple for now, all SyncManager requests are kept\ndormant until the user enters the unlocked state.\n\nThe core of this logic is that RegisteredServicesCache now works\nwith all components regardless of EA status, which prevents us from\naccidentally thinking a service was removed when the user is locked.\n\nBug: 25945136\nChange-Id: I8714121f6236b00821769023c4df7de1c8a99944\n"
    },
    {
      "commit": "7ef490fab68ee93f92eb5728cc4d3cb691315412",
      "tree": "f64cd99d430d5d53f81fc73934282aaf701d477f",
      "parents": [
        "b3958d766bb7748fd034be8ddf7b2e4fab42742b"
      ],
      "author": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Thu Dec 03 16:45:22 2015 +0000"
      },
      "committer": {
        "name": "Shreyas Basarge",
        "email": "snb@google.com",
        "time": "Fri Dec 04 14:40:28 2015 +0000"
      },
      "message": "Fix for non persisted jobs being persisted\n\nBug: 25905179\nChange-Id: I5e836f9894089aa8acc1bde382674e29402f0a60\n"
    },
    {
      "commit": "9cbfc9e212151e84910a22387365644916dde446",
      "tree": "6547aa07a379650aeb737548cc1f94e4c68a5fde",
      "parents": [
        "6449a9567ac204e0c9be71a7f983a753d8061220"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Wed Oct 07 15:52:33 2015 -0700"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Wed Dec 02 10:22:23 2015 -0800"
      },
      "message": "Added DISALLOW_RUN_IN_BACKGROUND user restriction\n\nIt forces the user to stop instead of going into the background. Also\nchanged behavior of stopUser method. Now it also attempts to stop related\nusers along with the specified userId.\n\nBased on ag/807976, with the only difference that it\u0027s now a user restriction.\n\nBug: 24579258\nBug: 24708668\nChange-Id: I357298908816fc58feeed83b7e9979fc33d25da6\n"
    },
    {
      "commit": "2c1a253f2297bf9682105924aee828a0c5897027",
      "tree": "7ae29f09181ec30d1f0ed94ca377bed0ee4fb41d",
      "parents": [
        "3c9b73384383713a5524b1c460244d46b7351c9e"
      ],
      "author": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Fri Nov 27 10:52:10 2015 +0900"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Fri Nov 27 11:46:18 2015 +0900"
      },
      "message": "Fix one of the breakages of ConnectivityServiceTest in master.\n\nChange-Id: I31c7a019383fa589beb1572486700e54edfb97e8\n"
    },
    {
      "commit": "e7927da1b6dc4f96714aa9bc4fbb71b3659f8cea",
      "tree": "7fe61745a25b01bcfaf7da76129284310bef74cc",
      "parents": [
        "21942b2240858de639ed0f727ac03f83fa8ab761"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Nov 25 10:05:17 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Nov 25 11:17:08 2015 -0800"
      },
      "message": "Don\u0027t call DPM from UserManager to avoid lock inversion\n\n- Also make sure DPMS.mOwners is always guarded with DPMS.this.\n(and remove synchronization from Owners.)\n\nBug 25796840\n\nChange-Id: I83f7b78e7b437d9c2a2b1d6e714346cd15f95330\n"
    },
    {
      "commit": "3ab6f2e219c167fd35f16b6cf233ae6a39d9de02",
      "tree": "a37b591f2628543232434d2522cd1d83702fdb1e",
      "parents": [
        "774d86693541f94caf23b3b653281eddb32a4da4"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Nov 05 13:55:37 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Nov 24 16:14:21 2015 -0800"
      },
      "message": "DA receiver should be protected with BIND_DEVICE_ADMIN.\n\n- DPM.setActiveAdmin() will not accept DAs without BIND_DEVICE_ADMIN\nwhen it\u0027s targeting NYC or above.\n\n- DAs without BIND_DEVICE_ADMIN targeting MNC or below will still be\naccepted. (with a logcat warning)\n\n- DAs that are already set on a device without BIND_DEVICE_ADMIN\nwill still be accepted regardless of the target API level, even when\nit\u0027s upgraded to a version targeting NYC.\n\nBug 24168653\n\nChange-Id: I1914c2ec99135d9dd8cbac3f6914f9e43bafacc8\n"
    },
    {
      "commit": "a31ebbc439364a4993e79fd385cf6373408a42fe",
      "tree": "21bd9be8948b7300ba130ae4489ad6355b090d09",
      "parents": [
        "d79a245ac284921c832336db62b932e70a11c3f9"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon Nov 23 17:15:21 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Nov 24 15:38:16 2015 -0800"
      },
      "message": "Add DO API to get wifi mac address\n\nBug 25496044\n\nChange-Id: Ib1f0ce4ca10951edcfaa0aa79ae5c2d142a74599\n"
    },
    {
      "commit": "c8a5a555f1482d0f45b538eb898d6ee7e26552a6",
      "tree": "19679cb6e5025a663daf4d95e483b6649ec1666d",
      "parents": [
        "abef6d6f2b3224960be4cb5625e862498f4b7edf"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Nov 19 14:29:12 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Nov 24 14:54:48 2015 -0800"
      },
      "message": "DPM.isDeviceOwnerApp() and getDeviceOwner() now check calling user\n\n- Previously on MNC, they would return the same result regardless who\nthe calling user is.\n\n- Now they properly take DO user-id into account.  Meaning, they\u0027ll\nalways return false and null respectively, if the calling user doesn\u0027t\nrun device owner.\n\n- Note isDeviceOwnerApp() is a public API and getDeviceOwner() is\na system API.  Meaning we\u0027re changing the behavior or non-private\nAPIs.\n\n- Also cleaned up hidden APIs, and gave them explicit suffixes\nto avoid confusion.  Bundled code should prefer them for clarity.\n\nNow we have:\n\n* APIs that work cross-users: They all require MANAGE_USERS.\nboolean isDeviceOwnerAppOnAnyUser(String packageName)\nComponentName getDeviceOwnerComponentOnAnyUser()\n\nint getDeviceOwnerUserId()\nboolean isDeviceOwnedByDeviceOwner()\n\nString getDeviceOwnerNameOnAnyUser()\n\n* APIs that work within user.  No permissions are required.\n\nboolean isDeviceOwnerAppOnCallingUser(String packageName)\nComponentName getDeviceOwnerComponentOnCallingUser()\n\nBug 24676413\n\nChange-Id: I751a907c7aaf7b019335d67065d183236effaa80\n"
    },
    {
      "commit": "42490c074dc8ff568d0459ed0f9247d55ad95c2f",
      "tree": "acad8f77a8beb7121d7ddd7fd0770f676ff60453",
      "parents": [
        "27777dcb5ae9fb53395bf76ca8725fdbad296ef3",
        "ac65e1e1dba1cf0ea237a389220ec818ade07a16"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon Nov 23 18:42:55 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 23 18:42:55 2015 +0000"
      },
      "message": "Merge \"Remove UserManager.setSystemControlledUserRestriction()\""
    },
    {
      "commit": "ac65e1e1dba1cf0ea237a389220ec818ade07a16",
      "tree": "de2ef3dc219fa92f56b9ea492c20713b3e325d6c",
      "parents": [
        "be2b8626fa4ab3cfcf18d0d980ca70eddbf19eb7"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri Nov 20 15:33:17 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon Nov 23 10:41:42 2015 -0800"
      },
      "message": "Remove UserManager.setSystemControlledUserRestriction()\n\nNow that we don\u0027t have UM.setUserRestriction*s*() that could remove\nall existing restrictions, there\u0027s almost no point handling\nDISALLOW_RECORD_AUDIO differently.\n\nNow DISALLOW_RECORD_AUDIO is handled just like other restrictions,\nexcept we don\u0027t persist it.\n\nBug 24954662\n\nChange-Id: I27875b4a74dd95a3ce6bb774081eeaf718eaec15\n"
    },
    {
      "commit": "b85c7d5bc0471b39417de206e4366674d2f21290",
      "tree": "28b89233dfb6fc6903c5380716e97d2e0470fc8c",
      "parents": [
        "be2b8626fa4ab3cfcf18d0d980ca70eddbf19eb7",
        "6c7acb6ec7494235dd80d972fb3db0f7b48fb4fc"
      ],
      "author": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Sun Nov 22 16:34:09 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Nov 22 16:34:09 2015 +0000"
      },
      "message": "Merge \"Add a test that checks the contents of DISCOVER packets.\""
    },
    {
      "commit": "09b108e2bb6b585947249eda92c047d0b582e8a0",
      "tree": "494875761bc181a9325872235a0f67860da6654f",
      "parents": [
        "930240e848893551b55e98c796d02265c12a11ac",
        "cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17ccc"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Fri Nov 20 23:18:29 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 20 23:18:29 2015 +0000"
      },
      "message": "Merge \"Added keep-uninstalled-packages DO policy\""
    },
    {
      "commit": "cb6fd80721253ffa9dcab5cf8c2f4e9b9cd17ccc",
      "tree": "4c4abc39a3032b45b835ffdba437848d5a1e81bf",
      "parents": [
        "12262af418f139e189b09b5b1e8a775d41d42e8e"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Thu Nov 05 14:27:06 2015 -0800"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Fri Nov 20 14:51:56 2015 -0800"
      },
      "message": "Added keep-uninstalled-packages DO policy\n\nThis policy allows DO to specify a list of apps to cache even without being\ninstalled on any user.\n\nBug: 23938464\nChange-Id: I2eeab7f148409739fc23a5c44e955ad12b63fd04\n"
    },
    {
      "commit": "3f72604be806c0173b5dca0225cadf6e7c872147",
      "tree": "c9016390abeaab44a3655aee9e5e4fd67dc8419d",
      "parents": [
        "1f740d72add940fada8d39a4e2e65321ae8ee6aa"
      ],
      "author": {
        "name": "Przemyslaw Szczepaniak",
        "email": "pszczepaniak@google.com",
        "time": "Thu Oct 15 11:04:19 2015 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Nov 20 14:11:02 2015 +0000"
      },
      "message": "Use HexDump instead of java.lang.IntegralToString\n\njava.lang.IntegralToString is being removed, replaced\nall its usage by com.android.internal.util.HexDump.\n\nBug: 24932279\n(cherry-picked from 15fc0548a536750110e159e06a39ba943eccdd81)\n\nChange-Id: Id6ab88337af12d93cd73c41775b9d5baa1e61d96\n"
    },
    {
      "commit": "1a2cd74526113b45d9108b6997609122c4311fb1",
      "tree": "49b6c787e7681351458491dc8abfa237c2124e88",
      "parents": [
        "9920e0f1cc6e527c719fb7bfa70ae9e75ea4565c"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon Nov 16 13:51:27 2015 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Nov 19 13:37:21 2015 -0800"
      },
      "message": "More work on layered user restrictions.\n\n- Now when DO/PO sets a user restriction, DPMS pushes it to UMS and\nthen UMS persists it, in order for UserManager.hasUserRestriction()\nto never have to talk with DPMS, which would cause lock inversion.\n\n- Also apply user restrictions when a user start.\n\n- This is an updated version of the abandoned CL -- the difference\nis, ActivityManager no longer has to call DPMS.\n\n- Also removed an unnecessary write to userlist.xml in UMS.\nupgradeIfNecessaryLP().\n\nBug 23902097\nBug 25388912\nBug 25354031\nBug 25641040\n\nChange-Id: I0948aea06ad7d0f45fe612a431d765faddfe3c58\n"
    }
  ],
  "next": "6c7acb6ec7494235dd80d972fb3db0f7b48fb4fc"
}
