)]}'
{
  "log": [
    {
      "commit": "3d64c041f4072a2b7359be492f8e0a92f16097ac",
      "tree": "f2e139419e12d21c34689809ac7db625034eda57",
      "parents": [
        "607e7979323bff85df3a2c92a0278d7685011ebe"
      ],
      "author": {
        "name": "Kweku Adams",
        "email": "kwekua@google.com",
        "time": "Mon Nov 05 18:06:13 2018 -0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Wed Jan 30 09:50:23 2019 +0000"
      },
      "message": "Informing app idle listeners on enabled state changes.\n\nCurrently, if AppStandbyController is enabled after some listeners have\nalready registered, the listeners will be told that the system is in a\nstate of parole even though AppStandbyController thinks it\u0027s not in\nparole. This change informs AppIdleStateChangeListeners when\nAppStandbyController\u0027s enabled state changes as well so that they can be\nin the correct state.\n\nI also removed the call to setAppIdleEnabled() in onBootPhase() since\nupdateSettings() is called right afterwards and that also calls\nsetAppIdleEnabled().\n\nBug: 112329453\nTest: atest AppStandbyControllerTests\nalso check logs to confirm that NetworkPolicyManagerService and\nJobSchedulerService\u0027s listeners switch from ON to OFF when the system is\nready.\n\nChange-Id: I88bc293c70b459f54f75f92126ad306d6ab8d9b7\nMerged-In: I88bc293c70b459f54f75f92126ad306d6ab8d9b7\n"
    },
    {
      "commit": "12adf3a985ad5ed24e6ab467f55d33d2ec15c783",
      "tree": "1fcdf8e14b823f836049ac334335451f409acde1",
      "parents": [
        "e42fbe4606eaec8f753e4853ea1130734b8da21b"
      ],
      "author": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Mon Oct 29 20:43:43 2018 -0600"
      },
      "committer": {
        "name": "Risan",
        "email": "risan@google.com",
        "time": "Mon Oct 29 20:43:43 2018 -0600"
      },
      "message": "isReservedSupported\u003dtrue when running as container\n\nTest: Remove first_sdk_check from StorageHostTest#testVerify, log\nBuild.IS_CONTAINER inside isReservedSupported function, run on sailfish.\nIt shows that Build.IS_CONTAINER\u003dfalse and the test still passes (i.e.,\nisReservedSupported is correctly true).\nAlso checked that Build.IS_CONTAINER in isReservedSupported is true in\nARC++.\nBug: 111287848\n\nChange-Id: I9af1f6cce5bab75ef941989bf279cf40c52e62b0\n"
    },
    {
      "commit": "ddcac2c78d93118c0fb05889cf5b9b25ff077f40",
      "tree": "e02dae2c173801b1abc1c0dd4685a07325a0df64",
      "parents": [
        "3c3beb6e3c8afabaf7afad4084e5dda7b309d2ee",
        "2795cca1cfa9f3004eb63525c135289d19e63f4e"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Fri Aug 31 17:22:07 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Aug 31 17:22:07 2018 -0700"
      },
      "message": "Set AppStandbyController charging state on init\nam: 2795cca1cf\n\nChange-Id: I67b2d6bd5a6f1a5bbc5f8c6e70d6d6516d67a791\n"
    },
    {
      "commit": "2795cca1cfa9f3004eb63525c135289d19e63f4e",
      "tree": "e3ba58b7d357d40b996e310192bc6d010ba0a8c8",
      "parents": [
        "421449a4a66d39ece6436b2413746c91139a6d57"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Thu May 31 15:16:00 2018 -0700"
      },
      "committer": {
        "name": "Po-Chien Hsueh",
        "email": "pchsueh@google.com",
        "time": "Wed Aug 29 15:00:30 2018 +0800"
      },
      "message": "Set AppStandbyController charging state on init\n\nTest: manual (restart device and \"adb shell dumpsys usagestats | grep\nmCharging\u003d\")\nTest: CtsHostsideNetworkTests\nFixes:80545083\n\nChange-Id: I0592622b83525159eeca611b3cc1021347bc53ca\nMerged-In: I0592622b83525159eeca611b3cc1021347bc53ca\n(cherry-picked from 13b1e1774cfc6a568f57b9500f16dd2b26da3cd3)\n(cherry picked from commit 4d5b4b03c8065fc6421456a6135f6d247d2d1dd5)\n"
    },
    {
      "commit": "99e1424e0aa9e7dc4a5ccbff011d7161201921d1",
      "tree": "dd4d2321b9047847151970961210a3c2116ad2cd",
      "parents": [
        "c4cf07a16f27ed795cfea6b0f2e650b63f2b5552"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jul 11 10:44:17 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jul 11 10:44:17 2018 -0700"
      },
      "message": "Fix crash on calling getAppStandbyBucket()\n\nMATCH_ANY_USER, which was locked down recently, is not\nreally needed in this context, so removed it.\n\nBug: 111145886\nTest: cts CtsAppUsageHostTestCases\nChange-Id: I1bb9df0c7370015365bea414599b2b83084a1846\n"
    },
    {
      "commit": "82d3041f30818c605cca2a41861a77d58aafae3c",
      "tree": "857b67265b3cee53f1d1296b0f5289c93646a3e3",
      "parents": [
        "b4e4fc3a1e2cc43207a73629790757b3157687a7"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jun 06 10:48:03 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jun 06 19:51:24 2018 +0000"
      },
      "message": "DO NOT MERGE Fix security exception due to incorrect flags\n\nCaught by test UsageStatsTest due to stricter checks for\nMATCH_ANY_USER.\n\nChange-Id: Ie884c7007a8588a222773fba8d7967bcdf2a528a\nFixes: 109700742\nTest: atest CtsUsageStatsTestCases:UsageStatsTest\n"
    },
    {
      "commit": "621fd20f5591a3d5846e7bbdb8d5624e2b8b8dab",
      "tree": "0391a270d7a6fbea7f735fab1dc28b1f9fba432c",
      "parents": [
        "0726f5c82a180001e7ad99e335740ba1473bb22e",
        "d5f25d2cd882c89965b6538082556d9469f72288"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu May 24 23:22:09 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 24 23:22:09 2018 +0000"
      },
      "message": "Merge \"Tweak exemption for sync requests made by FG apps\" into pi-dev"
    },
    {
      "commit": "d5f25d2cd882c89965b6538082556d9469f72288",
      "tree": "35933c6e4705b547df7e96cff84f38139d7d475f",
      "parents": [
        "fab8e71697c3ab47ad3e53864b22542a9a34fa2f"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue May 22 16:02:17 2018 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed May 23 14:50:05 2018 -0700"
      },
      "message": "Tweak exemption for sync requests made by FG apps\n\nExemption given to a sync request made by a foreground app (including\nPROCESS_STATE_IMPORTANT_FOREGROUND).\nAt the schedule time, we promote the sync adapter app for a higher bucket:\n- If the device is not dozing (so the sync will start right away)\n  promote to ACTIVE for 1 hour.\n- If the device is dozing (so the sync *won\u0027t* start right away),\npromote to WORKING_SET for 4 hours, so it\u0027ll get a higher chance to be started once the\ndevice comes out of doze.\n- When the sync actually starts, we promote the sync adapter app to ACTIVE for 10 minutes,\nso it can schedule and start more syncs without getting throttled, even when the first\noperation was canceled and now we\u0027re retrying.\n\nTest: atest cts/tests/tests/syncmanager/\nTest: Manual test with \"requestsync -f\" and \"am set-standby-bucket\", while checking\n\"dumpsys usagestats\"\nTest: settings put global app_idle_constants \\\n  exempted_sync_scheduled_nd_duration\u003d1,exempted_sync_scheduled_d_duration\u003d2,exempted_sync_start_duration\u003d3\n  and check \"dumpsys usagestats\" and make sure the constants are properly updated.\nFixes: 72443754\n\nChange-Id: I233d8e4be85769150830bac798abc04810f4cc7b\n"
    },
    {
      "commit": "452936192fa1a249fda1ea8a9e757c4edc9d2bac",
      "tree": "7e6f9c45b0a158bfb18f641bdfb72616332776ee",
      "parents": [
        "9f402f41e2fd39da51b6f7c6c1d85dd62a289fc4",
        "20e682910de540ddfcb7d566eb4856d263e9817e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 23 21:49:56 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 23 21:49:56 2018 +0000"
      },
      "message": "Merge \"DO NOT MERGE Allow cross user usage event queries\" into pi-dev"
    },
    {
      "commit": "a0058b47e3e3ba816abd50ad279175b5aa1e9841",
      "tree": "ec12eedc397a4c0a771c6b30997b959ec97af13e",
      "parents": [
        "ab38e73af6cdc8070a02cacb30a5d628bf1b4806"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue May 22 16:32:23 2018 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed May 23 08:14:50 2018 -0700"
      },
      "message": "Make \"am set-standby-bucket\" reset active/working left time\n\nThis is needed for manual testing the fix for b/72443754.\n\nTest: atest cts/tests/tests/app.usage/src/android/app/usage/cts/UsageStatsTest.java\nTest: atest cts/tests/tests/batterysaving\nBug: 72443754\nChange-Id: I13ac03917c0a5a08859c44930406e7a82ebf1a07\n"
    },
    {
      "commit": "20e682910de540ddfcb7d566eb4856d263e9817e",
      "tree": "12c4f056c4919c52bbbde2237237c7a7f655da96",
      "parents": [
        "6433ac13bd3520781d7c5a5ba698f59acf8083c4"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Mon May 21 14:11:43 2018 -0400"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Wed May 23 09:51:13 2018 -0400"
      },
      "message": "DO NOT MERGE Allow cross user usage event queries\n\nFor multipackage requests, caller must be system uid or hold\ninteract_across_users if not requesting fate for the same user.\n\nFor single package requests, caller must be system uid or the\nsame package and hold interact_across_users if not requesting data\nfor the current user.\n\nIn both cases the caller must have the usagestats permission.\n\nTest: couldn\u0027t find automated tests for this file; manual\nBug: 79142791\nChange-Id: I8d650f8e875e0e4578cb48c9ba42e821342852a0\n"
    },
    {
      "commit": "d8611ecd360cce2b16372c6c0b29540b98929e43",
      "tree": "70ff63e3bf90c5ea9396185ef64696566dbedd4c",
      "parents": [
        "b504a2f65b70b9baa319cd97693c9c94a602890c"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Wed May 16 16:39:42 2018 -0700"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Wed May 16 16:53:58 2018 -0700"
      },
      "message": "Added a command to return app_standby_enabled\n\nThe only way to know the runtime state was check dumpsys usagestats, and\nparse through a lot of output.\nThis makes it easier to retreive the state.\n\nTest: adb shell settings put global app_standby_enabled 0\nadb shell dumpsys usagestats is-app-standby-enabled\n\nBug: 74336662\nChange-Id: Ibe80d27bdf940682b9e4c3c14f93b4871f9f1746\n"
    },
    {
      "commit": "98fd4fa0f40a5e06641d0f7b73d2102766f7319e",
      "tree": "42195304cc0d85084de6d2b55f6e72b75b434df7",
      "parents": [
        "1c60953f9da5714b3ebabf0b6546e8fbf06b1597",
        "c870309921dab30893f26409625058f0eddf5a18"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 11 19:03:11 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 11 19:03:11 2018 +0000"
      },
      "message": "Merge \"Add limits to App Usage Observer Api\" into pi-dev"
    },
    {
      "commit": "c870309921dab30893f26409625058f0eddf5a18",
      "tree": "43ffed0b4eaef0890bfac26f4211ff10c0feac2e",
      "parents": [
        "e93daa46591ceb2ad9a8cb80eee230e80be19d27"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Tue May 01 16:02:45 2018 -0700"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Fri May 04 14:43:04 2018 -0700"
      },
      "message": "Add limits to App Usage Observer Api\n\nAdded a minimum time limit for App Time Limit Observers and a maximum\nnumber of observers an app can register to AppTimeLimitController\n\nAlso fix small bug with mDpmInternal initialization\n\nChange-Id: I8c0861d79711149f3ecd92ba4660f7b207e9b921\nFixes: 78890515\nFixes: 79230583\nTest: atest AppTimeLimitController\nTest: atest cts/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/ProfileOwnerTest.java#testAppUsageObserver\n"
    },
    {
      "commit": "b3972f9d2351a877fc0be5841da3289d5a487ebf",
      "tree": "9dbd8506b1261b01743f2058700c3b6c215680fc",
      "parents": [
        "da8e229b9c310c2f82111764c654ff687287e02c",
        "5ca5cb6c5350d8f79beb418251cad90eb152813e"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Wed May 02 00:23:23 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 02 00:23:23 2018 +0000"
      },
      "message": "Merge \"Add Stable Charging Threshold for AppStandby\" into pi-dev"
    },
    {
      "commit": "10b77a39a266e376c4cb7beef3d9543073f75466",
      "tree": "5c1910384c2b02a68fbda2aeb4db8bb874c1b667",
      "parents": [
        "019ec44307661ea88cc0b0a38e4cdf12cbbe1941",
        "60aa35b756707a16d310c222a36edbcef9d56ed4"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 26 22:58:40 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 26 22:58:40 2018 +0000"
      },
      "message": "Merge \"Using a list to store usage events\" into pi-dev"
    },
    {
      "commit": "5ca5cb6c5350d8f79beb418251cad90eb152813e",
      "tree": "fa42deba289f02766720947590128ac6d86a566b",
      "parents": [
        "46e58e1b4086aa0e3eb62f9cdae0eefaea08943f"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Wed Apr 25 16:12:59 2018 -0700"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Thu Apr 26 15:44:58 2018 -0700"
      },
      "message": "Add Stable Charging Threshold for AppStandby\n\nDelay parole when charging to ensure the device has some time to charge\nand avoid a spike is activity on plug in.\n\nChange-Id: If85f097249aeed6b64f43a22f4d25ff0a070febb\nFixes: 78040839\nTest: atest AppStandbyControllerTests\n"
    },
    {
      "commit": "4620d9b3a3e09884683e0a76c6b85b76405b276b",
      "tree": "295b1470034cac69bd1e0e66aaee9c16635c9afa",
      "parents": [
        "630f58ea04a033ac8ec9960bff07227720fd1c38",
        "4b976ad270c624b9ebd3721f0a4499edbe7379dc"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 25 23:37:43 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 25 23:37:43 2018 +0000"
      },
      "message": "Merge \"Add ADAPTIVE_BATTERY_MANAGEMENT_ENABLED\" into pi-dev"
    },
    {
      "commit": "60aa35b756707a16d310c222a36edbcef9d56ed4",
      "tree": "19f4d5c720b2e044ed2bb6ea5538bb532e61d175",
      "parents": [
        "fe36369c075661b61437863a17ff4d1916ca4456"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Tue Apr 24 18:52:46 2018 -0700"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Wed Apr 25 16:36:35 2018 -0700"
      },
      "message": "Using a list to store usage events\n\nMoving UsageEvent.Event objects to an array list sorted on the event\ntimestamps as there can be multiple events with the same timestamps.\n\nTest: atest android.app.usage.EventListTest\nExisting tests:\natest android.app.usage.cts.UsageStatsTest\n\nBug: 74406113\nChange-Id: Idc7f2a8db6e5a9499b3b0b74efbf014b17fa495f\n"
    },
    {
      "commit": "4b976ad270c624b9ebd3721f0a4499edbe7379dc",
      "tree": "7c91237cc6b291a9bcb94ce27214b330c4faec05",
      "parents": [
        "a5843ebb5936e3e5d951bf80438e9c55d430dcda"
      ],
      "author": {
        "name": "Lei Yu",
        "email": "jackqdyulei@google.com",
        "time": "Thu Apr 19 10:38:58 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Apr 19 11:47:38 2018 -0700"
      },
      "message": "Add ADAPTIVE_BATTERY_MANAGEMENT_ENABLED\n\nAPP_STANDBY_ENABLED is controlled by server side to do experiment.\nBefore this CL, Adaptive Battery is hooked up to this flag, so\neven though if user turns it off, it may be turned on by server.\n\nAdd a high level ADAPTIVE_BATTERY_MANAGEMENT_ENABLED to control\nthe feature in settings UI side.\n\nAppStandbyController looks at both flags and enables standby\nonly if both are true.\n\nBug: 78153913\nTest: Build\n      Manually change both flags (through UI and adb)\n      Verify dumpsys usagestats shows the correct state\n      for mAppIdleEnabled.\nChange-Id: I1fb4461f382e1ee87000fdc38962d94a17891c1e\n"
    },
    {
      "commit": "113a0fa35a1bf91b6a45380dec5ce25cb7ec4def",
      "tree": "688c90a257541d49575e26451ea968ef1df59a81",
      "parents": [
        "1074688a265db2d44b244f2f57b9ac081f825e99"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Fri Mar 30 12:45:18 2018 -0700"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Wed Apr 18 15:21:32 2018 -0700"
      },
      "message": "No AppStandby tracking of non existent packages and add parole window\n\nDisallow attempts to change standby bucket of nonexistent packages.\nAlso, add a parole window for idle apps. When parole for idle apps is\nready to be set, check that there is network availabilty. If there is\nnone, wait for network or the end of the parole window before setting\nparole.\n\nChange-Id: I7b8786f59b8da76325f2591cc7b1f86753d52d7b\nFixes: b/71857185\nFixes: b/74345840\nTest: atest android.app.usage.cts.UsageStatsTest#testIgnoreNonexistentPackage\nTest: manual (enable DEBUG and COMPRESS_TIME in AppStandbyController)\n"
    },
    {
      "commit": "6d63103aa59fddd9c17c1ecb08e607d5fe058e49",
      "tree": "ef4afcc58b1b1832fc31890206a7e3fc206382f4",
      "parents": [
        "167032ab002714d26a14735bbcdc072c5fa693b7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 16 09:57:29 2018 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 16 09:57:31 2018 -0600"
      },
      "message": "Use OS package name when identity cleared.\n\nIf we pass through the original calling package name, it obviously\nwon\u0027t match UID 1000.\n\nBug: 78104140\nTest: builds, boots\nChange-Id: Id0acf0b038e25a113674fa2f43ff93ba05144c1f\n"
    },
    {
      "commit": "5a8bcd90315c24e2f16176fd13922b2a92752cd5",
      "tree": "6c05f7553d421b541286347ca0299217730dd8c8",
      "parents": [
        "213639c93e6795c248c18ab2c16858ac28f36abd"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Apr 13 13:29:59 2018 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Fri Apr 13 19:32:25 2018 +0000"
      },
      "message": "OP_GET_USAGE_STATS should be noted, not checked.\n\nPer email feedback, we should be using \"noteOp\" instead of \"checkOp\"\nwhen testing if caller holds OP_GET_USAGE_STATS, so that we record\nthat caller used the operation.\n\nBug: 77662908\nTest: builds, boots\nExempt-From-Owner-Approval: keep tests passing\nChange-Id: I3a60345d590534fdbc2c1248e0d30dc85a5d6772\n"
    },
    {
      "commit": "3378aa9f88101d77bc52c1a00b257c752bd8c193",
      "tree": "beb84eddc97d4567b1c5a0637fcd3250f025550e",
      "parents": [
        "b5dcf7d3ac4f8b213085eb266588acb2117b4044"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 30 17:43:49 2018 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Mar 30 17:43:49 2018 -0700"
      },
      "message": "Work on issue #74404949: Screen state usage API\n\nAdd events for the keyguard being shown and hidden.\n\nBug: 74404949\nTest: atest CtsUsageStatsTestCases:UsageStatsTest\\#testInteractiveEvents\nChange-Id: I038e03cf4ba80669d7d17c3d66b98ee81050abc8\n"
    },
    {
      "commit": "75ad2496ebd8162771687510dfe40b5316cb38bc",
      "tree": "304a8849055ac733e93287ce529777ea44621096",
      "parents": [
        "2011f2333d1b9d0930223dbb3587a40e2d1b80bb"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Wed Mar 28 14:42:42 2018 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Thu Mar 29 14:53:02 2018 -0700"
      },
      "message": "AppStandby exemption: sync requested by FG apps\n\nBug: 72443754\nFix: 72443754\n\nTest: atest ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java\nTest: Manual test with contacts sync:\n\nPrecondition: Put the contacts sync in RARE bucket.\n\nadb shell dumpsys deviceidle tempwhitelist -r com.google.android.syncadapters.contacts\nadb shell am make-uid-idle com.google.android.syncadapters.contacts\nadb shell am set-standby-bucket com.google.android.syncadapters.contacts 40\n\nTest 1: Toggle contacts sync from the Settings -\u003e Account\n\n- Make sure a sync happens.\n\nTest 2: Mutate a contact on the WEB\n\n- Sync is scheduled, but won\u0027t run because it has no network access.\n- am set-standby-bucket com.google.android.syncadapters.contacts 30\n- Sync run runs.\n\nTest 3. adb shell requestsync -n ACCOUNT -t com.google -a com.android.contacts\n\n- Sync is scheduled but won\u0027t run.\n\nTest 4. adb shell requestsync -n ACCOUNT -t com.google -a com.android.contacts -f\n\n- Sync is scheduled but it still won\u0027t run.\n\nTest 5. adb shell requestsync -n ACCOUNT -t com.google -a com.android.contacts -F\n\n- Sync now runs\n\nChange-Id: I1eb972ed321d2a1a782ae23ccb806671926d3e6b\n"
    },
    {
      "commit": "50c069e489068cb7f70145303352141016e19017",
      "tree": "3588a45c8fdb87058aed4a68a1c2a915f1019596",
      "parents": [
        "37594c892de575cfbfe02db23088a7f4c22c22e3",
        "3154dcf94a4f451d2b32607b30cdd070e61bd2ae"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 29 06:03:17 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 29 06:03:17 2018 +0000"
      },
      "message": "Merge \"Fallback to ML prediction after short ACTIVE states\" into pi-dev"
    },
    {
      "commit": "37594c892de575cfbfe02db23088a7f4c22c22e3",
      "tree": "4f4b78ce33589888fe765900e9837af096a3c529",
      "parents": [
        "e33543ff6942e5b56b8fcb6fe0fd06db91aa5210",
        "80c4be88e0c108e3cb4c528c078c53fde6676af3"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 29 05:51:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 29 05:51:24 2018 +0000"
      },
      "message": "Merge \"Add slice pinning to list of reasons for usage\" into pi-dev"
    },
    {
      "commit": "3154dcf94a4f451d2b32607b30cdd070e61bd2ae",
      "tree": "7d9bd214a5b4f9a6d094d633e64365c28733a5be",
      "parents": [
        "11866a4242fce0df45ff95930e3453093c68e8ea"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Mar 27 18:24:04 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Mar 28 13:49:21 2018 -0700"
      },
      "message": "Fallback to ML prediction after short ACTIVE states\n\nWhen an app is temporarily elevated to ACTIVE state for some\nreason, keep track of the last predicted bucket and drop back\nto that if the ACTIVE state ends.\n\nAlso keep track of prediction during a forced ACTIVE state, even\nif it\u0027s not applied right away.\n\nBug: 77158823\nTest: atest AppStandbyControllerTests\nChange-Id: Ic6de6c24bb25c5392ac5b41a2c05889d94f23436\n"
    },
    {
      "commit": "ced54398cc0dfd2f782153560c2ffd0eb8743045",
      "tree": "d5e6a868ec1b33c2fd8e91287c9e8eed6e3b47a0",
      "parents": [
        "d52c532df7c7c481bf6e482c37f4e0ee02618fce"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Feb 26 13:07:42 2018 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Mar 27 13:27:20 2018 -0700"
      },
      "message": "Work on issue #74404949: Screen state usage API\n\nAdd usage stats tracking of screen time.  There are two new\nevents, one for when the device is an interactive state, the\nother for when it is non-interactive.  Also add a whole new\nusage stats API for retrieving aggregated data that is associated\nwith general events, not particular packages.  In this case\nit allows you to find the time the device spent interactive\nand non-interactive and the count of the transitions in to\neach of those states.\n\nBug: 74404949\nTest: atest CtsUsageStatsTestCases:UsageStatsTest\\#testInteractiveEvents\n\nChange-Id: Ibe6d55e2aecb0c8519b1358644378ec5c7a4250d\n"
    },
    {
      "commit": "80c4be88e0c108e3cb4c528c078c53fde6676af3",
      "tree": "98527f7e4a0bb6f8bb8b1de8e305f0607a929cc2",
      "parents": [
        "294ad785342f0eaaf41c59d819edd559450a4a2a"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 26 10:54:04 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Mar 26 15:56:20 2018 -0700"
      },
      "message": "Add slice pinning to list of reasons for usage\n\nBug: 73455786\nTest: atest AppStandbyControllerTests\nChange-Id: Ia7980a8396a47d88959051329409f0ff39e81977\n"
    },
    {
      "commit": "7f53c7bc975041cb3ba1be7a1e33d305abaf1ddf",
      "tree": "4d4f2285f0d538135ab36bac454f293941fe2d59",
      "parents": [
        "6da53af9c55ba2231cd2f47c7dffb150f2c22a89"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Mar 25 21:55:50 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Mar 25 21:55:50 2018 -0700"
      },
      "message": "Shorter bucket elevation for system_interaction and sync_adapter\n\nDon\u0027t keep the app in ACTIVE for too long after an indirect\nuse of the app. Also don\u0027t mark as used, so bucketing algorithm\ncan override quickly.\n\nBug: 74340258\nTest: atest AppStandbyControllerTests\nChange-Id: I3b8014873aaf881de07304b64039da211a63a525\n"
    },
    {
      "commit": "8808edb063650f4497e6a31f8fbe4d2bcbdf227f",
      "tree": "44042aaed8444b4f2810c777b4587d9e967da716",
      "parents": [
        "ea4f21f62e18580d2829810abcc1a3e6d2d1676a",
        "bc813eb26e3027856114a26312e36e4bad86bd86"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Mar 23 19:13:22 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 23 19:13:22 2018 +0000"
      },
      "message": "Merge \"Provide app launch count in UsageStats\" into pi-dev"
    },
    {
      "commit": "bc813eb26e3027856114a26312e36e4bad86bd86",
      "tree": "a19f4c10792816809309bf64bba518ea676f7372",
      "parents": [
        "9531b70cae96e8e59d38bd91d636cbe084574f3a"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Mar 20 19:37:46 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 22 13:51:57 2018 -0700"
      },
      "message": "Provide app launch count in UsageStats\n\nThis counts the number of times the app was launched from outside\nthe app and ignores intra-app activity transitions.\n\nIntroduce a new permission for registering to observe app usage.\n\nFixes a bug where Settings couldn\u0027t force the app into another\nbucket if it was recently launched.\n\nBug: 74335821\nFixes: 76100712\nTest: Manual test using Settings\nTest: UsageStatsTest to verify permission change\nChange-Id: Ibd343c1cfa37089a3ac6fc30ba3194e21a9be499\n"
    },
    {
      "commit": "1918ef7569e90c70246e535478b26732b82d92d3",
      "tree": "1f0e89e4d85c2d5f531fff7fc74d2b9471171215",
      "parents": [
        "fc4ae7ec0eea2351afcff2a08a21247e10533c79"
      ],
      "author": {
        "name": "Jason Monk",
        "email": "jmonk@google.com",
        "time": "Wed Mar 14 09:20:39 2018 -0400"
      },
      "committer": {
        "name": "Jason Monk",
        "email": "jmonk@google.com",
        "time": "Wed Mar 21 10:03:29 2018 -0400"
      },
      "message": "UsageEvents for slices pinning\n\nTest: atest frameworks/base/services/tests/servicestests\nBug: 73455786\nChange-Id: I6a37f5525c29d3f47aa37e262c8834840309ba44\n"
    },
    {
      "commit": "a8bb9d255fe933938dab8c7ceec94b4fcd984847",
      "tree": "950caeba2669c34bd777b6a937f5ff4ff6595c24",
      "parents": [
        "3b0450d4a96b8caa24bb2ae0a8d29bfc1ff4e7d3",
        "62ec27e97f68513c5637383fb72de469c5e903c1"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 16 22:40:46 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 16 22:40:46 2018 +0000"
      },
      "message": "Merge \"App Time Limits API in UsageStats\" into pi-dev"
    },
    {
      "commit": "62ec27e97f68513c5637383fb72de469c5e903c1",
      "tree": "ce5ceae6a6e2939674f9a6633acdb84a81e19bf5",
      "parents": [
        "200de1cc86c38bc34317c500f808be40baf341d0"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Mar 11 14:42:06 2018 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Mar 15 17:07:28 2018 -0700"
      },
      "message": "App Time Limits API in UsageStats\n\nAllow setting groups of apps to control usage time limits on.\nApplies only to activity time in the foreground.\n\nUpdated UsageStatsTest app to be able to add an observer for\na 30 second timeout across multiple comma separated package\nnames.\n\nBug: 74335821\nTest: atest FrameworksServicesTests:AppTimeLimitControllerTests\n      Install and run frameworks/base/tests/UsageStatsTest\n\nChange-Id: I677c30b4f211f7acf72c9766df3d8c1ac56a4b4e\n"
    },
    {
      "commit": "1fac86e6cdb3ca9d0b3b3ba8515d81a3b4e00b9b",
      "tree": "8e6618948223402d100891bcaf92357594bd7e2d",
      "parents": [
        "4b306e5e23b2554b61329e8e0f41bb2dfa97d4a5"
      ],
      "author": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Wed Mar 07 08:30:37 2018 -0500"
      },
      "committer": {
        "name": "Julia Reynolds",
        "email": "juliacr@google.com",
        "time": "Mon Mar 12 09:34:48 2018 -0400"
      },
      "message": "Log interruptive notifications\n\nFirst pass only logs audibly interruptive notfications; visually\ninterruptive notifications will be added in a future CL\n\nTest: runtest systemui-notification, cts\nBug: 74318867\nChange-Id: I604495bd4af9741ec52c38e4faa17cc87e2a522b\n"
    },
    {
      "commit": "1088cbb7701ba2de8fd4e01e3d9bfb7c343346e6",
      "tree": "ba9c6caa18d278b66d3c8f708c4a6307b13a8c74",
      "parents": [
        "3dc91c1426ef4da53ea85039c047d25b2de4ef47"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Thu Mar 01 12:45:16 2018 -0800"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Fri Mar 09 20:12:47 2018 +0000"
      },
      "message": "Add -c option for dumpsys usagestats\n\nBug: 73657997\nTest: manual (adb shel dumpsys usagestats -c)\nChange-Id: If37006290b0b8a63e1b51fb9b035ba6a62f7a9b3\n"
    },
    {
      "commit": "c0fe0626f6b9676ef1fde7c2f9a42f3922683b5d",
      "tree": "f7c0f24ceea01c4736be6292c8593526ab73d850",
      "parents": [
        "b93a014cc8ba9c87ad84bafcb4013d2bd83eedc5",
        "217ccda8ac8f38137882a0f9fefeac8e53dc4ed6"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Sat Mar 03 01:32:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 03 01:32:21 2018 +0000"
      },
      "message": "Merge \"An api to query usage events for the caller\""
    },
    {
      "commit": "78646e58a30d2230f26e04fe4ec21939dd3301a3",
      "tree": "bf1e9f148283461e244e4865be5160417a544ae3",
      "parents": [
        "964f01b32843a6eada3d9bb5af45b6c5dc2544d5"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Tue Feb 27 15:54:27 2018 -0800"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Tue Feb 27 17:46:26 2018 -0800"
      },
      "message": "Add null check in usagestats dump\n\n(also adjust the time stamp for easier parsing)\n\nChange-Id: I708c9fe68aa85b4897e95cca6b9d53522eef0d29\nFixes: 73960916\nTest: manual\n"
    },
    {
      "commit": "217ccda8ac8f38137882a0f9fefeac8e53dc4ed6",
      "tree": "b2fd48091b0f0252d6063bd77016e3642986e9e1",
      "parents": [
        "f3537c2054e4bfd627dd488e25564e07fb4009da"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Fri Feb 23 17:57:12 2018 -0800"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Tue Feb 27 15:45:05 2018 -0800"
      },
      "message": "An api to query usage events for the caller\n\nAdded an api which apps can query to find out about their own usage\nevents. This is useful in understanding the apps historical bucket\nchanges.\n\nTest: atest android.app.usage.cts.UsageStatsTest#testQueryEventsForSelf\n\nFixes: 71906213\nChange-Id: Ie6144cfe515fd0748a317835918a9d8cf1aea007\n"
    },
    {
      "commit": "2b2988946293c89761607e05eb1eb53e1e1c80f8",
      "tree": "60ae3776ca93b8e361b9d2da2da3552c6ecb080d",
      "parents": [
        "60cebe02a0c39351b26215062403548c53b178a9",
        "743e0ad61a050c521bad72063d5b388003f4d07a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Feb 26 18:49:54 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 26 18:49:54 2018 +0000"
      },
      "message": "Merge \"No heavy processing on UID observer thread\""
    },
    {
      "commit": "119be9a5fc4033eba570ec94b94862401ee84570",
      "tree": "e7740f03ebb24af98bd058784447ac1bf8ab8e6f",
      "parents": [
        "a8e26b2e16f1bf800072194055ade22e1f1df4be"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Feb 18 22:23:00 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 23 10:45:39 2018 -0800"
      },
      "message": "Improve reporting of bucketing reason\n\nKeep track of main and sub reason for bucket change\n\nBug: 73178753\nTest: atest AppIdleHistoryTests\nChange-Id: I4936281ac06046bb5ffed9f3306efa24c7fd47ab\n"
    },
    {
      "commit": "23ea41c4e76599cc63c051edaec52e3dc7f2d372",
      "tree": "0317fb8f3118e09603e0f410170d34bf7095aa4f",
      "parents": [
        "dced4bb3c31f967875bbc034a713cc58cc882775",
        "868bde247c76e309232b1e3e6a873bde725acc22"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 23 09:28:33 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 23 09:28:33 2018 +0000"
      },
      "message": "Merge \"Using ParceledListSlice for {get|set}AppStandbyBuckets\""
    },
    {
      "commit": "868bde247c76e309232b1e3e6a873bde725acc22",
      "tree": "591fe40c637c4947d352188d55e5a63607f824ab",
      "parents": [
        "5e589b7fec1fa27d1179d28daa6daa9f4f4eab1f"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Tue Feb 20 20:59:52 2018 -0800"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Wed Feb 21 21:23:09 2018 -0800"
      },
      "message": "Using ParceledListSlice for {get|set}AppStandbyBuckets\n\nUsageStats.getAppStandbyBuckets and setAppStandbyBuckets deal with large\nmaps of packages to buckets which may exceed the IPC transaction size\nlimit. Using ParceledListSlice to send and receive data across binder.\n\nTest: atest android.app.usage.cts.UsageStatsTest#testGetAppStandbyBuckets\nAnd manually:\nadb shell am get-standby-bucket --user 0\nadb shell am set-standby-bucket \u003cpackage1\u003e active \u003cpackage2\u003e rare ...\nLocally, added protectionLevel development to permission\nCHANGE_APP_IDLE_STATE and tested setAppStandbyBuckets with a test app.\n\nBug: 70890569\nChange-Id: Ic1fb0465137d1b830d3ad1fbf3ac8698a409c623\n"
    },
    {
      "commit": "06e4940237e51d04aa196dc74016a6f9b35e38c3",
      "tree": "2fca1a8b93cf685b840384a84f490b166322fde9",
      "parents": [
        "9cdcb3e380bae61a411526b006423d91aa2e3066"
      ],
      "author": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Tue Feb 20 23:39:09 2018 -0800"
      },
      "committer": {
        "name": "Michael Wachenschwanz",
        "email": "mwachens@google.com",
        "time": "Wed Feb 21 12:24:15 2018 -0800"
      },
      "message": "Dump last 24 hours of UsageStats events\n\nOn calling dumpsys usagestats, the last 24 hours of events will be\ndumped rather than the events since the arbitrary time point\n(also increase timestamp granularity to seconds)\n\nFixes: 73657997\nTest: manual (adb shell dumpsys usagestats)\n\nChange-Id: I92f1f17b4119d2023ed9b81e0610c19f62503bf0\n"
    },
    {
      "commit": "743e0ad61a050c521bad72063d5b388003f4d07a",
      "tree": "8173ac4bb5225620a7fd214c7f005f9de4e5832e",
      "parents": [
        "62b618eef6749283382b325264daeddb31294a2f"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 20 16:01:11 2018 -0800"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue Feb 20 16:01:11 2018 -0800"
      },
      "message": "No heavy processing on UID observer thread\n\nBug: 73505782\nTest: boot and launch several apps.\nChange-Id: I7dd5809fac2c4e38c0ff73e6015150a7a0b9a608\n"
    },
    {
      "commit": "bbbad9cc0fc1def37bcec1fc8626e3c0ab6e3491",
      "tree": "bc2928a393f1244b0db50623ab4e76e7ba451b8e",
      "parents": [
        "d591904d1d95707e7de97f2805b666f9ce32ec53"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Feb 10 16:46:38 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 14 09:26:46 2018 -0800"
      },
      "message": "Cascading timeouts for App Standby\n\nFixes overlapping of predictions, strong usage events\nand mild usage events which have forced durations.\n\nHaving separate timeouts for ACTIVE and WORKING_SET\nand moving between them when necessary prevents\ngetting stuck in the wrong state (higher) for longer\nthan necessary.\n\nBug: 73294677\nTest: atest FrameworksServicesTests:AppStandbyControllerTests\nChange-Id: I35530e62cffe2c86945b5da64a41704f807708ce\n"
    },
    {
      "commit": "f9420f4dddebc89db11ee04d1ef22e9944fc1396",
      "tree": "5d83c511d5566e186658b1fc55b7a6d62ea9a31d",
      "parents": [
        "1c12690fc69c7d95e1c8a003e075a8074f8b58ba",
        "7ec89411677867e9a215ca8a3ace6585fe426d82"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 08 22:16:09 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 08 22:16:09 2018 +0000"
      },
      "message": "Merge \"Track notification clicked events in UsageStats\""
    },
    {
      "commit": "7ec89411677867e9a215ca8a3ace6585fe426d82",
      "tree": "44753d523b70b07c13be6ab3a08f08c63387ff55",
      "parents": [
        "af5a66bf822e68e9803cddecb81c180b99bd5861"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Feb 07 08:48:49 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Feb 08 09:09:31 2018 -0800"
      },
      "message": "Track notification clicked events in UsageStats\n\nExpose some of the new events as SystemApi.\n\nMake some of the timeouts configurable in AppStandbyController.\n\nMake NOTIFICATION_SEEN event upgrade app to WORKING_SET for\n12 hours. This is not perfect though and will require further\ntweaking as it may result in the app becoming elevated higher\nfor much longer than necessary.\n\nChange-Id: I62401cfabddf51b6f80b9bba8a358285b8cf9a51\nFixes: 72741441\nFixes: 72067231\nFixes: 72537465\nFixes: 72536347\nTest: atest CtsUsageStatsTestCases:UsageStatsTests\n"
    },
    {
      "commit": "bbab23ff97688f33c5cc41d5d0e134c0d9f58c6c",
      "tree": "495d74767efc00b7aebc085751ee61af1636bff6",
      "parents": [
        "b5cc72055fd3f4a8476f1b00931bc96ba366a859"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 07 15:34:27 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Feb 08 02:19:42 2018 -0800"
      },
      "message": "Frameworks: Annotate trivial @GuardedBy in services/ misc\n\nAdd @GuardedBy for simple functions that require a single lock\nand are named XYZLocked.\n\nDerived by errorprone.\n\nBug: 73000847\nTest: m\nTest: m javac-check-framework RUN_ERROR_PRONE\u003dtrue\nChange-Id: Id1d9fbe5018250e3b9d1466fc5f670d5ad902fa3\n"
    },
    {
      "commit": "80db94c52620c01af6b44b57d545504e89867bba",
      "tree": "261ca97b32e7f6e95376df097c524bd42e0268b7",
      "parents": [
        "af5a66bf822e68e9803cddecb81c180b99bd5861"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Feb 05 14:17:39 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Feb 06 00:29:30 2018 +0000"
      },
      "message": "Fix crash in GmsCore due to permission issue\n\nRelax the permission requirement for UsageStats\nAPI querying inactive state of apps across users.\n\nBug: 72953020\nFixes: 72942083\nTest: Manual -- create a secondary user\nChange-Id: I9c5e12f718d9f424c99aa72dd70470c4b083c13f\n"
    },
    {
      "commit": "777b1537c2d8afbd3a422bb64d6f5f2f101dc1c3",
      "tree": "ba9e6d33956f47cd990b2deb846942a21551d9a2",
      "parents": [
        "faf852539a2dc11e10520f223f3c29c47cf3008d"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Jan 28 23:20:07 2018 +0000"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Feb 02 15:46:31 2018 +0000"
      },
      "message": "Fix an issue with apps EXEMPTED after OTA\n\nAfter an OTA, all system apps were being\npushed into EXEMPTED for 4 hours because\nof a race with the boot phase resulting in\nit appearing as if app standby was disabled.\n\nAnother bug in updating the state out of EXEMPTED\nwas preventing checkIdleStates() from fixing\nthe issue soon after.\n\nBug: 72835804\nTest: Manual:\n        Manually delete /data/system/usagestats/version\n        Reboot\n        Verify that correct apps are EXEMPTED\n      Automated:\n        atest FrameworksServicesTests:AppStandbyControllerTests\nChange-Id: Ib53f0c45e5c2e2456442f6782ad5ca9b9d0c3d72\n"
    },
    {
      "commit": "55c84552cc0cab34f13084c219a0f4c4487e512b",
      "tree": "beb11da071fc5850e5c8cd07ecba579ef19d037b",
      "parents": [
        "52f8309a4075a3f3ef7c7a07bcebec0164968dbe",
        "d117b293aec3fc2de0f6508cb8975af4dbd6a6a3"
      ],
      "author": {
        "name": "Chris Tate",
        "email": "ctate@android.com",
        "time": "Fri Jan 26 18:21:04 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 26 18:21:04 2018 +0000"
      },
      "message": "Merge \"Let the job scheduler know when the user interacts with an app\""
    },
    {
      "commit": "c7904e1d055d64ce363b4623a6a1f0777fe848fa",
      "tree": "775409e6b0adf3cca68d596de9f379d6b86bf0a7",
      "parents": [
        "ce8f9b9fab8bb7c6864205b32cf1787d58dadf10",
        "bfc4bf5febe3d97d3f51206c9ead2f7d2b05e700"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 24 04:33:46 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 04:33:46 2018 +0000"
      },
      "message": "Merge \"Keep history of standby bucket changes.\""
    },
    {
      "commit": "bfc4bf5febe3d97d3f51206c9ead2f7d2b05e700",
      "tree": "c91cc2b74f98b59ec61610b88272b765d46f0e17",
      "parents": [
        "3733b8ed7b085bb7fa3459af831d7d8f00013e2b"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 19 06:55:08 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jan 23 18:34:34 2018 -0800"
      },
      "message": "Keep history of standby bucket changes.\n\nPush standby bucket changes into UsageStats as events.\nDon\u0027t use the event for aggregation.\n\nBug: 63527785\nTest: atest CtsUsageStatsTestCases:UsageStatsTest\nChange-Id: Icd152b21935e3ef73aaa1a62f09574e51ce921bd\n"
    },
    {
      "commit": "c53c47fa3a2fa0650ffe6c3f7eba8008004f6aa4",
      "tree": "ebaf0f046134bc8f8e525ce59452b45f6d7d3cb8",
      "parents": [
        "357ae21266b57018d243f14bf7fda97c98de4ec9"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Jan 16 12:01:00 2018 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Fri Jan 19 11:12:44 2018 -0800"
      },
      "message": "Load admin data in DPMS asynchronously during boot.\n\nBug: 71902030\nBug: 71710099\nTest: atest services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java\nTest: Ran boot tests - go/run-boottest\nTest: manual\nChange-Id: I34970c6f41877c7e3ece4843d47831374d455067\n"
    },
    {
      "commit": "d117b293aec3fc2de0f6508cb8975af4dbd6a6a3",
      "tree": "cf38eebcb1de17b0f25c2a5330ddaa20f88078b7",
      "parents": [
        "182b3f994b0849ca590d75d03a24361ede89ba0c"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jan 05 17:32:36 2018 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jan 16 17:37:04 2018 -0800"
      },
      "message": "Let the job scheduler know when the user interacts with an app\n\nBug: 70297451\nTest: manual\nChange-Id: I095d86f17a589d8b6531fb71018cfd4276989ba4\n"
    },
    {
      "commit": "101c353a7d039b352cbfe9146807f072ff340469",
      "tree": "5ec0d522bfc17e9878ee347476dcfcfb4a74cc4d",
      "parents": [
        "d5a6d9b8dd7f099ae208749f6b2fa8f1c9be8624"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Jan 08 16:28:42 2018 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Wed Jan 10 17:19:55 2018 -0800"
      },
      "message": "Update DPMS to push active admins info to UsageStatsService.\n\nBug: 71710099\nTest: atest services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java\nTest: atest services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerTest.java\nChange-Id: Ia46be9008470b0228978306b9992560fc4f2c586\n"
    },
    {
      "commit": "a0ee7c35e2f91ce5777c8bcab19efc5bb3e7ad6e",
      "tree": "676ce95525fa8110e2f06fd0881254f99a4ef164",
      "parents": [
        "aacb53a34df76fbbe2526809c79d3b5d7ca583de",
        "53f06eae611ffa559f80d9efaddba17544eb7819"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jan 10 00:05:22 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 10 00:05:22 2018 +0000"
      },
      "message": "Merge \"Track last job run time\""
    },
    {
      "commit": "d6582078765cfc0fc11ccc319a935a9843f741f7",
      "tree": "bde4b30978a90df1cd48ef5ba16471ea48dc9506",
      "parents": [
        "29a2bd7a19ca55110f7f8b008780ca881a799c14",
        "55fe0d06869926481c1d32f1d6b4e497868c63c4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Tue Jan 09 05:40:53 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 09 05:40:53 2018 +0000"
      },
      "message": "Merge \"Wire up reserved blocks presence for tests.\""
    },
    {
      "commit": "a2fe748e7a24fcb631daa3e228564eca81f8a670",
      "tree": "d9ad3b8c382b90e8311b5d1b578008e79190c556",
      "parents": [
        "aa31e19ae1189f022b22d7de17e93e10516f80da",
        "761d3ff06c74a4da50a395f6269ea8b81d60f51f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 09 03:19:03 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 09 03:19:03 2018 +0000"
      },
      "message": "Merge \"Duration format for tunable settings\""
    },
    {
      "commit": "53f06eae611ffa559f80d9efaddba17544eb7819",
      "tree": "93a915c73e996fe288196dea0972acaed1843bf6",
      "parents": [
        "dc4cb146315240441fc8d9c05fe8dd63370a7c57"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Jan 05 17:53:46 2018 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jan 08 17:22:15 2018 -0800"
      },
      "message": "Track last job run time\n\nJobScheduler can store the last job run time\nfor an app and use it later to help with\nthrottling.\n\nAlso, allow reporting a usage for a temporary\nperiod. This will put the app in ACTIVE for a\nminimum specified period during which timeouts\nand predictions will not be able to reduce the\nbucket level.\n\nBug: 71536897\nTest: atest AppIdleHistoryTests\n      atest AppStandbyControllerTests\nChange-Id: I2985f7f3766671f15ea641972346c69875f17946\n"
    },
    {
      "commit": "55fe0d06869926481c1d32f1d6b4e497868c63c4",
      "tree": "7a0e25109f76b1b714f49d4990250de8e0896795",
      "parents": [
        "edfc6f98e5570c814819c1f478637608a322d5d0"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 08 10:41:47 2018 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jan 08 10:41:50 2018 -0700"
      },
      "message": "Wire up reserved blocks presence for tests.\n\nThis is how we tell CTS if the device has reserved blocks set aside\nfor system critical services.\n\nTest: builds, boots\nBug: 62024591\nChange-Id: Ib970554235b49346f9e9df7d3d1646beb168cd92\n"
    },
    {
      "commit": "9f2dc0527e755743c3b13fb27f68e5c425276106",
      "tree": "a76196384ffea549b929dd8e0610f342b502591c",
      "parents": [
        "61823f3a23750d672947ba7b5bb6dd4f1ff5503f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jan 07 16:47:31 2018 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jan 07 19:06:01 2018 -0700"
      },
      "message": "Add DataUnit to clarify SI-vs-IEC units.\n\nMirrors the design of TimeUnit and ChronoUnit which many developers\nare already familiar with, making it easy to pick up and use.\n\nYes, this is an enum.\n\nBug: 70915728\nTest: bit FrameworksCoreTests:android.util.DataUnitTest\nChange-Id: Id0cfdac5c81ed89c3c9ece23c964acba4a4f8471\n"
    },
    {
      "commit": "761d3ff06c74a4da50a395f6269ea8b81d60f51f",
      "tree": "3fe7479d47f3bfa71dd6f8a1ed53edcc8ac35f15",
      "parents": [
        "dc4cb146315240441fc8d9c05fe8dd63370a7c57"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Dec 14 17:50:03 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Jan 04 09:37:13 2018 -0800"
      },
      "message": "Duration format for tunable settings\n\nFor JobScheduler, DeviceIdle and AppStandby constants, allow\nusing a more compact format than milliseconds,\nwhich are a PITA to calculate.\n\nSo instead of 18640000000... whatever, you can\nuse PT2H (for 2 hours), or P2D (for 2 days), etc.\nUses Duration.parse() to do the parsing. See Duration\nfor format.\n\nTest: adb shell settings put global app_standby_constants\n      screen_thresholds\u003d0/PT2H/PT12H/P2D\nFixes: 71554131\nChange-Id: I5141854ec7df6de266725a67f1f3e2a6e0b4c1c1\n"
    },
    {
      "commit": "e51ffaa6aca7d8413bc51e9d472ca664d23869e5",
      "tree": "bb7c58607e7a171d7f103f0f5c65c8e299e01690",
      "parents": [
        "a400718ab5a75b698dfbb947b1373520335a89c2",
        "838ea24493ea5fff38b08ac5219587ea035b48e1"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Tue Dec 19 17:46:06 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 19 17:46:06 2017 +0000"
      },
      "message": "Merge \"Fix usagestats DUMP OF SERVICE\""
    },
    {
      "commit": "838ea24493ea5fff38b08ac5219587ea035b48e1",
      "tree": "474ad2de04804bce33e10e028f0919b437427e52",
      "parents": [
        "5826e469e9d03eaa5511d413733edde0a1b99048"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Tue Dec 19 11:48:43 2017 +0000"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Tue Dec 19 15:23:43 2017 +0000"
      },
      "message": "Fix usagestats DUMP OF SERVICE\n\nDUMP OF SERVICE Usagestats was empty in bugreports\nbecause an unexpected -a argument was being passed.\nadb shell pm dump \u003cpackage\u003e had a similar issue with --packages\n\nChange-Id: Ic67c723b8edc74ec7c9c48582b08896ca3430a4a\nFix: 70777338\nTest: adb shell pm dump \u003cpackage\u003e and bugreports now contain usage stats\n"
    },
    {
      "commit": "172612c8919638ad57ac0b67f2acec3e144fc26c",
      "tree": "41d7918f46cfd351169359448c03d93a3fd23901",
      "parents": [
        "a629e4c393e5ac52c07598a5d3b4ed120115c97d"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Dec 15 10:51:53 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Dec 16 07:13:53 2017 -0800"
      },
      "message": "Global app standby flag\n\nDisable app standby features if app_standby_enabled\nis set to 0. This allows for UI and experiments to\ncontrol the feature.\n\nBug: 70655630\nTest: adb shell settings put global app_standby_enabled 0\n      adb shell dumpsys usagestats\n      adb shell am get-standby-bucket \u003cpackagename\u003e\n\nChange-Id: Id6c62b078e52040767100f2997832cc586bb0806\n"
    },
    {
      "commit": "9388519d5e66a84485f8951242b9756e586a85ac",
      "tree": "70d7c04f839fa63994d09754bcf57677adf8c91d",
      "parents": [
        "ff38f236b55b51a9f8e03b909f4791ccca329c48"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Dec 13 11:52:10 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Dec 14 20:21:32 2017 +0000"
      },
      "message": "Don\u0027t allow certain bucket overrides\n\nDon\u0027t allow EXEMPT to be overridden\nDifferentiate between shell and other callers who set\nbuckets.\nDon\u0027t allow forced to be modified by bucketeer.\nDon\u0027t allow bucketeer to modify NEVER bucket.\n\nFix a locking issue in listeners list. Don\u0027t use\nthe primary lock when calling out to listeners.\n\nFixes: 70622791\nFixes: 70622338\n\nTest: atest FrameworksServicesTests:AppIdleHistoryTests\n      atest FrameworksServicesTests:AppStandbyControllerTests\n      atest CtsAppUsageHostTestCases\nChange-Id: I22309478b947d6461235f5a77e08c7be86309e4b\n"
    },
    {
      "commit": "6cff5c2840f6968b79c714d326c1c26ab66ef030",
      "tree": "d271371f2bc6859da4317f0a6bea1b2979d109a8",
      "parents": [
        "6f6026d3bb840e0139b3b449217ac646cc5b8c38",
        "28c660f11ac10c5dfe16fbdc7bb04ee82328e4d4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Wed Dec 13 16:53:55 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 13 16:53:55 2017 +0000"
      },
      "message": "Merge \"API that reports first SDK level of the device.\""
    },
    {
      "commit": "28c660f11ac10c5dfe16fbdc7bb04ee82328e4d4",
      "tree": "73eb379d7f766577bd96ce7ad115ea08753b1bdf",
      "parents": [
        "27674aedc0c2fe6f013ea0d6722bdb0d17fc7c57"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 12 13:51:32 2017 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 12 14:11:14 2017 -0700"
      },
      "message": "API that reports first SDK level of the device.\n\nThis is different from SDK_INT, which can change due to OTA\nsoftware updates.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsOsTestCases -t android.os.cts.BuildTest\nBug: 69270887\nChange-Id: Ic3f4b22b25dc08f3fbdbdf7622c953323447ea01\n"
    },
    {
      "commit": "e878931414e46eaaf1e10e227cd50bcf5435dee8",
      "tree": "4777c6da7c5cee534f688c07b48dc52eb906e6d6",
      "parents": [
        "b8f2728a787db8dc551345b464705f049d970502"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Dec 10 14:34:26 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Dec 10 18:52:20 2017 -0800"
      },
      "message": "Allow multiple standby buckets to be set in one IPC\n\nSystemApi to pass a map of packagename to bucket mapping.\nReduces the number of IPC calls to be made by bucketing\nML app.\n\nBug: 63527785\nTest: atest CtsAppUsageHostTestCases\nChange-Id: I4172fd30cc310092a1f182ae26267de9148009b7\n"
    },
    {
      "commit": "e2fa77ab4d1f98893d97e1dc02ebb9e11466fb14",
      "tree": "676d2e6d58c45ef0d30cd6bc79e035105302d5d6",
      "parents": [
        "7ccbd94cbfdd5b52f75970918ba9837651dae06d",
        "bd7b302f91f225f2dd2367cc37db9d2b75aec521"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 08 23:27:11 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 08 23:27:11 2017 +0000"
      },
      "message": "Merge \"Timeout app predictions after 12 hours\""
    },
    {
      "commit": "bd7b302f91f225f2dd2367cc37db9d2b75aec521",
      "tree": "388348bed6fc68563d7fbcf21bcfe7fc3ca20d5f",
      "parents": [
        "42a24dcce51c429b66b91abfa8c6c92f2af5ed94"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Dec 06 17:40:25 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Dec 08 13:46:17 2017 -0800"
      },
      "message": "Timeout app predictions after 12 hours\n\nIgnore predicted bucket if it\u0027s been too long since the\nlast update, and use internal timeout logic to set\nstandby buckets.\n\nKeep track of last predicted time and persist it.\n\nBug: 70219058\nTest: atest FrameworksServicesTests:AppStandbyControllerTests\n\nChange-Id: Ib2992201d204b92fdd4a0a00754d81e7bbfc292f\n"
    },
    {
      "commit": "e0b2ee52d2f274a2d46b2e6695e42d2764c39fa7",
      "tree": "b108622b940a6d004b50b2768f6738fecbb4dfb8",
      "parents": [
        "23627fbff5f13629e997a00b006a1ebdc423e735"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Dec 05 09:46:29 2017 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Dec 08 21:00:15 2017 +0000"
      },
      "message": "Convert services to Android.bp\n\nSee build/soong/README.md for more information.\n\nTest: m checkbuild\nExempt-From-Owner-Approval: trivial conversion\nChange-Id: I417409281c928ea667d937090d2a0d9d72a449a2\n"
    },
    {
      "commit": "1b09d2ff8b6cb50fe72605fbdee4d20655a6905d",
      "tree": "a87648a9442d543e1a775d2ee52a9ef3d1b84f10",
      "parents": [
        "3a1e51ab804d27ab8a486e17af7f3ea0e6d8fb43",
        "bb6b748ea3651844ef9b7e56009411a778998714"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Dec 08 13:16:43 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 08 13:16:43 2017 +0000"
      },
      "message": "Merge \"Increase history of UsageEvents\""
    },
    {
      "commit": "5a8cc72386f436329bfdda71a7a1148140d1e271",
      "tree": "e0660537e07ffbd582d55f12f63ef00a277d8de0",
      "parents": [
        "1229bed274ab778a1dc0e7c964bb126566812c4d"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Dec 06 10:26:10 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Dec 06 10:26:10 2017 -0800"
      },
      "message": "Fix CTS tests failing due to job throttling\n\nInstrumentation package should be immediately marked as active so\nthat the jobs aren\u0027t throttled.\n\nAlso, make sure special apps\u0027 buckets are correctly initialized.\n\nFixes: 68900608\nFixes: 69799327\nFixes: 69793822\nFixes: 69788489\n\nTest: atest CtsNetSecPolicyUsesCleartextTrafficTrueTestCases\n      atest FrameworksServicesTests:AppIdleHistoryTests\n      atest FrameworksServicesTests:AppStandbyControllerTests\n      atest CtsNetSecPolicyUsesCleartextTrafficUnspecifiedTestCases\n      atest CtsNetSecConfigDownloadManagerTestCases\n      atest CtsNetSecPolicyUsesCleartextTrafficFalseTestCases\n      cts-tradefed run cts-dev -m CtsAppUsageHostTestCases\n      cts-tradefed run cts-dev -m CtsHostsideNetworkTests\n      gts-tradefed run gts-dev -m GtsUsageStatsTestCases\n\nChange-Id: Ic880b6f5ed1fdb7912613e882ccf7b2d4e388159\n"
    },
    {
      "commit": "22af6c7e9822f68ce28388ef4638d1ed8dcc0ad0",
      "tree": "b0eaa7f3e9d4f4511e96b791ad81552788c939cb",
      "parents": [
        "f156c04912d9b50e9d735daae9ea209721eaa371"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Dec 03 20:12:15 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Dec 03 20:16:15 2017 -0800"
      },
      "message": "Allow privileged apps to query standby state\n\nOnly check for INTERACT_ACROSS_USERS in getAppStandbyBucket()\n\nBug: 70126098\nTest: gts-tradefed run gts-dev -m GtsUsageStatsTestCases\nChange-Id: I6c3f69ff56d8513f84c7d91162567d17c06980c3\n"
    },
    {
      "commit": "afbccb7d37647f6da61ebcc52a598c7a9f54bc3f",
      "tree": "845f2eb7b6a7be5a61e85d7cdc0b65af9bcfe54c",
      "parents": [
        "577e40090282638cb2df5ba4738f4ba1030a2c53"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Nov 27 10:44:24 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Dec 01 14:00:37 2017 -0800"
      },
      "message": "Expose App Standby APIs for apps and system\n\nAllow apps to query their own standby bucket.\nAllow privileged apps with PACKAGE_USAGE_STATS permission to\nquery apps.\nAllow privileged apps with CHANGE_APP_IDLE_STATE to set the\nstandby state for apps, but not for themselves.\nRemoved AppStandby class and moved constants into UsageStatsManager.\n\nBug: 63527785\nTest: cts-tradefed run cts-dev -m CtsAppUsageHostTestCases\nChange-Id: I3c1c20f6ecb6d54e248233696039286b243d663c\n"
    },
    {
      "commit": "bb6b748ea3651844ef9b7e56009411a778998714",
      "tree": "028e6e81bea499fd191814bf04c4cd4d5ff121ef",
      "parents": [
        "9cc5b4f0076c844e3058f2144f6944b6e17ba6be"
      ],
      "author": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Dec 01 13:11:34 2017 +0000"
      },
      "committer": {
        "name": "Esteban Talavera",
        "email": "etalavera@google.com",
        "time": "Fri Dec 01 13:11:34 2017 +0000"
      },
      "message": "Increase history of UsageEvents\n\nWe need over 8 days of UsageEvents in order to capture weekly\npatterns in our app usage models\n\nChange-Id: I8e1149b82cfbaedae4d19bbbfaeffa989bfd54e7\nFix: 69244223\nTest: It builds\n"
    },
    {
      "commit": "a732f014c5743af0dbb7eb2e63474a7147576f9d",
      "tree": "c478bd770bfdb2b2ef402deeb2417b37bbabdd99",
      "parents": [
        "560d5f851e9f77bb03c6e9faa21183fb69d35614"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Oct 26 17:26:53 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 22 22:07:06 2017 +0000"
      },
      "message": "The job scheduler now backs off jobs based on standby bucketing\n\nThe default parameters here translate to roughly this rate limiting:\n\n  ACTIVE:   run jobs whenever\n  WORKING:  ~ hourly\n  FREQUENT: ~ every 6 hours\n  RARE:     ~ daily\n\nBug: 63527785\nTest: cts \u0026 manual (WIP)\n      atest CtsJobSchedulerTestCases\nChange-Id: I58f8e53e5bdf40601823e5a10a9f2383a6f67ae5\n"
    },
    {
      "commit": "a0ef1ca2b2e3750c9c1d24797411b4527d45865e",
      "tree": "e33280bb8555e41b54966aa1511c3638c44e85be",
      "parents": [
        "0afe0849656ebc854821fcf287577347f8123679"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Nov 20 09:43:56 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Nov 20 09:43:56 2017 -0800"
      },
      "message": "Cleanup old idle variables\n\nSwitch to using the new bucket thresholds and\nremove the previous idle thresholds.\n\nBug: 63527785\nTest: atest AppStandbyControllerTests\n      atest AppIdleHistoryTests\n\nChange-Id: Ica3fd10fe172faa5b4e712b08273b77357fdae14\n"
    },
    {
      "commit": "301e94a9ef8bebfbe76ba92ef4756969c65a0073",
      "tree": "ea87b2a21bbd9e80f4c0f4cba3c0563bed97c119",
      "parents": [
        "efe5f129ad2f0c8dbdbadf68a219169e423413cf"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Nov 17 16:35:44 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Nov 17 16:35:44 2017 -0800"
      },
      "message": "Shorter thresholds for app standby\n\nStart off with slightly more aggressive timeouts to\nswitch between buckets. 12Hrs, 24Hrs and 48Hrs.\n\nBug: 63527785\nTest: atest AppStandbyControllerTests\nChange-Id: I4aa0cc38ef91538192eda0f48dd3840217aa49c4\n"
    },
    {
      "commit": "803eab6906427517b22c7fd42b21dbf57456eb72",
      "tree": "e47f1174a660b5c0960c78258295a048a0ba8f9f",
      "parents": [
        "c8e3c7c816a4d9de42579df11d9302e117070ea1"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Nov 09 17:47:04 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Nov 16 09:15:03 2017 -0800"
      },
      "message": "Add a new usage event type for seen notification\n\nOn a notification becoming visible, NOTIFICATION_SEEN event is\ndispatched. This will only bump up the app\u0027s bucket to WORKING_SET and\nno higher. Same goes for sync adapters associated with a content\nprovider. Only move them to WORKING_SET.\n\nUpdated NotificationManagerService to report event to usagestats on\nvisibility changes.\n\nBug: 63527785\nTest: runtest -x\nframeworks/base/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java\natest NotificationManagerServiceTest\nChange-Id: I5b132e1fc1f70e2126473b43b9b1979fbc523b85\n"
    },
    {
      "commit": "84cd7b7a9e5ad6a604c075bc620f6bd9ab6b1486",
      "tree": "390384df5fe3d1c8dd90f2b829eb90026cfa2afe",
      "parents": [
        "da71266f6ca9511a928ced0492277e4c0ae48df2"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Nov 07 13:59:37 2017 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Nov 08 15:06:10 2017 -0800"
      },
      "message": "Allow standby timeouts to occur after usage\n\nAnd inform listeners when the bucket changes, not just when\ngoing in and out of RARE bucket.\nAvoid redundant callbacks when informing listeners.\n\nBug: 63527785\nTest: runtest -x\nframeworks/base/services/tests/servicestests/src/com/android/server/usage/AppStandbyControllerTests.java\nChange-Id: Icd98d59f597147fbf8ea4bf44edf4b3b3d5c8e14\n"
    },
    {
      "commit": "c81983a0c3d7bfe8384dbf48909f4bcf300e36d2",
      "tree": "5bde759ec82eb5330ff0f79f277d137b9efb1be4",
      "parents": [
        "8664028d4f0642ea44c83f87a85184813ac39972"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 20 16:16:32 2017 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Oct 25 12:19:26 2017 -0700"
      },
      "message": "Start removing remaining pm code to package manager\n\nEverything is now moved out of the pm command except for\nthe various install commands.  I am going to hold of on\nthose since they require doing some resolution with the\ncurrent implementations in the package manager to make\nsure they match and behave identically to the implementations\ncurrently in the pm command.  But other than that, everything\nin pm is now just redirecting over to \"cmd package\".\n\nAlso fix up some of the dumpsys output of a few other sevices\nwhen asking to print the data for a particular package, so\nthe \"pm dump\" command gives a little more sane result.\n\nTest: manual\n\nChange-Id: I139e06e560203b72243d7eea9543c2240db0f8f8\n"
    },
    {
      "commit": "17fffee4908f11038ba9cc5a672d15cb25be3dfe",
      "tree": "4777a31456f8d8d30b0a8d59bef0ada54145dffe",
      "parents": [
        "22910ada9abbda61346d3a28470be2176364f77e"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Sep 29 13:17:43 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Oct 24 19:24:15 2017 -0700"
      },
      "message": "App Bucketing for Standby\n\nManage the standby bucket in AppStandbyController\n\nDefault implementation of bucketing based on simple timeout:\n ACTIVE, if recently used\n 12 hrs to move to WORKING_SET\n 2 days to move to FREQUENT\n 7 days to move to RARE\n (subject to change)\n\nRARE bucket equates to the old \"idle\" or \"inactive\" state for\nan app.\n\nBug: 63527785\nTest: AppStandbyControllerTests.java\nChange-Id: I970d7afcdf47c31a9413da8fd4852066a13676a2\n"
    },
    {
      "commit": "7e528f3fda504959843a2addcecf9a286865b11f",
      "tree": "850990d59022ff8419dbdd0b424ab867fd47d9ef",
      "parents": [
        "52c0e916dda8f5580319288367c5449de21f56a3"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Oct 05 16:06:16 2017 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Thu Oct 05 17:30:37 2017 -0700"
      },
      "message": "Refactor App Standby code\n\nMove the App Standby code out of UsageStatsService into\nan AppStandbyController class. This doesn\u0027t change any\nbehavior. Also, it doesn\u0027t change the entry points, which\nare still in UsageStatsManager. The binder APIs are still\nin UsageStatsService and are forwarded to\nAppStandbyController.\n\nThis change is in preparation for switching to app standby\nbuckets instead of a boolean state.\n\nBug: 63527785\nTest: adb shell dumpsys usagestats\n      adb shell am set-inactive \u003cpackagename\u003e true\n      // Ensure state changes are persisted\n\nChange-Id: Ic94357bdc891d1defae37bb29d533b6153a09967\n"
    },
    {
      "commit": "3e99f654fbf56d3b7ef7130658b8ef83d2d0cdbd",
      "tree": "63e6e0c675b054bd7cf99db591802ee2ffd62e66",
      "parents": [
        "f490ae3e5961a8dfdbd779f0c764b7d44d9d1221"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 05 16:33:56 2017 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 10 17:24:20 2017 +0100"
      },
      "message": "Fix issue #34471029: Don\u0027t allow audio use from background apps.\n\nThis is becoming a common pattern (keeping track of which processes\nare cached and not allowing them to do stuff in that state), so I\nam turning this in to a general mechanism for monitoring this state\nthrough the activity manager\u0027s IUidObserver.  Now we can just have\nAudoService implement its own IUidObserver to get this state and\nupdate which uids it is blocking.\n\nThis required making some changes to uid change reports so that\nthe integer is now a bit mask instead of an enumerations, but that\nis what it was already turning in to anyway.  (This gets rid of\nthe crazy GONE_IDLE constant that we\u0027d needed to add before because\nit wasn\u0027t a bit mask).\n\nEventually the power manager should be changed to be told about\nthese changes to cached state instead of listening to every proc\nstate change, but we\u0027ll do that later, it is more disruption than\nI want to take for now.  However, while working on this, I noticed\nthat the power manager had regressed in the cached uids it would\nactually block, because the activity manager was no longer telling\nit about all uids that are idle.  (I think this happened when I had\nto change the default idle state of UidRecord to true.)  So I am\nadding a bit of new code to keep track of what idle state we last\nreported to observers, to make sure we tell it about newly created\nuids that are idle but have never actually become active.\n\nTest: runtest -c com.android.server.am.ActivityManagerServiceTest frameworks-services\n\nChange-Id: I7bfd46bacadd4cab2a69f40e6e52afb4e67b456a\n"
    },
    {
      "commit": "c8b29ac6f0340bd0c3c9eb388c4be2d446de9a59",
      "tree": "b2ff4065fd6ba77a11b38fd8a6e8a36bf32028a4",
      "parents": [
        "4f5adb9801e08f34731cfe22be3c197a5dd09ba4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 06 11:29:06 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 06 11:29:10 2017 -0600"
      },
      "message": "Change storage migration to use quota APIs.\n\nNew quota APIs are much faster than trying to measure manually, and\nremoving this last user of calculateDirectorySize() means we can\nremove it once and for all.\n\nBug: 36056324\nTest: builds, boots\nChange-Id: Ibdf1ee4e8885680e106df6a9269b6309ddc61af8\n"
    },
    {
      "commit": "35e46d297255363a20ccde62af3c58c4ce3c13c5",
      "tree": "6a082247418b5cc02d46e4a351a4d3f930ce779c",
      "parents": [
        "9620595965bc7ffb74518eee19bbd63702c57121"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jun 09 10:01:20 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 12 14:27:23 2017 -0600"
      },
      "message": "Active camera apps can defy reserved cache space.\n\nWe normally prevent apps from allocating into the \"reserved\" cache\nspace, but this change makes an exception for an active camera app,\nsince the user is probably trying to capture an important memory.\n\nThis change only lets the active camera app clear up to half of the\nreserved space, since we don\u0027t want to completely destroy the\nexperience of all other apps.\n\nTest: manual app before/during/after active camera session\nBug: 38267830\nChange-Id: Ie9e63884fb2638ca881e10b894629eea84601648\n"
    },
    {
      "commit": "ddff807b762a8a455287abc97aea8f97b98fb104",
      "tree": "9f5dc24ea84eb9d64e575d7210b99718ff318fd3",
      "parents": [
        "1399d3abf51265915a3d6cbd2b04be2a3142c609"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 26 13:10:46 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 30 22:17:23 2017 -0600"
      },
      "message": "Consistent \"low storage\" behavior.\n\nWhen answering the question \"how much space is free\", use the same\nlogic for Settings UI and StorageManager.getAllocatableBytes().  That\nis, the reported free space is usable bytes plus any cached data the\nsystem is willing to delete automatically.\n\nThis does *not* include any reserved cache space, since we don\u0027t want\nabusive apps to penalize other well-behaved apps that are storing\ntheir data in cache locations.  Callers freeing cached data need to\nnow explicitly request defiance of the reserved cache space.  (Most\ncallers are already doing this by using FLAG_ALLOCATE_AGGRESSIVE.)\n\nRewrite the core logic of DeviceStorageMonitorService to understand\nthis new \"reserved\" cache space, and to be easier to understand.  It\nalso now handles cached data on adopted storage volumes, which had\nbeen ignored until now.  Also fix bug where we had skipped \"low\"\nbroadcasts when the device skipped directly from/to \"full\" state.\n\nBug: 38008706\nTest: cts-tradefed run commandAndExit cts-dev -m CtsJobSchedulerTestCases -t android.jobscheduler.cts.StorageConstraintTest\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest\nChange-Id: Icbdcf3b52775f7ada1ceaeff2f96094c8d8052f9\n"
    },
    {
      "commit": "1de10d6602df4ab2a7769b69a57e472920ba7fee",
      "tree": "7ef92c3671854a29d2f1764a3f184ef6599ea1f4",
      "parents": [
        "131eaa7865edeead0373e339c51ce65b5f51cd15",
        "3051caac52729c8c059eb538805f4d274a9945a5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 24 20:38:51 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 24 20:38:56 2017 +0000"
      },
      "message": "Merge \"System installed launcher can see instant apps\" into oc-dev"
    },
    {
      "commit": "3051caac52729c8c059eb538805f4d274a9945a5",
      "tree": "71398994494ba033969da2a70e05aab29b121b87",
      "parents": [
        "d7a2c1c23bdd6547aa864e325792cd89ffde0c5e"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue May 23 15:54:18 2017 -0700"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed May 24 07:34:55 2017 -0700"
      },
      "message": "System installed launcher can see instant apps\n\nChange-Id: I97f791b61f9b4f7ed33305345bf3d92394b40ae4\nFixes: 38202759\nTest: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.EphemeralTest\nTest: Manual. Create sample app that replaces the launcher to test ability to see ephemeral apps.\n"
    },
    {
      "commit": "303e4157ebe90d5ea51a98df2658930f6504b06e",
      "tree": "47f75106a8969a915d4709551c4e857bb57286df",
      "parents": [
        "a239ed1c79a55f5dc650a528a21fb696752c8049"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 19 10:31:52 2017 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Fri May 19 10:31:52 2017 -0700"
      },
      "message": "Fix NPE in usage stats manager (recent regression)\n\nChange-Id: I305bb64b11c9240dc0df5d7b08a9a970660157c8\nFix: 38430177\nTest: build and boot\n"
    },
    {
      "commit": "ad623015a119efe9b63f594af9c4703f40a0c27b",
      "tree": "c155e3ae4f41ce3f5798ad3117925c2e83195487",
      "parents": [
        "28f0fd7a2d5b26a728d72984a8cf69ac0fcc4400"
      ],
      "author": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Mon May 15 09:29:34 2017 -0700"
      },
      "committer": {
        "name": "Makoto Onuki",
        "email": "omakoto@google.com",
        "time": "Tue May 16 12:33:43 2017 -0700"
      },
      "message": "Restrict access to instant app data in usage stats\n\n- Events are obfuscated based on whether the app was instant or not at\nthe time each event was logged.\n\n- UsageStats are obfuscated based on whether each app is instant or\nnot at the moment.\n\nBug 38202133\nTest: Manual test using UsageStatsTest and instant apps\n\nChange-Id: I3c74309196b88d010d317cb0dd6749bf4624e876\n"
    },
    {
      "commit": "06823d4c2e0fc7d64bff5d3e155d690302e0ab80",
      "tree": "d36c58bd4302fbb1526c5982e0570a7b022d2034",
      "parents": [
        "00487cf9368df10aab90c5a194667ce56acb49e4"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 09 16:55:29 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue May 09 16:55:31 2017 -0600"
      },
      "message": "Use \"real\" free space; refresh on large changes.\n\nFor volumes where the OS manages cached data, use the \"free space\" as\nreported by StorageStatsManager, which is the same value shown in\nthe Settings app and other UI elements.\n\nAlso, when the storage space changes significantly, invalidate anyone\nwho was holding a cached \"free space\" value.\n\nTest: builds, boots\nBug: 38146029\nChange-Id: I4b3a484a8bf32cd137a83f1ea441beca6dc6719a\n"
    },
    {
      "commit": "5a421ad0ef23675ca3140d3ae9d578c4b8baf0e8",
      "tree": "3582993360df94a9c046f6fdb7b3e0e838f87524",
      "parents": [
        "4566cb575620763d0233abf0eeca405677a5341b",
        "2abd66c4ffdb7905128b1ca245d4ccb97cbda1c8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Sun May 07 17:40:27 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun May 07 17:40:32 2017 +0000"
      },
      "message": "Merge \"Defeat @Nullable String[] with empty list.\" into oc-dev"
    },
    {
      "commit": "2abd66c4ffdb7905128b1ca245d4ccb97cbda1c8",
      "tree": "70d0080c5a63db021d96c416a0a94b49052abd8b",
      "parents": [
        "e44125cd3a5fc25306285bdfcacc00459e01307b"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 15:26:13 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 05 15:26:25 2017 -0600"
      },
      "message": "Defeat @Nullable String[] with empty list.\n\nTest: builds, boots\nBug: 37577123\nChange-Id: I6bf1af565398c30aecc0939a23846c0f85c13ffe\n"
    }
  ],
  "next": "fd65813157e4dd7fa9f0b7c5dd4c8f536cc6316a"
}
