)]}'
{
  "log": [
    {
      "commit": "f2d87eba750d15093c996c1dbae7b755a7462478",
      "tree": "b009efddccd9452b0680a3c046095269dde887cf",
      "parents": [
        "ee4ff424ea01425e2b647a3017303442e52740aa"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 17 15:21:16 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Aug 17 16:42:46 2016 -0700"
      },
      "message": "AppIdleHistory: Only write screen on durations during regular sync\n\nStop writing to disk every time the display goes off. Only write to\ndisk periodically.\n\nConsequences\n\nPreviously, if the device rebooted after the screen duration was written\nto disk, apps would appear more stale than they actually were.\n\nNow apps will always look fresher, which is a better scenario.\n\nBug:30807864\nChange-Id: Ia69a2e51fc9e397789215b449fae56fa3e29c74a\n"
    },
    {
      "commit": "589fca469f8368fec886c6e6e37605a4b805bee8",
      "tree": "b4b63d2ad48ef058e932abe52c82f7751f0d37f4",
      "parents": [
        "4595bc7f12cadfc0ec7b1f9fe0945fd2e45fb425"
      ],
      "author": {
        "name": "Tony Mak",
        "email": "tonymak@google.com",
        "time": "Thu Jul 14 15:30:18 2016 +0800"
      },
      "committer": {
        "name": "Tony Mak",
        "email": "tonymak@google.com",
        "time": "Fri Jul 15 03:41:41 2016 +0000"
      },
      "message": "Whitelisting device provisioning package from app standby\n\nChange-Id: Ib9cb7a3fdf7aa16a97f22eacbed872880b7f9fbe\nFix: 29892977\n"
    },
    {
      "commit": "ac042501c816fa9a65aed005060ebdcfc0a0f3b2",
      "tree": "cc0dd336476e766ca94289ad056a2530cb02246c",
      "parents": [
        "f6be4c023fbd29d14fdd0b8df6b939b8a46cf553"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 20 16:39:42 2016 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Jun 02 15:57:40 2016 -0700"
      },
      "message": "ShortcutManager: Implement usage report API\n\nBug 28536054\n\nChange-Id: I293e8eaad523e3b0d76d562fc381601633451ed3\n"
    },
    {
      "commit": "5fb47f3ed745c27ded5f901966aeefe077d98b3f",
      "tree": "5b3c7563bd3021065d9d99fb5a8b67caa587a309",
      "parents": [
        "d30606575783acd8689cfac604cba51e537b6b77"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 11 13:02:08 2016 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 11 13:02:08 2016 -0700"
      },
      "message": "Fix issue #28118215: Crash during system boot due to null carrier apps\n\nChange-Id: I607ccc4baf769c2fb78b0d745bf9fddc3d240855\n"
    },
    {
      "commit": "ae4cde1ccebd41c9ca1af555c0a1a2580c3d7e1c",
      "tree": "3e75223f97303082ba25af95e283ec727639f1fe",
      "parents": [
        "0fd0f893dd5fc45f14ef1c33f359cd7fcbb52432"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 06 15:21:31 2016 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Wed Apr 06 15:21:31 2016 +0100"
      },
      "message": "Do not update idle apps on OTA\n\nModifies the PackageManagerService.updatePackagesIfNeeded to filter\nout packages which are considered idle by the UsageStatsManager.\n\nBug: 27902702\nChange-Id: I8847dfc283e0246265009effb6394bb774848eb3\n"
    },
    {
      "commit": "bdda1e076eb30bf88749a1a349f9bb6f52434ecd",
      "tree": "7ec46f42d37be538833cb0143ebdda2fb35c5cad",
      "parents": [
        "79936ddda4c8d1709f736cda013070c3ab32db6f"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 14 11:55:38 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 14 11:55:38 2016 -0700"
      },
      "message": "Clear app idle state for removed packages\n\nOn a package being added or removed, remove\napp idle state for the app.\n\nBug: 27570398\nBug: 26182816\nChange-Id: I14bdc1f951bbd99bda8111bea56f8c9dda04148d\n"
    },
    {
      "commit": "c53962d4ede82a03b62f0c8bb86bd0da090a15eb",
      "tree": "fc9880dd6d706cf1f96a6976cbceca17a6d0cd1e",
      "parents": [
        "f7d47f91feeffb75761b339cb14c631cc18d3728"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 01 19:27:23 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Mar 01 19:29:16 2016 -0700"
      },
      "message": "When system server goes down, crash apps more.\n\nApps making calls into the system server may end up persisting\ninternal state or making security decisions based on the perceived\nsuccess or failure of a call, or the default values returned.\n\nThe reality is that if the system process just died, init will be\nalong shortly to kill all running apps, so we should have no problem\nrethrowing the RemoteException as a RuntimeException.\n\nBug: 27364859\nChange-Id: Ife0bcb079636c88d54c44d17eb580409fd79028b\n"
    },
    {
      "commit": "4ec6368f13a53906757283d50a17ed3ed43eccc4",
      "tree": "615cb9e92bb489bb4f8770ffd419348657c2b8d1",
      "parents": [
        "b799d3f127f7410e8d0afe16343032e6115750fc"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 19 12:55:27 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 24 11:30:00 2016 -0800"
      },
      "message": "Optimize calls to TelephonyManager to check for privileged apps\n\nCalling into TelephonyManager each of hundreds of apps to check\nif the app is carrier privileged was very expensive, especially\nwhen there aren\u0027t even any carrier access rules specified. This\nchange fetches all the carrier privileged apps in one call,\nreducing the number of IPC calls to the radio process and checks\nthe package names locally.\n\nIf the carrier rules change or packages are modified, the list\nwill be computed and fetched again.\n\nOther optimizations in Telephony help speed up the individual calls\nto check if a package is privileged, as well.\n\nBug: 27271861\nChange-Id: I5a77b6da4f2cdc603d2a73bd8569c5c38f06b42d\n"
    },
    {
      "commit": "b1e153bcd246f838c336855e1f4c8142625eefed",
      "tree": "cd50bf7adfd1a8baa65a84bcb2617d7d27580707",
      "parents": [
        "0137c3daf4bdd3154b71d9b34536960c424fc422"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 18 11:07:01 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 18 11:22:30 2016 -0800"
      },
      "message": "Reduce locking duration when checking idle states\n\nSynchronize only the methods that need to be, so that\nthe lock is not held for a few hundred milliseconds, blocking\nother usagestats operations.\n\nBug: 27208519\nChange-Id: I43bda0791dd8b2576a8af506bcdc67a09a5830f2\n"
    },
    {
      "commit": "ca5d6d2a814fbe4bceffa01b8c18ac05f70fbba0",
      "tree": "e7d6b85fa3abd3ad4bd30698efbcb57499370633",
      "parents": [
        "e4735a99598bf29847a9f12dd7fae6d7df880bc4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Feb 16 13:58:46 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 17 13:36:48 2016 -0800"
      },
      "message": "Clean up App Standby code\n\nDon\u0027t continue to check idle states for removed / stopped users.\nNo need to check for uninstalled packages for all users.\n\nBug: 27208519\nChange-Id: I9a3a3bbec560dd380ce90df9fef102d7f62769ca\n"
    },
    {
      "commit": "c170204541d7b424ff04c9420c984c6e0f6165f1",
      "tree": "89e6ae67e07a149dd2173a6bf19571cd5b5ed0f1",
      "parents": [
        "25222f55f28221d49a984db465f94e9716635ad8",
        "e35ae5cce1bcc1841b433ed1c5bef0a5c911cf15"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Sat Feb 06 19:42:14 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 06 19:42:14 2016 +0000"
      },
      "message": "Merge \"UsageStatsBackup Bug Fix\""
    },
    {
      "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": "e35ae5cce1bcc1841b433ed1c5bef0a5c911cf15",
      "tree": "1605948cb19a4cb9f575542737fb2743876ab983",
      "parents": [
        "ee081d5bd0fdbe7224382da7ce388b9d21f21c78"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Wed Feb 03 17:06:57 2016 +0000"
      },
      "committer": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Thu Feb 04 11:48:02 2016 +0000"
      },
      "message": "UsageStatsBackup Bug Fix\n\nFixed a bug which caused a null pointer exception on restore\nin deleteDirectoryContents() method.\nAlso made other cosmetic changes.\n\nChange-Id: I75712ec585fdfdbca462c468acf2229a47331b59\n"
    },
    {
      "commit": "538c11cf2175d4e30337e8776401bfede85866be",
      "tree": "b316e0ddf79049891fc34a356e4d69b152e39fe2",
      "parents": [
        "f3e5d1d483231d615f5e77032f787fcd8047488b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 29 10:45:45 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 29 10:46:09 2016 -0700"
      },
      "message": "Hack to get devices booting again.\n\nIf we try scheduling a pass before the system is ready, record a\npending event and dispatch once we\u0027re actually ready.\n\nBug: 26863668\nChange-Id: I028285383c8bbe8b653aeaa7544eefe3d41277bc\n"
    },
    {
      "commit": "63668e8ab04c1eb05b8d63371c3547677129f1b9",
      "tree": "ef1b6c627826da5d21731f04de0ff498c2999d77",
      "parents": [
        "26387474faacc3ba9e1f19fb719db728f1b0a85a",
        "5142a2d5b3f70c2017792ce04d3f254221ab3d21"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 28 11:55:58 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 28 11:55:58 2016 -0800"
      },
      "message": "Merge commit \u00275142a2d5b3f70c2017792ce04d3f254221ab3d21\u0027 into manual_merge_5142a2d5b3\n\nChange-Id: I6681b0e132e95bd7e861e183e7369b4da07738eb\n"
    },
    {
      "commit": "b2d3ffaa208e341b67285e761e58ea39df89f906",
      "tree": "0cb8a2bcb556cf3723b5627d925e35311b208265",
      "parents": [
        "dca8f10031f33c7c85577fa1abcc26d560c90388"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 26 18:18:19 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 27 17:51:47 2016 -0800"
      },
      "message": "Don\u0027t change screen on time on time changes\n\nScreen on time should be measured in elapsed realtime, not wallclock.\n\nCause a checkIdleStates to occur when reloading stats\n(on rollover and on time change).\n\nWhen time changes occur in the negative direction, the new stats file\nwe create can overlap the previous one with regards to its end timestamp.\nUse the begin timestamp to determine which of the latest stats to merge.\n(b/22716352)\n\nBug: 26488100\nChange-Id: If31b29bbbee9e98401205b5e26bce86e181286e7\n"
    },
    {
      "commit": "8a6ce2cb64f4d61ee426240c539dc8b00dac857f",
      "tree": "6aefc2addb2adec4274609aa488c805baf6d92bd",
      "parents": [
        "6cfdf6b67aede52c9fffd98315925d9368943b8b"
      ],
      "author": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Thu Dec 17 17:03:54 2015 +0000"
      },
      "committer": {
        "name": "Ritesh Reddy",
        "email": "riteshr@google.com",
        "time": "Tue Jan 26 20:29:15 2016 +0000"
      },
      "message": "Enabled Backup/Restore of Package UsageStatistics\n\nBacking up UsageStatistics using a new API in\nUsageStatsService like the Notifications backup.\nThe backup logic is in the same package as UsageStatsDatabase\nwhile the BackupAgentHelper resides in the android package\nalongside SystemBackupAgent.\n\nBug: 26179323\nChange-Id: I022d85fbcd4abb763230bec6eea50a7e723b5152\n"
    },
    {
      "commit": "9b4716b531a26b2db4eeae307e20a38668ae6a21",
      "tree": "881dbb8ad52daeb33beae204ea32df742fd3ddc4",
      "parents": [
        "1ed9046617480ff6e9cb8c878e4b772a90efc405",
        "375901244c051d85a63d7ca83807e5f1ca7a5d0a"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 21:49:37 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jan 22 21:49:37 2016 +0000"
      },
      "message": "Check apps idle states on time changes am: c465e71cdc am: d4bd4cb4b1\nam: 375901244c\n\n* commit \u0027375901244c051d85a63d7ca83807e5f1ca7a5d0a\u0027:\n  Check apps idle states on time changes\n"
    },
    {
      "commit": "c465e71cdc401e1565c29a895a5c6d366ba5344c",
      "tree": "1c6e2c858d8fe1efdf2bf55de9f1f736e57a181f",
      "parents": [
        "a6855a1faa898da0f4a4fdc45485dc1f4182497b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 11:27:16 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 22 11:27:16 2016 -0800"
      },
      "message": "Check apps idle states on time changes\n\nAnd ensure that the listeners are informed of app standby transitions\nthat might occur during time changes.\n\nFix for apps that sometimes don\u0027t have network access until reboot.\n\nBug: 26488100\nChange-Id: Ic342c188a6cd19faee88f50b2c6a342a6968cb23\n"
    },
    {
      "commit": "89a697a7e78de121a228b5a8d08a86ee76a40f1c",
      "tree": "68013d25bfbc9dcf8313b4c65f239485b3284f0f",
      "parents": [
        "1121576a6efb593fac7be1380d8d706b02e811f5",
        "6a8c328d7386d19f4590dfbfc71338b1ec208fb7"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 14 01:05:24 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jan 14 01:05:24 2016 +0000"
      },
      "message": "Merge \"UsageStats: Use new settings key idle_duration2 for app idle\" into mnc-dr1.5-dev am: d2e215978b am: a5c7106017\nam: 6a8c328d73\n\n* commit \u00276a8c328d7386d19f4590dfbfc71338b1ec208fb7\u0027:\n  UsageStats: Use new settings key idle_duration2 for app idle\n"
    },
    {
      "commit": "f0ef3c112683e4e04406f0355de34f4f1ac20386",
      "tree": "e722396dc8b10e54f8810d34333879ed0376317b",
      "parents": [
        "a5c53291a8123fa0296c849fe153a7dcf79b4dda"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 12:26:07 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 12:48:50 2016 -0800"
      },
      "message": "UsageStats: Use new settings key idle_duration2 for app idle\n\nIgnores the old, re-appropriated key \"idle_duration\" which is now\nset to a high value in order to force disable app idle on devices\nwith bug b/26355386\n\nBug:26355386\nChange-Id: Iff9de843ad6e547d29c1583687fc7f7ce7e15090\n"
    },
    {
      "commit": "7856f3c283e6332c22d5cee41d2e673e1dfe09f8",
      "tree": "d47cb46fcf38e6e625b05132067ae0a125d63f05",
      "parents": [
        "4fce66668e45429bbba49b9fb35d3b8d095a466c"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 11:03:35 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jan 13 11:03:35 2016 -0800"
      },
      "message": "UsageStats: Fix issue where initializing data for first time would cause crash\n\nWith the updated rolling window of stats for app idleness, we need to make sure\nit is populated before we initialize some defaults.\n\nNow that we look at older entries to figure out idleness, if those\nentries are in the future (due to time change), set them to the current\nscreen on time.\n\nBug:26504153\nChange-Id: I4c21e8f094a1a6727373368d043f523053280d7d\n"
    },
    {
      "commit": "76e9d76c22fe164f301e85ebbcbdd4cae26fca71",
      "tree": "e6117901a49f9fc7b70a222b4a4b58bc1a06ceff",
      "parents": [
        "d9434699e4ef8c528ce01223ee9ef200bfd693e4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 10:36:09 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:52:45 2016 -0800"
      },
      "message": "UsageStats: Fix issue where initializing data for first time would cause crash\n\nWith the updated rolling window of stats for app idleness, we need to make sure\nit is populated before we initialize some defaults.\n\nNow that we look at older entries to figure out idleness, if those\nentries are in the future (due to time change), set them to the current\nscreen on time.\nBug:26504153\n\nChange-Id: Ia22add0e8eaf0f137002bbe3e91d747fef5b7d69\n"
    },
    {
      "commit": "881f6f9266ca15e7c6302d659b07d06ecfe40300",
      "tree": "c7f7d65670f09c223c5376ab87a9f112845a3eb9",
      "parents": [
        "de41d3cd5a28cce3ba7f0fa23ba7c41ef93b223d",
        "551fc6823a86e2f038b100f63c02f45bab40fdf4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:41:48 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jan 12 16:41:48 2016 -0800"
      },
      "message": "resolve merge conflicts of 551fc6823a to master.\n\nChange-Id: I2778bf2a364c103fc0d351f2afc4fc73bede2f19\n"
    },
    {
      "commit": "da4a3775735ffc0fa510031f75bc459b764b259d",
      "tree": "d14fbecb3b31f5b58a3ca1c1df37d71c76d7699b",
      "parents": [
        "c2ec3f1bbe7271be2126b48fc94acc42a37f43f2"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jan 07 18:24:53 2016 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Sat Jan 09 05:58:52 2016 +0000"
      },
      "message": "UsageStatsService: Fix app idle issue at rollover time\n\nApp Idle queries are very frequent and so they only check in memory stats.\nHowever, in memory stats can be missing some entries, especially after a rollover, but also\ndue to a larger bug fixed in master (too risky to take now).\n\nThe fix is to do a deep query (reading older files from disk) and maintain a parallel cache\nof stats for app idle. That way the rolling window of data required to serve app idle queries\nstays in memory.\n\nBug:26355386\nChange-Id: I2dd3946b45d7d893410715bb0534b2b48694ced6\n"
    },
    {
      "commit": "cd65448ccd13c4c2d0fe9e9623fec3a898ab9372",
      "tree": "da60bd6e2d928bfe7119258f8908d8360166f2c0",
      "parents": [
        "629f98466a4c2d778ddd4ce5a9df107e28f9b98a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 17:42:11 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 18:35:54 2016 -0700"
      },
      "message": "Even more PackageManager caller triage.\n\nFinish moving all UID/GID callers to single AIDL method that requires\ncallers to provide flags.\n\nTriage AppWidgets and PrintServices, which currently can only live on\ninternal storage; we should revisit that later.\n\nFix two bugs where we\u0027d drop pending install sessions and persisted\nUri grants for apps installed on external storage.\n\nBug: 26471205\nChange-Id: I66fdfc737fda0042050d81ff8839de55c2b4effd\n"
    },
    {
      "commit": "c5967e9862489024c932b0c7fcb84ed0af2a7fd7",
      "tree": "1387b9d38e6591a59022af167cc4d2625c769a31",
      "parents": [
        "f0e4daecc9eccccd7aa2c48b2166f0681381cff9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 07 18:50:29 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 16:10:33 2016 -0700"
      },
      "message": "More progress on triaging PackageManager callers.\n\nCatch a bunch of simple cases where the PackageManager flags are\nobvious.  Add the ability to use the MATCH_SYSTEM_ONLY flag on\nPackageInfo and ApplicationInfo queries.\n\nRe-examine recent tasks after a user is unlocked, since some of the\nactivities may now be available and runnable.\n\nBug: 26471205, 26253870\nChange-Id: I989d9f8409070e5cae13202b47e2c7de85bf4a5b\n"
    },
    {
      "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": "8877120173fd62d6701822471f06fe84e992c2ae",
      "tree": "5fc122441d8217fccce2fb7dc8c8a9d337441b04",
      "parents": [
        "c99c41781c69d2cfef411c531cf879e84ca62a74"
      ],
      "author": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Fri Nov 06 15:26:15 2015 +0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Dec 18 00:03:16 2015 +0000"
      },
      "message": "Fix system watchdog timeout when reading too many usage events.\n\nSymptom:\nAs issue link:\nhttps://code.google.com/p/android/issues/detail?id\u003d193100\n\nRootCause:\nUsageStatsService.onDisplayChanged executed in system main thread,\nIf calling UsageStatsManager.queryEvents with too many events before it\n(i.e. in daily usage event file,\ntoo many activity resume / pause events or configuration change\nduring monkey test),\nSystem will be blocked then watchdog timeout.\n\nSolution:\nLet display listener executed in background thread handler\n\nBUG: 25355086\n\nChange-Id: Ic894d112612400ed8fb7ba843b3309fdc4f66fe1\n(Cherrypicked from 4e59db328d8b0cc163d2e3eb0f7f3a108f20a58d)\n(cherry picked from commit 7018f60b06fd0c647ebf13225320d7e15d02e075)\n"
    },
    {
      "commit": "ccf7d9e8ce11fd44e5b70b375ce25bed93e7153c",
      "tree": "c82cc47052c38f2e9c785eb4f84c1c24fab01e77",
      "parents": [
        "669692234b095371790af3a8a8054ba4af79b283"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 12:46:02 2015 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 12:53:26 2015 -0800"
      },
      "message": "Use correct lock for reading/writing usage stats files\n\nBug: 25355086\nChange-Id: I65946e5afa841215f161fc25ad70b31a108a33c3\n"
    },
    {
      "commit": "bdb94fe2ce45325f2f569f76a85f8183d0fc7488",
      "tree": "20d668e854334924a9388d63f8dadabf42e10bab",
      "parents": [
        "0fecb5b008c06273fac5b9b6f425476271283b99",
        "f12ffe6d762f281cbda56322be83a1da80b707ea"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 20:45:29 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 11 20:45:29 2015 +0000"
      },
      "message": "Merge \"Fix system watchdog timeout when reading too many usage events.\" am: 10b0bae06f am: b3d48f18a9\nam: f12ffe6d76\n\n* commit \u0027f12ffe6d762f281cbda56322be83a1da80b707ea\u0027:\n  Fix system watchdog timeout when reading too many usage events.\n"
    },
    {
      "commit": "f12ffe6d762f281cbda56322be83a1da80b707ea",
      "tree": "2f783cd0e81d23c2bb533f5f7bb2e29f01d8bedd",
      "parents": [
        "3210b8b4da3c745420d3010028f2bb7071044262",
        "b3d48f18a94c586823462c93fc0f739c83f3db78"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 20:38:15 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 11 20:38:15 2015 +0000"
      },
      "message": "Merge \"Fix system watchdog timeout when reading too many usage events.\" am: 10b0bae06f\nam: b3d48f18a9\n\n* commit \u0027b3d48f18a94c586823462c93fc0f739c83f3db78\u0027:\n  Fix system watchdog timeout when reading too many usage events.\n"
    },
    {
      "commit": "b3d48f18a94c586823462c93fc0f739c83f3db78",
      "tree": "f7ab604230933e318c51d20413b2a80878ba8223",
      "parents": [
        "467804448d6b13e04b4d9bc20fd195baa1f07e90",
        "10b0bae06ffdeb79494ddd1aff19387b56770960"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 11 20:30:32 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 11 20:30:32 2015 +0000"
      },
      "message": "Merge \"Fix system watchdog timeout when reading too many usage events.\"\nam: 10b0bae06f\n\n* commit \u002710b0bae06ffdeb79494ddd1aff19387b56770960\u0027:\n  Fix system watchdog timeout when reading too many usage events.\n"
    },
    {
      "commit": "4e59db328d8b0cc163d2e3eb0f7f3a108f20a58d",
      "tree": "20e6c80dcddbc3c34d4aa655f7bd636ae0c9b3b1",
      "parents": [
        "7abb36599d9537296d9a51f766152025c6ed0491"
      ],
      "author": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Fri Nov 06 15:26:15 2015 +0800"
      },
      "committer": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Mon Nov 09 07:24:48 2015 +0000"
      },
      "message": "Fix system watchdog timeout when reading too many usage events.\n\nSymptom:\nAs issue link:\nhttps://code.google.com/p/android/issues/detail?id\u003d193100\n\nRootCause:\nUsageStatsService.onDisplayChanged executed in system main thread,\nIf calling UsageStatsManager.queryEvents with too many events before it\n(i.e. in daily usage event file,\ntoo many activity resume / pause events or configuration change\nduring monkey test),\nSystem will be blocked then watchdog timeout.\n\nSolution:\nLet display listener executed in background thread handler\n\nChange-Id: Ic894d112612400ed8fb7ba843b3309fdc4f66fe1\n"
    },
    {
      "commit": "24937d235da1648ece1866ce326da539c0ccb4bf",
      "tree": "b9f9ead3d39b38ff80c6c838386f354e90384a0e",
      "parents": [
        "92fe44e966b9622c24a6810aaf9c2d8e2b1f9d92",
        "3aee38c86e1a1dbc62b7ad5f4d08dd7d3db6d496"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 03 12:47:12 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 03 12:47:12 2015 -0800"
      },
      "message": "resolve merge conflicts of 3aee38c86e to master.\n\nChange-Id: I9ff3f92b37e24f5f0527a0034b159920f6d7ffe1\n"
    },
    {
      "commit": "fcc95a6d2c749d6b77eca14bf301d665d858a840",
      "tree": "a95fe49978bcff3db9a225ce1e328847f92c5164",
      "parents": [
        "a47f9dad2bd70b594e445a6a448877122f28517a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Nov 02 13:43:29 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Nov 02 16:15:35 2015 -0800"
      },
      "message": "Fix issue #25357209: Could not send SMS or MMS messages, had to reboot\n\nI think what probably happened is that since we only report an app\ngoing in to the \"interaction\" state as an interaction event to usage\nstats, apps that sit around in that state forever will only see one\ninteraction at the start and never again.  So usage stats could start\nthinking they are idle.\n\nFix this by having the activity manager report an interaction event\nfor such long running applications at least once a day.\n\nAlso, because it is correct and for paranoia by protected us another\nway, system uids should never go in to standby.\n\nChange-Id: I8a3805bfca86cbe78560488a649ecd07427da99a\n"
    },
    {
      "commit": "9d77be8383fe7546989425a35b80509dfa054034",
      "tree": "d2311ec790c51a411a5cc67d1e42f4893a707255",
      "parents": [
        "75f47866066d5b06924530417c7cb72296753ccb",
        "d2c95f9821c98604ab06fb3d7c6f617bd88ada3e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Tue Oct 13 00:55:17 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 13 00:55:17 2015 +0000"
      },
      "message": "am d2c95f98: am 97604b42: am 9f1ae4dc: am fe9c950a: Merge \"Fix parole scheduling bugs.\" into mnc-dr-dev\n\n* commit \u0027d2c95f9821c98604ab06fb3d7c6f617bd88ada3e\u0027:\n  Fix parole scheduling bugs.\n"
    },
    {
      "commit": "7cba1d46d37b2d1ef85a67d8cfab6b37ce0c4eb3",
      "tree": "288685dfaf94a9ee8ba70c8bd57fdeec67d3fc7d",
      "parents": [
        "f8def4d40b100c114a19c7093040b3077039d30b"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Aug 04 16:17:37 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Sep 15 17:40:01 2015 +0000"
      },
      "message": "UsageStats: Fix time change handling\n\nWhen the time changed, we would end up creating a new stats file, even if we could\nreuse an old one. On systems where the time toggled a lot, this would generate\nhundreds of files and slow down other IO operations on this set.\n\nNow we properly reuse stats files after time changes. The time at which a particular\nfile began recording was always clamped to the start of the interval (day, month, year).\nHowever, this makes no sense when the time changes, and clamping to the start of the interval\nwould always cause a new file to be created, since the current time no longer fell into that\ntime interval. So now the time is just offset from the last file\u0027s end time.\n\nBug:22716352\nChange-Id: I6cec156e2e93b4402116600fa09c1018f3b870fe\n"
    },
    {
      "commit": "5ded7af622539ded176f81951843c3c52c89a6d1",
      "tree": "a01626bed97f9a33acb0ccd63a3aa495d71c2d9d",
      "parents": [
        "dc988061ac145c86d6871e249d65ca326aaff99f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 14 15:35:38 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Sep 14 15:49:53 2015 -0700"
      },
      "message": "Fix parole scheduling bugs.\n\nThere were a few subtle bugs in app idle parole scheduling that\nwould cause us to never end a parole period we had entered.  The\nupdated logic in this change concentrates the registration for the\nnext event in one place in setAppIdleParoled().\n\nBug: 24050462\nChange-Id: I1efe43cd6e00a547f70c4a4a37e1f3ef52a7e706\n"
    },
    {
      "commit": "35eb8d6205994c0cd147840dff45d09a1a2ca705",
      "tree": "7d1860799e3538a94d64b005df255136b457676a",
      "parents": [
        "fe6fd5d29d1ddefa52243ce7f6a3da91d188723d",
        "1559f1c5a0a4db23b8338b8c4792dcb351c541f8"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Aug 19 02:21:23 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 19 02:21:23 2015 +0000"
      },
      "message": "am 1559f1c5: am 217d4568: am 8100b3fa: am 4439dcdc: am af75c17b: Fix issue #23270878: NPE in UsageStatsService while running UserManagementTest\n\n* commit \u00271559f1c5a0a4db23b8338b8c4792dcb351c541f8\u0027:\n  Fix issue #23270878: NPE in UsageStatsService while running UserManagementTest\n"
    },
    {
      "commit": "af75c17bca8b2f017e254131393cd72e2fe7c6e8",
      "tree": "e083068e1a6b7f77a89f1b2a11eeb14b6ea3a176",
      "parents": [
        "9a010d0a4157f97870bc38bd3dd0a8f4fd18a172"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 18 11:08:10 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Aug 18 11:08:10 2015 -0700"
      },
      "message": "Fix issue #23270878: NPE in UsageStatsService while running UserManagementTest\n\nChange-Id: I34d4fcdc103b3a6ea5c4ed78895f2fe18597237a\n"
    },
    {
      "commit": "908109c1f909cbeeb766f551c16121ddd1a3adba",
      "tree": "81bf5c7b078f9d55e570b2d39e02d2213a298926",
      "parents": [
        "bb24672e9751143a15b8004585645ae4a3a54b73",
        "0385e3e908fb9988bb2d2d0d15e32cb6a819b34e"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sat Aug 08 02:49:41 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Aug 08 02:49:41 2015 +0000"
      },
      "message": "am 0385e3e9: am 8e63bbfd: am efa4dee1: am 977d421a: am f0e5501e: Merge \"Fix issue #22989030: Separate battery whitelists\" into mnc-dev\n\n* commit \u00270385e3e908fb9988bb2d2d0d15e32cb6a819b34e\u0027:\n  Fix issue #22989030: Separate battery whitelists\n"
    },
    {
      "commit": "4a503b1ece485d44c15eb02ec2bcd464b46e6f7f",
      "tree": "72a22a0708c74e5f99a8bf2f4cb68f3d6ac15cf7",
      "parents": [
        "1d7c32548c30c62a35c54a624f89d5f9db31b9d4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 06 22:19:06 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 07 14:23:32 2015 -0700"
      },
      "message": "Fix issue #22989030: Separate battery whitelists\n\nWe now have a new whitelist you can put apps in, which\nopts them out of the old battery saver mode and new app idle,\nbut doesn\u0027t keep them from going in to doze.  This is for a few\nspecial cases that we had previously whitelisted for battery saver,\nand inherited to the new modes...  ultimately we should figure out\nhow to get these apps out of the whitelist completely, but this\nwill help for now.\n\nApps in this new whitelist are not shown in the UI, because they\nare still significantly restricted by not being able to operate\nnormally in doze.  This also means they are still visible in the\nlist of all apps for the user to be able to put them on/off the\ncomplete whitelist if that is what they really want.\n\nIn the course of doing this, I needed to clean up code in the\nnetwork policy manager to better separate management of the\ntwo firewall rules that now have different whitelists applied\nto them.  This also hopefully just generally simplifies and cleans\nup that code.  Hopefully!\n\nChange-Id: I92e15f2f85899571dd8b049b5e3eb1354f55f353\n"
    },
    {
      "commit": "233d94c0df13a7e54f738f442457cebc62294384",
      "tree": "d86d6165c28a970289862ab129f51604206f0918",
      "parents": [
        "896b49ad02b20cf0723241f1f28dd9bee43f2b99"
      ],
      "author": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Thu Jul 30 15:08:00 2015 -0700"
      },
      "committer": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Mon Aug 03 13:05:33 2015 -0700"
      },
      "message": "clean up UserHandle.USER_OWNER reference\n\ncleaning up a few in framework/base/services.\n\nBug: 19913735\nChange-Id: I1af5f24d9b39d6712ad3a665effa6166e32ce3d3\n"
    },
    {
      "commit": "bf3a24d5ec004a46cc75b947226fb7c23e4a0ed1",
      "tree": "19c09602712bb4f5921a7966160023f89da834be",
      "parents": [
        "2abf0f24af60b8644d5b61eed9666793083546ee",
        "7cc902bea78dd16488d367e8ed0ccf25d4d825c2"
      ],
      "author": {
        "name": "Wenchao Tong",
        "email": "tongwenchao@google.com",
        "time": "Thu Jul 23 18:14:47 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 23 18:14:47 2015 +0000"
      },
      "message": "Merge \"Ignore the active network scorer when checking for idleness\" into mnc-dev"
    },
    {
      "commit": "2dfb91412c27581d27b7eba172912d2893d69abe",
      "tree": "ea3a6c8dd3bb6694587f2c9972da1b2571a11915",
      "parents": [
        "a0a71d8a221d4f3896c7b0d3b2b87eba4e7a77f7"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 22 17:23:40 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 22 17:35:46 2015 -0700"
      },
      "message": "UsageStats: Reduce log spam during time change\n\nWith lots of usage stats files, the log gets spammy\nwhen the time changes and we are moving files around.\n\nBug:22549399\nChange-Id: I9da39399b090066d52568dea6fc5b59aba063c5a\n"
    },
    {
      "commit": "7cc902bea78dd16488d367e8ed0ccf25d4d825c2",
      "tree": "4917ede1aeac2ec6874718fb8ce571c1698d114f",
      "parents": [
        "bdb7d936512a39b6c06411d11a26824b82e5727f"
      ],
      "author": {
        "name": "Wenchao Tong",
        "email": "tongwenchao@google.com",
        "time": "Wed Jul 22 11:15:09 2015 -0700"
      },
      "committer": {
        "name": "Wenchao Tong",
        "email": "tongwenchao@google.com",
        "time": "Wed Jul 22 16:29:49 2015 -0700"
      },
      "message": "Ignore the active network scorer when checking for idleness\n\nBug: 22667334\nChange-Id: I97085e653c146eff148458440bbac0a2ac64d6d2\n"
    },
    {
      "commit": "e03f17c82eac7b6ce55e434fab29c7c428b46baa",
      "tree": "3671a00ba8f5409962d5a8840290cdd07fb12266",
      "parents": [
        "3d6f606031da248a3b1fd6f0f569ac33a26c0b5e"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 22 16:01:45 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 22 16:01:45 2015 -0700"
      },
      "message": "UsageStats: Gracefully handle corrupt filenames\n\nNot sure how useful this is, since renames should be atomic. If the filesystem\nis corrupt I\u0027m sure other parts of the system will break. Good to be safe though!\n\nBug:22172659\nChange-Id: Iad339be2869d170bcf736c59feb93830a51905e1\n"
    },
    {
      "commit": "fd854ee58c5d56f84047007ead9f88a767ae956f",
      "tree": "8cd12e57928f2984b2da6c9a0872fcb795c5fa94",
      "parents": [
        "987241265b77542f45ce95838c25beeaf3ae6849"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 13 18:00:37 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 14 18:33:08 2015 -0700"
      },
      "message": "Fix issue #21626564: MMS should be receivied while Dozing\n\nWe now place whoever is receiving the MMS on the temporary\nwhitelist while doing so, so they can get network access to\ndownload it.\n\nThere was also an issue that needed to be fixed where we\nwere no longer updating the list of allowed uids while\ndozing based on their proc states...  we now do that.\n\nAlso did a bit of optimization of the temp white list update\npath do the network policy manager, instead of going through\na broadcast we now directly call in to the network policy\nmanager.  This also allows us to have a synchronous version\nof updating the list, so we can know the app has network access\nbefore we tell it to do anything.\n\nFinally added battery stats events for things going on and off\nthe whitelist so we can diagnose the behavior there.\n\nChange-Id: Ic7fe010af680034d9f8cb014bb135b2addef7455\n"
    },
    {
      "commit": "8dca36dc8a5d17315775ce216689addc5bd9be00",
      "tree": "020e812cedd03afe06a6c783465ec85356c26b86",
      "parents": [
        "20fab81a09e1ca04e811c6c6d94acb08037739e7"
      ],
      "author": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Fri Jun 19 12:44:59 2015 -0700"
      },
      "committer": {
        "name": "Xiaohui Chen",
        "email": "xiaohuic@google.com",
        "time": "Mon Jun 22 15:35:19 2015 -0700"
      },
      "message": "system_server: optimize app idle parole state change\n\nCurrently when app idle parole state changes, all idle apps\u0027 states\nare updated one by one including firewall modifications which are\nvery expensive.  This optimization gets rid of individual firewall\nrule changes and makes sure we only modify the firewall once at child\nchain level.\n\nBUG: 21446713\nChange-Id: Iafc415fe0bc127826fe17894d4fedcf1755cb17d\n"
    },
    {
      "commit": "92617036fcc9b25378c8448c923d6346a012346b",
      "tree": "1199db3ede88beef386945f6a38a71bf698ea6cf",
      "parents": [
        "d66559f26da245d433b642d584ef290dc1fabfcc"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 19 15:32:19 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 22 10:09:45 2015 -0700"
      },
      "message": "Fix issue #21930140: Add config to turn off auto power features\n\nDoze and app standby are now off in the default platform config.\nThe Google overlay turns them on.  Other people can do that as\nwell, if they are feeling like it.\n\nChange-Id: Ic8a87f696df94f2d8354fe0772d03b672f464e32\n"
    },
    {
      "commit": "37a40c24deb02bca3868a8085069afae112f22e4",
      "tree": "7e38587e99825bf5234c1f130bcf1972271b0795",
      "parents": [
        "b0ff3a6cb37aa45add4b0c5135bd978442fcc441"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jun 17 13:25:42 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jun 19 15:04:58 2015 -0700"
      },
      "message": "App Standby : Association between content providers and their sync adapter\n\nSet sync adapters to active if the associated content providers are used\nat foreground process state.\n\nMinimize how frequently published content providers are reported by\nkeeping track of last reported time.\n\nAlso cache sync adapters associated with an authority in SyncManager.\n\nBug: 21785111\nChange-Id: Ic2c8cb6a27f005d1a1d0aad21d36b1510160753a\n"
    },
    {
      "commit": "a750a63d639f6936af456df904fa6b9ba941885e",
      "tree": "41cd79aec0dedbf162eab2749bd6dec45bb7509d",
      "parents": [
        "f5820276635a2d3d2e3c694eddba7e6a02093a20"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 16 17:18:23 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 17 11:41:45 2015 -0700"
      },
      "message": "Fix issue #21814207 and issue #21814212 (alarm manager)\n\nIssue #21814207: AlarmManager.setAndAllowWhileIdle should also allow wake locks.\n\nIntroduce a whole new infrastructure for providing options when\nsending broadcasts, much like ActivityOptions.  There is a single\noption right now, asking the activity manager to apply a tempory\nwhitelist to each receiver of the broadcast.\n\nIssue #21814212: Need to allow configuration of alarm manager parameters\n\nThe various alarm manager timing configurations are not modifiable\nthrough settings, much like DeviceIdleController.  Also did a few\ntweaks in the existing DeviceIdleController impl.\n\nChange-Id: Ifd01013185acc4de668617b1e46e78e30ebed041\n"
    },
    {
      "commit": "1958e5e7870579337f1d1d3e6c6fae096ba3abb9",
      "tree": "fad208704fc337915aff86df8021895eb1910701",
      "parents": [
        "f63655e49fcccd922e8d5f61c67f58bd4a361211"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 12 18:11:41 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 15 11:53:59 2015 -0700"
      },
      "message": "Fix issue #21813831: Need API for asking to be added to power whitelist\n\nAdd the API.  Clean up a few related things.\n\nChange-Id: I190adad1812f36f6095b98a1001fedb94874e8b5\n"
    },
    {
      "commit": "480d6eb953aa12a495a080557d4ea84782db2328",
      "tree": "5810e2654ab3de2c798bec2a5c8ab86049371a7c",
      "parents": [
        "8491d2dea90bf462b09befb604138a77d746f94a",
        "d82dbb3ffe418773b0d57d63b09e69fd6dd944bb"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jun 12 23:38:24 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 23:38:26 2015 +0000"
      },
      "message": "Merge \"Fix negative inactiveTime on creating a new user\" into mnc-dev"
    },
    {
      "commit": "d82dbb3ffe418773b0d57d63b09e69fd6dd944bb",
      "tree": "cf6ef02fba4592a2dc2d39dae5e62b49435ba655",
      "parents": [
        "bc9b1024535a21ce8d73fa1ca7deb86ea4d1338b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jun 12 16:35:17 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jun 12 16:35:17 2015 -0700"
      },
      "message": "Fix negative inactiveTime on creating a new user\n\nInitialize the beginIdleTime to 0 rather than current time.\n\nBug: 21699099\nChange-Id: Ib94a9198c4e80aea5d9de68c5cf5d6f8cfc79e0a\n"
    },
    {
      "commit": "a6232df053cdc2df9d8a1d97a5c81d55cce7a1e2",
      "tree": "61f6874cb4abca02a973065cacceeeac44ff05c5",
      "parents": [
        "6cb8e30bb7e79cb694bf44d185da201e9deb9363"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jun 11 18:16:41 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jun 12 16:19:07 2015 -0700"
      },
      "message": "App Standby: Convert constants to Settings.Global\n\nUse settings instead of hardcoded constants, and listen for their changes.\n\nBug:21640379\nChange-Id: Id8305bb234f93f7c64c1a5e82e26b31504624324\n"
    },
    {
      "commit": "6776849dc5ff851a225745393f082b702754e278",
      "tree": "bb6d298a607751f57a662718cf3c6603f3057c1a",
      "parents": [
        "4039f6570cff0013d3986b522d43e6eab7cc28a6"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jun 09 12:23:58 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jun 12 09:05:22 2015 -0700"
      },
      "message": "Report app standby state to batterystats\n\nAlso reduce idle checks to the target user if possible.\nOptimized calls to some internal methods\n\nBug: 21639147\nChange-Id: If1faf26f862e5c4ca905f2603a4ba52a8d1af954\n"
    },
    {
      "commit": "c8e8729244d75584ce71a74d29c452fe538a22c5",
      "tree": "11388496fdf1aef923b10b70f26c4e11f7a2def2",
      "parents": [
        "3d53a26d1a8471f4709b528686601381fd7e6da4"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jun 10 15:33:45 2015 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jun 11 22:01:45 2015 +0000"
      },
      "message": "UsageStats: Change INTERACTION to SYSTEM_INTERACTION\n\nSYSTEM_INTERACTION events are signals to the system for a package\u0027s\nimplicit actions (service bound, etc).\n\nThese should not affect the API visible stats like lastTimeUsed, etc.\nUSER_INTERACTION is for user initiated actions (notification interaction, etc).\n\nBug:21761781\nChange-Id: I4585cf35fbb158612a3c737710108bec34e89183\n"
    },
    {
      "commit": "b4b9ca7580c75f07330e5222cbd9ccc93b12935e",
      "tree": "99c18c384cf567d01d9771533608cee0c158a4d5",
      "parents": [
        "7631697793a8b82bb2a1cd3adced1b140d266427"
      ],
      "author": {
        "name": "Zach Johnson",
        "email": "zachoverflow@google.com",
        "time": "Tue May 19 00:02:27 2015 -0700"
      },
      "committer": {
        "name": "Zach Johnson",
        "email": "zachoverflow@google.com",
        "time": "Mon Jun 08 13:49:13 2015 -0700"
      },
      "message": "Ignore carrier apps when checking for idleness\n\nAlso introduce a way to check if a package has\ncarrier privileges for any active phone.\n\nChange-Id: If5c5fe07f05ffc90fc21431eb27cf48030c0175b\n"
    },
    {
      "commit": "af575b9f8e1b59be9c8862b6a65c0dcb88145a23",
      "tree": "c2bbc1b2a63b28a7de83b04d83010c56ee2771fc",
      "parents": [
        "242b9c4eee9d42d02fd2259ffe2124234653aaf2"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 29 15:35:26 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jun 02 11:05:03 2015 -0700"
      },
      "message": "Temporarily whitelist an app for network during doze\n\nAPI to allow an app to be whitelisted for network and wakelock\naccess for a short period. So even if the device is in idle\nmode, such apps can be given a chance to download the payload\nrelated to a high priority cloud-to-device message.\n\nThis API is meant for system apps only.\n\nA new permission CHANGE_DEVICE_IDLE_TEMP_WHITELIST is required\nto make this call.\n\nBug: 21525864\nChange-Id: Id7a761a664f21af5d7ff55aa56e8df98d15511ca\n"
    },
    {
      "commit": "547116ea62bde21012dbda1531cb58dfe61026a7",
      "tree": "3c177750e699f341848f54449baea2bd050d9351",
      "parents": [
        "1705113e91a553b4bad6435854295d0b7a7c6b8e"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue May 19 16:51:30 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 20 15:40:37 2015 -0700"
      },
      "message": "Use screen-on time and wallclock time for idleness calc\n\n12 hours of screen-on time and 2 days of wallclock time\nmust elapse before considering an app idle.\n\nBug: 20066058\nChange-Id: Ie7b584b40e644d868aa2708876723c3391fd432e\n"
    },
    {
      "commit": "901e924392dd79c6d1b61c3bb92461585f7b3204",
      "tree": "1365ca205b2552b78842add10a3e04075e422eb9",
      "parents": [
        "7853e137eda0866c732a301e6b3ffb19408634b4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 13 18:21:09 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 13 18:21:33 2015 -0700"
      },
      "message": "Allow settings to change app inactive state\n\nChange-Id: I57efb4b5fa69c9a268025fb1ef83de36c4cc83ca\n"
    },
    {
      "commit": "0a11e69428d4c00dfcb368c1eb4e60ad8e0dc918",
      "tree": "34407c845b53947ac87ac16fdc02f2fa85619b68",
      "parents": [
        "05fe90c10b54111a742187935f2890029b348bf5"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 08 16:36:21 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed May 13 11:49:35 2015 -0700"
      },
      "message": "Track app idle history and dump it\n\n\"dumpsys usagestats history\" will show the\nactive state of each app for the last 100 hours,\nif the device hasn\u0027t rebooted.\n\nBug: 20066058\nChange-Id: I703e5bc121298e4363c202da56fffb0b8534bcaf\n"
    },
    {
      "commit": "520d8f2ac6ad2c3cd244e1f710103b3a43a41725",
      "tree": "2ac6a93d9c759a11e166a940835f00a430976338",
      "parents": [
        "bb9d9278aa6fe3ba3d4c21b03d3e3da4543a974c"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 08 16:36:21 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue May 12 16:08:50 2015 -0700"
      },
      "message": "Allow exemption to idle apps at periodic intervals\n\nTriggers are device idle mode changing as well as\ninternal delayed message handlers.\n\nBug: 20066058\nChange-Id: I0627cfbcc16cfc2b8ac7d298fd2c681a5a6571dd\n"
    },
    {
      "commit": "06bf824628c118fbd5ad6756913d7fd63a6f4ce5",
      "tree": "91e73265354432cf4d82543366ce11dddf19247b",
      "parents": [
        "a5b2684c25add3ba6ebc43c27a1abc6bce2b2af4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 08 16:36:21 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon May 11 17:46:14 2015 -0700"
      },
      "message": "Idle timebase\n\nUse screen on time as timebase for idling out apps\nthat have been inactive.\n\nStore the time when an app was last active as an additional\npackage state in UsageStats. Compare it to screenOnTime to decide\nif it\u0027s inactive.\n\nExclude device idle whitelist from apps that can go inactive.\n\nBug: 20066058\n\nChange-Id: I709f9f31a9affa7ca6e1ae3e4c5729c5fb221669\n"
    },
    {
      "commit": "e5f330456bdf5e138485ee117929fc4337866132",
      "tree": "9c4b921692303f129febd3c56fcfbad9f95837ab",
      "parents": [
        "e678b41cdb56847c094260607ea39aea4abb808e"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 08 13:20:22 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 08 13:20:22 2015 -0700"
      },
      "message": "Rename *AppIdle to *AppInactive per api-council\n\nChange to setAppInactive and isAppInactive in a few places.\n\nBug: 20823737\nChange-Id: Ie57dbc0dd2842e771bb5fd9f69b8041aacaa005c\n"
    },
    {
      "commit": "e4a8da8ea241858b52d8122480316db79582c44d",
      "tree": "4bb2aaa2e55c435a2c60426466683835dcfad9f8",
      "parents": [
        "403ac2d64f7ad53ecf9ccd713951cf151ea2f2bc"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Apr 30 17:32:25 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 01 11:17:27 2015 -0700"
      },
      "message": "Exclude bound app widgets from idle app list\n\nTrack package names of bound app widgets and use the list when\nquerying for idle apps.\n\nBug: 20066058\nChange-Id: If8039397a061ef04bb13aa38d57cd7f0221f5fc7\n"
    },
    {
      "commit": "15e47235c055495ec0ccc24768a6746a960d3a61",
      "tree": "434a82a8c5dc409f0f3ae62f91adc7144e2d371e",
      "parents": [
        "9ac2718e7dcf274ad41fbb374bedabadc558634b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 24 19:06:07 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 29 14:21:53 2015 -0700"
      },
      "message": "Remove network access for idle apps\n\nTrack apps going in and out of idle in the NetworkPolicyManagerService.\nApply DROP rules in firewall controller if app is to be blacklisted\nfor network access.\n\nFirewall can now be in whitelist (old) or blacklist mode. When in\nblacklist, it allows all by default and we can selectively DENY\nsome uids.\n\nTrack app idle in UsageStats and update periodically.\nTrack charging/discharging states.\n\nTODO: Check for appidle temporary parole state\n\nBug: 20066058\nChange-Id: Ia65d7544204b3bcb78a517310ef4adcc05aac6fb\n"
    },
    {
      "commit": "f47e51ec605fccf7fed9e50d1adc98fbd4e8b340",
      "tree": "68c2fe8acf0144544d498ca413283d70d7666c53",
      "parents": [
        "4bc704655abee70c1998b9a62777cdf643920467"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 17 10:02:15 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 24 16:12:01 2015 -0700"
      },
      "message": "More usage tracking\n\nNotification listeners can now report that a notification\nhas been seen by the user and that package is then marked\nas active.\n\nBug: 20066058\nChange-Id: I336040a52c44c21fd0d78b02ec9a19d448c64b40\n"
    },
    {
      "commit": "cf76872a62075abf9008e99ca08413fb70761dc2",
      "tree": "20ba4867939d30bccefe383ae85848bd610e0dde",
      "parents": [
        "a1ab2d37a055f9c2d623260b41ecff778fdf3aa2"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Apr 23 20:36:41 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 24 12:58:46 2015 -0700"
      },
      "message": "Add ability to get and set idle state of apps\n\nAdd am shell command to set and get idle\nAdd public API to check if an app is idle\n\nBug: 20534955\nBug: 20493806\nChange-Id: Ib48b3fe847c71f05ef3905563f6e903cf060c498\n"
    },
    {
      "commit": "96a0fd65e18e5b9a0eaed3c24fd8a60a1fac1c3a",
      "tree": "497996afd2d57bc9b65602bd4bcd595c60c4917e",
      "parents": [
        "fb1e9b79782580acabf0dd4dda6a74349fafc978"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 10 16:16:30 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Apr 13 15:36:32 2015 -0700"
      },
      "message": "Delay syncs for idle apps\n\nApps that haven\u0027t been in use for a while and are considered idle\nare not synced until the device is charging or the app is used.\n\nBug: 20066058\nChange-Id: I3471e3a11edae04777163b0dbd74e86495743caa\n"
    },
    {
      "commit": "55717a613c23fc6b05cab86c3b0de283a027e9f6",
      "tree": "444c1c93aac1f8aa07ba164ff310a80be2f259b1",
      "parents": [
        "092f038d502e49ae91db6f5af5a34344704fcae2"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 03 17:22:36 2015 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Apr 06 12:52:53 2015 -0700"
      },
      "message": "Mark apps as not-idle at least once\n\nOn a fresh boot or update to M, mark existing apps\nas being used if there is no existing entry in the\nusage stats. On subsequent OTAs, make sure that at\nleast the new system apps are marked as used.\n\nReduce idle threshold to 1 day.\n\nBug: 20066058\nChange-Id: I9a273c051d04432877bacd381c85bf6e721c1a85\n"
    },
    {
      "commit": "b0ff32245cb6b51e43dd3ee40b86d683c62de2b9",
      "tree": "caa4ccf39aced5bf9ebcca0386b8948aac3302fb",
      "parents": [
        "73e5f13d9919d773a2de12f3b576c9b56a54b173"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Mar 04 09:56:14 2015 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 03 13:20:19 2015 -0700"
      },
      "message": "Throttle jobs for idle apps\n\nFirst pass at delaying jobs from apps that are idle.\n\nTODO: Throttle syncs\nTODO: Provide a periodic point at which apps are checked for idleness.\n\nApps that switch to foreground process state are tracked by UsageStats\nas an INTERACTION event that affects the last-used timestamp.\n\nJobScheduler\u0027s logic for when an app is ready is trumped by the idleness\nof the app, and only if the battery is not charging. When charging state\nchanges, we update the idle state of all the tracked jobs.\n\nandroid package is whitelisted.\n\nBug: 20066058\nChange-Id: I0a0acb517b100a5c7b11e3f435f4141375f3451f\n"
    },
    {
      "commit": "f55187767ed06acd52ddbc0e8de19b4d69db97bd",
      "tree": "c16046853ea6d7c7e19a05ce8e054aa2a2cab394",
      "parents": [
        "a4005662c7a22b457a6db092426f16b240902732",
        "3a0831bfe6e69a2ad11b9f6fae04fb27daa40a88"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 22:23:44 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 02 22:23:44 2015 +0000"
      },
      "message": "Merge \"Fix issue where pruned UsageStats files would not be removed from index\""
    },
    {
      "commit": "a4005662c7a22b457a6db092426f16b240902732",
      "tree": "fda1861c00e64ab4d7b0ce44a7c65961c8f4762d",
      "parents": [
        "7b91c55b3ff4857e904a11a0a67fcc86a32868b4",
        "978a1ed5aa2752cd36ff51df91d2d2d8be2171d9"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 22:22:57 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 02 22:22:58 2015 +0000"
      },
      "message": "Merge \"Add generic \"INTERACTION\" event type to UsageStatsManager\""
    },
    {
      "commit": "3a0831bfe6e69a2ad11b9f6fae04fb27daa40a88",
      "tree": "71b2b5a5a7e503b85c6e020caeaa5b2712c0dcdc",
      "parents": [
        "978a1ed5aa2752cd36ff51df91d2d2d8be2171d9"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 13:06:46 2015 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 13:06:46 2015 -0800"
      },
      "message": "Fix issue where pruned UsageStats files would not be removed from index\n\nThis would cause an exception to be thrown when querying stats\nthat included a deleted file and cause only in-memory stats to be\nreturned.\n\nThis change now re-indexes after deleting files.\n\nFurthermore, we continue reading UsageStats files in order\nto return more useful data if some other issue (file corruption)\nleads us to fail reading a file.\n\nChange-Id: I4a52739624d68e719e3d7d324a0b16709a62ac7a\n"
    },
    {
      "commit": "978a1ed5aa2752cd36ff51df91d2d2d8be2171d9",
      "tree": "4c383bf6ee66fd90b721fc670bb24a2d94fd15bd",
      "parents": [
        "5414d155e5ce3147f9db1b2ec6fb2dcd6473e089"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 11:37:24 2015 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Mar 02 12:54:14 2015 -0800"
      },
      "message": "Add generic \"INTERACTION\" event type to UsageStatsManager\n\nThis will allow for updating a package\u0027s last time used\nproperty for packages that are interacted in ways other than\nlaunching their activities (interacting with notifications, etc.)\n\nChange-Id: Ic6f9519f46fa04abd37ea6fc9475bcd9ea721003\n"
    },
    {
      "commit": "690f78adf1737b2356d341b46f21a4e2d5df58eb",
      "tree": "66a5cc9813c24f2edb64a87206aae3b434969e7b",
      "parents": [
        "bd4b5b7fd0c5f7a2ec82ea130922541626dcc0fd"
      ],
      "author": {
        "name": "Edward Cunningham",
        "email": "ejc@google.com",
        "time": "Fri Feb 27 00:33:30 2015 +0100"
      },
      "committer": {
        "name": "Edward Cunningham",
        "email": "ejc@google.com",
        "time": "Fri Feb 27 00:33:30 2015 +0100"
      },
      "message": "Fix UsageStats to report correct endTime from XML\n\nBug: 19529542\nChange-Id: Iacb1a245a40c6b88ae15740797217f59d5fca1e6\n"
    },
    {
      "commit": "0fb25fae8f664f7c9f4cb7e29b03824a16becd5c",
      "tree": "1730ad1bc66b4b791dc9fcd0bf403570f9722596",
      "parents": [
        "872d4e00ed1715d76dc8e97853a4e3e9542ca8d0"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Nov 07 15:55:33 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Nov 07 17:36:27 2014 -0800"
      },
      "message": "UsageStatsService: Update file index to prevent double checkin\n\nWe seem to have renamed a file as checked-in twice, which means\nwe checked it in twice and created a malformed name with the suffix\n\"-c-c\" instead of the correct suffix \"-c\".\n\nBug:18280677\nChange-Id: Ie3164010898a333e5d9b97151d285ea376de799e\n"
    },
    {
      "commit": "32e580604d7b0a093750178127693a804bea134c",
      "tree": "ef4683fd323b5e77e42799b79f7cf9e588a6a950",
      "parents": [
        "085329b69abc0751591f99faf8a7e8fc2dc7c9df"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Nov 04 13:38:46 2014 -0800"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Nov 04 13:38:46 2014 -0800"
      },
      "message": "Fix bug where checking-in more than once would cause an infinite loop in UsageStatsService\n\n- Forgot to increment loop variable :S\n\nBug:18239732\nChange-Id: Ie37a83584d7849108dbfd3bd4cbb595520d488b1\n"
    },
    {
      "commit": "720a5c51beb5beab442832ea8d169aa5b4edb43f",
      "tree": "d33e4f00d6323f4b24aee11ae3ff3f3629760cf0",
      "parents": [
        "a232953ea3f7eedfdd4dd7b58b63886433dbdd56",
        "1bb18c435dbf967f3a9bc9d680411471b8bab4ac"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Oct 29 23:11:52 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 29 23:11:54 2014 +0000"
      },
      "message": "Merge \"Add dumpsys output to UsageStatsService, along with --checkin support\" into lmp-mr1-dev"
    },
    {
      "commit": "1bb18c435dbf967f3a9bc9d680411471b8bab4ac",
      "tree": "3759f0ca856610ea7b9479d7fa120aa4455fff73",
      "parents": [
        "cc66a236f90cbef7f9562b4179c3aec517f4f082"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 18 12:21:34 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Oct 24 18:01:04 2014 -0700"
      },
      "message": "Add dumpsys output to UsageStatsService, along with --checkin support\n\nBug:17814138\nChange-Id: If414ae5f4b8e4a2838f63f52d80e764915cee934\n"
    },
    {
      "commit": "7eb599b267d00cbde891c0a87924f2f5086f4497",
      "tree": "01978b12641d7c03ff3edecc8e2f8d672246a5a8",
      "parents": [
        "f6e297398ba23ce7d26cf2e0efaf0d8a2230fe1c"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Oct 22 15:57:32 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Oct 23 11:27:42 2014 -0700"
      },
      "message": "Get UsageStats if no PackageUsage is available for boot dexopt filtering.\n\nBug: 17191977\nChange-Id: I33e18459e49afa42b8e8218574a2434e5205a6da\n"
    },
    {
      "commit": "a39871ef5e9bf6703f18af0725484b06f5c78216",
      "tree": "8bdaac2d5284ebc738e2d1665c4101dabd2f546d",
      "parents": [
        "0a62ab707977d4d6666d1c452ba702442655b6e6"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Sep 29 13:44:04 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Sep 30 16:49:32 2014 -0700"
      },
      "message": "Use VMRuntime.isBootClassPathOnDisk\n\nBug: 17679443\nChange-Id: If53c236058a7237d735c2344a715cf0a36301f9b\n"
    },
    {
      "commit": "3bab7c188d5e823484eda5c0f3df7759ce4a6c98",
      "tree": "f828a78b8ddaa2007b2edc3b80de61e41cee2987",
      "parents": [
        "e461d549bf571fcca7698d1b5e7da71310e0998d",
        "66143fa5b34eea7413335111838fb692987b611a"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Sep 12 01:42:20 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 12 01:42:21 2014 +0000"
      },
      "message": "Merge \"UsageStats should deal with changing time\" into lmp-dev"
    },
    {
      "commit": "66143fa5b34eea7413335111838fb692987b611a",
      "tree": "81c625a519316ba1d499ad5f28ed46ee2bccfaa3",
      "parents": [
        "023b6812abbca465773acd6141ff672d525a83ee"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Sep 11 08:31:05 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Sep 11 18:39:01 2014 -0700"
      },
      "message": "UsageStats should deal with changing time\n\nWhen the system time is changed, the UsageStats API\nwill modify all existing entries to correspond with the\nnew time change. If the time changed when the device was\noff, stats in the future will be deleted.\n\nChange-Id: Ica3e9917d4d1a180f97700e52ab390e3673e1e82\n"
    },
    {
      "commit": "8cd28b57ed732656d002d97879e15c5695b54fff",
      "tree": "33f02a0e243e5c3d8889862c26af5accc0e4e98b",
      "parents": [
        "da6e6c888f81d3bd19ff1f3cf9b081b7f9b2a013"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Jun 08 17:54:27 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Sep 10 17:15:06 2014 -0700"
      },
      "message": "Apply cross-user restrictions to Shell\n\nEven though Shell user is allowed to perform cross-user actions,\nlock that path down if the target user has restrictions imposed by\nthe profile owner device admin that prevents access via adb.\n\nIf the profile owner has imposed DISALLOW_DEBUGGING_FEATURES, don\u0027t\nallow the shell user to make the following types of calls:\nstart activities, make service calls, access content providers,\nsend broadcasts, block/unblock packages, clear user data, etc.\n\nBug: 15086577\nChange-Id: I9669fc165953076f786ed51cbc17d20d6fa995c3\n"
    },
    {
      "commit": "37a46b48dcb7e34ee3669cfb2ed78af08bfca3c7",
      "tree": "e6e9012966c56f386d6fb496ceb9d3bd2dd8707e",
      "parents": [
        "cd922b29b5448c5c884d4b06bf9d1f3e7bb7bce0"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Sep 05 15:38:05 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Sep 05 23:57:42 2014 +0000"
      },
      "message": "Store time offsets for UsageStats XML\n\nThis will make adjusting for time changes easier\nin the future.\n\nChange-Id: I49d2dda4cc6dcb1378a58c814849924f585e0417\n"
    },
    {
      "commit": "d26bea3a1498d1b327ae37cc796fb8cd67e9c977",
      "tree": "2de9bcb88f6f4bea0153bceaf9a86c838dd91991",
      "parents": [
        "7f61e96db7c90c1f4418359672aa4656aebee500"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Sep 03 16:49:59 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Sep 05 23:09:27 2014 +0000"
      },
      "message": "Returns UsageEvents from previous days\n\n- Avoid writing to disk when querying UsageStats.\n- Use new UnixCalendar to avoid issues with Locale and TimeZone.\n\nBug: 16951313\n\nChange-Id: I2473b8ef8dc1e2f6be22d4c689b96e346bdcafd5"
    },
    {
      "commit": "7f61e96db7c90c1f4418359672aa4656aebee500",
      "tree": "6748f94db635e24c26a6a7236c444e2c0d906181",
      "parents": [
        "d400ca2f8db42e57e41f2a999833703619348fef"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Sep 02 16:43:52 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Sep 04 12:15:32 2014 -0700"
      },
      "message": "Add Configuration changes to UsageStats\n\nBug:17354208\nChange-Id: I9b2f595e51b656607e30e798926cfb7e25134944\n"
    },
    {
      "commit": "9d9607527f5bbf49c96565b63b90e36276b0dda7",
      "tree": "f750028aa4a8c1c0c29b2f3fedac393642dc9438",
      "parents": [
        "4e9c07c0de199169374bded403805c92f1c1c6c1"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 25 14:48:12 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Aug 26 12:41:31 2014 -0700"
      },
      "message": "Split up ComponentName in UsageEvents.Event\n\nSome events in the future may not have originated\nfrom a class, so we shouldn\u0027t be using ComponentName.\n\nBug:17259858\nChange-Id: Id7fe3245b91596cf27ae4ec51655602f01665622\n"
    },
    {
      "commit": "29564cd24589867f653cd22cabbaac6493cfc530",
      "tree": "c5ee0b88f293d292d95012844097acd172a7a72a",
      "parents": [
        "bdc78678dedc6b66b9584948b908cd8cf77c6b30"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Aug 07 10:57:40 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Aug 15 13:37:03 2014 +0100"
      },
      "message": "Remove system_server classes from the boot image.\n\nWe set the system_server classpath in the environment\n(like we do with BOOTCLASSPATH). After the zygote forks\nthe system_server, we dexopt the classpath (if needed)\nand then launch the system server with the correct\nPathClassLoader. This needed several small / medium\nrefactorings :\n\n- The logic for connecting to installd is now in a separate\n  class and belongs in the system_server.\n- SystemService / SystemServiceManager have now moved to\n  classes.jar. They are only used from there, and since they\n  use Class.forName, we want them to be loaded by the\n  system_server classloader, and not the bootclassloader.\n- BootReceiver now moves to frameworks.jar, because it is\n  used by ActivityThread and friends.\n\nbug: 16555230\n\nChange-Id: Ic84f0b2baf611eeedff6d123cb7191bb0259e600\n"
    },
    {
      "commit": "9a0b289f060e68e42d3db0b843d55cf920f3da12",
      "tree": "d4859fad956007459e0263aa9045b870ade4609c",
      "parents": [
        "02b25e9ba6b5c15c3af08bf74ad70519fcbcd8ce"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 11 15:03:32 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Aug 12 20:25:37 2014 +0000"
      },
      "message": "Fix NPE in UsageStats for new User\n\nBug:16946585\n\nChange-Id: Ibd0d674681f3f49087305cea33ce7292f5d2229d\n"
    },
    {
      "commit": "3516800b611a79339a3c188332d13a26e9086b09",
      "tree": "4c9f8791534cc81cd9562223d2929ee8ff554bfc",
      "parents": [
        "5c09e8ad5ee8e67976066366527ee58792551953"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jul 21 15:25:30 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Aug 08 12:08:15 2014 -0700"
      },
      "message": "Second iteration of the UsageStats API\n\nBased on feedback from API council, updated the API.\nAlso added support for querying the event log.\n\nChange-Id: Ibaa008b9e5bd145acdfe8e20c25c2ed2d96be123\n"
    },
    {
      "commit": "3c153519ca5f2b66b88901374383f943c9d77df7",
      "tree": "a8af9d9bec018b08cb47e7c6ac622e449c8585d1",
      "parents": [
        "f7496d7e0c475e1b3f16129c42c8540bd810ec85"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 23 17:34:34 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jul 25 17:18:54 2014 +0000"
      },
      "message": "Add Per-User logging of UsageStats\n\nChange-Id: I4518c5d3c56b3821292accb886f9fb21f3a8b25f\n"
    },
    {
      "commit": "e159e2e0b83f9ea9d48f4c8666f9536e9338a70c",
      "tree": "b3da726ce05637a30ec5aa3d8038b92af4e93050",
      "parents": [
        "921ec8056a3010d0a21400f97312cf3f7d97ffaa"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jul 22 15:55:50 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jul 22 18:21:58 2014 -0700"
      },
      "message": "Add test UsageStats App\n\nAlso fixed UsageStatsService to do the right thing\nwhen AppOps returns MODE_DEFAULT.\n\nChange-Id: I0bdb28350fb2528daf2859cdcbbf9ca48d96dde9\n"
    },
    {
      "commit": "53ab92d89069fb0178ba98eb641a6fc87145543a",
      "tree": "92c6b2ff5b88ab75adc68ddeca2eca72a3c053c2",
      "parents": [
        "8207c58490e977e87079cc6ca85c85b673f5cf50"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jul 21 11:27:58 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Jul 21 13:20:25 2014 -0700"
      },
      "message": "Change UsageStatsService to check uses-permission\n\nHave UsageStatsService check permission grants when AppOps\nreturns the default MODE_IGNORED mode for a package.\n\nChange-Id: I784a708451a56863b13fc5f178e10bba6ce37a2f\n"
    },
    {
      "commit": "0debc9aff4c0cbc28e083a948081d91b0f171319",
      "tree": "3ac4d7a9927cdd2741f65393d4e6855508ab3c26",
      "parents": [
        "d3de42cae84fadfa1befd082a2cf1bf72f9ad82a"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Wed Jul 16 19:09:13 2014 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Fri Jul 18 15:24:20 2014 -0700"
      },
      "message": "First iteration of a public UsageStats API\n\nUsageStats API that allows apps to get a list of packages that have been\nrecently used, along with basic stats like how long they have been in\nthe foreground and the most recent time they were running.\n\nBug: 15165667\n\nChange-Id: I2a2d1ff69bd0b5703ac3d9de1780df42ad90d439\n"
    }
  ]
}
