)]}'
{
  "log": [
    {
      "commit": "d3178c4ed52358009d51518551325b5b0c84de67",
      "tree": "1cac18f4f609d5e6516ce0dd01ca01f2ea3cc88f",
      "parents": [
        "b32fecd6e0dad258542e702144a04b3cadea6bd3"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Sat Jun 10 17:31:57 2017 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Sun Jun 11 21:14:53 2017 -0700"
      },
      "message": "Prevent ConcurrentModificationException in updateAllRecognitions\n\nWhen invoking updateAllRecognitions, if a callback binder was determined\nto have died, an internal function would go and remove it from\nmModelDataMap. However, updateAllRecognitions was iterating over this\nmap, so it would then explode. By first making a copy of the model datas\nbefore iterating over all of them, this problem is avoided.\n\n(As part of trying to figure out what was happening, also updated all\nthe method names that implicitly assumed they had a lock, and double\nchecked that everything with a Locked suffix is actually locked)\n\nBug: 62487479\nTest: Use the sound trigger test app to load and start two models, force\nkill the app (so the dangling binders hang around), then enable power\nsave (which triggers the call to updateAllRecognitions)\n\nChange-Id: I87b9dfc1b2af5e294050b146737916ccaad882c1\n"
    },
    {
      "commit": "fc3ec4c5e689e4d64f0c24d42a3b4b31ee4621c4",
      "tree": "3014cee75363c645e1b90b332c496cdf67993488",
      "parents": [
        "4e73123c5238000afed9c11ec1d2e52a8114c117"
      ],
      "author": {
        "name": "Winson Chung",
        "email": "winsonc@google.com",
        "time": "Thu Jun 01 15:35:48 2017 -0700"
      },
      "committer": {
        "name": "Winson Chung",
        "email": "winsonc@google.com",
        "time": "Thu Jun 01 22:58:01 2017 +0000"
      },
      "message": "Prevent showing voice session when it is already queued to be hidden.\n\n- It is possible for the session to be requested to be hidden before it\n  gets the message to be shown and completes showing. This leads to an\n  inconsistency where the voice interaction service implementation will be\n  in a different state than the system for the session. Instead, we can\n  cancel any pending show messages, and also clean up the pending show\n  callback list immediately when the session is hidden.\n- Also fixing up some error message codes when starting the assistant\n  activity.\n\nBug: 38379130\nTest: android.server.cts.ActivityManagerAssistantStackTests\nTest: CtsVoiceInteractionTestCases\nTest: CtsAlarmClockTestCases\nChange-Id: I0d0e9c024367a47bda82d6a29ca89e18b7d69527\n"
    },
    {
      "commit": "7a3d9014535381934a705aa6454a83b7f26d3055",
      "tree": "61351b0e53f5bcb4dcd4372630f373839e5c2e79",
      "parents": [
        "fc533da9207a2cfe269d45884dd5e472ceb4754c"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Apr 11 17:19:22 2017 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Tue Apr 25 12:57:38 2017 -0700"
      },
      "message": "Update VIMS internal state when a packge is modified.\n\nWhen the package that contains the current voice interaction service component\nis changed, internal state of VoiceInteractionManagerService needs to\nmodified to correctly reflect that.\n\nBug: 36649034\nTest: manual\nChange-Id: I7e21ac25785b035711affd87f1b04efa717b13c4\n"
    },
    {
      "commit": "9260d568dac8ed9148bd8a6c1c67fb93f6b3f0ff",
      "tree": "2b8fd75c5c61d338716ce842614ea7ee120859e0",
      "parents": [
        "9394a8fc62817a34b85d91c0004c924166952936"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Apr 10 15:32:52 2017 -0700"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Apr 10 15:32:52 2017 -0700"
      },
      "message": "Fix the issue of voice interactor getting reset after reboot.\n\nBug: 35308046\nTest: manual\nChange-Id: I71ca106f1186e3cebc7899eca30f7b7746fe1e6c\n"
    },
    {
      "commit": "fe9a53bc45fd0124a876dc0a49680aaf86641d3e",
      "tree": "56d1ea4b6f0fe98fa628a72f197cefa0fbabcb22",
      "parents": [
        "21a5edcc24cbca1ae3f0855d71737b22ab81ad6d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 31 14:08:23 2017 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 02 22:29:07 2017 -0600"
      },
      "message": "Consistent dump() permission checking.\n\nThis change introduces new methods on DumpUtils that can check if the\ncaller has DUMP and/or PACKAGE_USAGE_STATS access.  It then moves all\nexisting dump() methods to use these checks so that we emit\nconsistent error messages.\n\nTest: cts-tradefed run commandAndExit cts-dev -m CtsSecurityTestCases -t android.security.cts.ServicePermissionsTest\nBug: 32806790\nChange-Id: Iaff6b9506818ee082b1e169c89ebe1001b3bfeca\n"
    },
    {
      "commit": "2411a2c38e6c050f2175eac48b6aaefb94a84be8",
      "tree": "03cf0a696464f3841b714e172db66c7672259c3b",
      "parents": [
        "c79d4388de8cd2de15a077bf840ee03194db1c75"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Mar 22 13:52:50 2017 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Mar 22 21:28:31 2017 -0700"
      },
      "message": "Clean up dead objects when detected in the SoundTriggerHelper\n\nIf an app has died while being connected to the sound trigger helper/the\nbinder goes away, we should stop and unload the model since there\u0027s no\nway to get a handle on it again (without reloading the same UUID at some\npoint).\n\nTest: Force stop the SoundTriggerTestApp while it has a model started,\ntrigger the sound model, then watch it get unloaded when the helper\nnotices that the binder is dead.\n\nChange-Id: Iddfaaa03482d56e71f23e5982d4bd579f386b51d\n"
    },
    {
      "commit": "455e90add22835d0744fc0f5c2feb5fcaf03b28f",
      "tree": "92e62f200c09a60da6134c1fa7dde41e5b045070",
      "parents": [
        "acc9668235027bfde78a31c45421bca5336a454e"
      ],
      "author": {
        "name": "jackqdyulei",
        "email": "jackqdyulei@google.com",
        "time": "Thu Feb 09 15:29:16 2017 -0800"
      },
      "committer": {
        "name": "jackqdyulei",
        "email": "jackqdyulei@google.com",
        "time": "Wed Mar 08 09:20:36 2017 -0800"
      },
      "message": "Add BatterySaverPolicy for power save mode\n\nThe BatterySaverPolicy is designed to consolidate all battery saver\nknobs into a central location. Usually it is consistent to\nmLowPowerModeEnabled unless it gets different data for specific\nservice. By adding these knobs, we can effectively tune the battery\nsaver.\n\nThis cl sets up the framework for BatterySaverPolicy and updates\nfollowing service to get battery saver data from BatterySaverPolicy\n\n1. GnssLocationProvider\n2. VibratorService\n3. WindowManagerService\n4. BackupManagerService\n5. SoundTriggerService\n6. NetworkPolicyManagerService\n\nScreen brightness will come in a following cl.\n\nBug: 34693888\nTest: FrameworksServicesTests\n\nChange-Id: I6b040e93391614b44d136a485faa4a332c396e51\n"
    },
    {
      "commit": "8347163dbb64fb61012c0393163283106a0a351e",
      "tree": "088a29ae6db849cb907bb913b60bf59bf9c11438",
      "parents": [
        "5b12734fb0d1c189ed9ab699bdb1a4d26c6ed8b8"
      ],
      "author": {
        "name": "Winson Chung",
        "email": "winsonc@google.com",
        "time": "Tue Dec 13 11:02:12 2016 -0800"
      },
      "committer": {
        "name": "Winson Chung",
        "email": "winsonc@google.com",
        "time": "Sun Feb 12 14:52:15 2017 -0800"
      },
      "message": "Create a new stack for the assistant activity.\n\n- Add a new stack that is not resized with multiwindow, and\n  appears above the fullscreen and docked stacks, but below\n  the pinned stack\n- Add a method on VoiceInteractionSession to allow the assistant\n  to launch activities into this new fullscreen stack.\n- Also prevent any activities in the assist stack from the\n  fetching of the on screen assist data.\n\nBug: 30999386\nTest: android.server.cts.ActivityManagerAssistantStackTests\n\nChange-Id: I22ab7629b5f758cf1e66d7d1c26648af6bc887c9\n"
    },
    {
      "commit": "dc589ac82b5fe2063f4cfd94c8ae26d43d5420a0",
      "tree": "9021de8b2f115316bfe52185ef0768946e981b45",
      "parents": [
        "8c053ae1f6ffd531fc2b6070094202b59efe3818"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Nov 10 15:30:17 2016 -0800"
      },
      "committer": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Mon Nov 14 11:27:12 2016 -0800"
      },
      "message": "Update usage of ActivityManagerNative.\n\n- Remove references to ActivityManagerProxy.\n- Add isSystemReady to ActivityManager.\n\nBug: 30977067\nTest: cts/hostsidetests/services/activityandwindowmanager/util/run-test android.server.cts\n      adb shell am instrument -e class com.android.server.am.ActivityManagerTest,com.android.server.am.TaskStackChangedListenerTest \\\n          -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner\nChange-Id: I07390b6124fb1515821f5c0b37baf6ae74adc8fa\n"
    },
    {
      "commit": "ac2561e8206ac42921bb6ddbb0a5972fb360e394",
      "tree": "15f2bef8479d20bfda1927a2d55e7634e3c47b42",
      "parents": [
        "87045377c464ed6ec97dc7d4f5c6d8b473cd4ed9"
      ],
      "author": {
        "name": "Wale Ogunwale",
        "email": "ogunwale@google.com",
        "time": "Tue Nov 01 15:43:46 2016 -0700"
      },
      "committer": {
        "name": "Wale Ogunwale",
        "email": "ogunwale@google.com",
        "time": "Wed Nov 02 10:28:45 2016 -0700"
      },
      "message": "Make window token add/remove APIs require displayId\n\nWindow tokens can now only be on one display, so we now require clients\nthat want to add/remove window tokens to specify the display they would\nlike the token to be created on. This simplifies the token handling code\nin WM and will be useful moving forward for clients that want to add\nwindows to external displays.\n\nTest: Existing tests pass\nChange-Id: I6b2d8d58a913b3624f1a9a7bebbb99315613f103\n"
    },
    {
      "commit": "3916c8f033af5ce1636760c9fdd808fc9f0aa0ce",
      "tree": "f1a5ef8cb9c3d881868ddeb50abfb856f11ba8fb",
      "parents": [
        "4e55f8a47ce1a429347464de7aab9aa014f28920",
        "e01d95e593fac83ed7c91926eb33a6dd6e45bcd9"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 27 02:09:45 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 27 02:09:48 2016 +0000"
      },
      "message": "Merge \"Removed temporary workaround for multi-window assist crash.\""
    },
    {
      "commit": "662a134c91307318a36ad1f6693c98c968aaf610",
      "tree": "f0daee0d83ef559e61afcc80311e30536cb594ce",
      "parents": [
        "172829260f61bac8ca5c11fa32026a7bda4f6d8e",
        "5aaca3a6201d8c043122cae836e927d101384b86"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 20 01:30:34 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 20 01:30:38 2016 +0000"
      },
      "message": "Merge \"Synchronized access to mService.\""
    },
    {
      "commit": "e01d95e593fac83ed7c91926eb33a6dd6e45bcd9",
      "tree": "168f0ac7dd3918f3f1997523a1dc2900b376a719",
      "parents": [
        "e1a81fcc654713de56fda8d57d098c595ec88823"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Wed Oct 19 16:16:54 2016 -0700"
      },
      "committer": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Wed Oct 19 16:20:24 2016 -0700"
      },
      "message": "Removed temporary workaround for multi-window assist crash.\n\nBUG: 28348867\nTest: manual\n\nChange-Id: I19b8e4cd06ee5f1a3b5818434da6fafbcb3a0550\n"
    },
    {
      "commit": "5aaca3a6201d8c043122cae836e927d101384b86",
      "tree": "e2b8d6926e9f2d9fb492454b899eea79f39ed04e",
      "parents": [
        "e1a81fcc654713de56fda8d57d098c595ec88823"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Wed Oct 19 15:23:08 2016 -0700"
      },
      "committer": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Wed Oct 19 15:23:08 2016 -0700"
      },
      "message": "Synchronized access to mService.\n\nTest: none\nChange-Id: Ibab1211384c1c579fa24be19821c2784faa22b8c\n"
    },
    {
      "commit": "b587d8d2c8a27e490da56ff529716e2be7e0e4e6",
      "tree": "98a148a2518c7af5e5ae175abf6f749404dcfec6",
      "parents": [
        "28928d8f5817e1f3d35069858c80f02004ccc061",
        "a7f3f1aa917d9e1adf2f24dec57890e7e1b4a1dd"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Oct 19 01:40:52 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Oct 19 01:40:52 2016 +0000"
      },
      "message": "Only purge sound models that violate the new primary key constraint if they don\u0027t contain identical data. am: d5ff116403 am: 519b7837bb\nam: a7f3f1aa91\n\nChange-Id: I5a376cac47bd279ed13116213b2a78ddcdae8eb2\n"
    },
    {
      "commit": "d5ff11640310cfc9edaf55296fc29350a6564068",
      "tree": "8adff5392ace5f71164caf2bef5d45de0e60d906",
      "parents": [
        "52af7e07598b3085fb4c0789c0f4b477c01dcbf7"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Oct 18 15:27:00 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Oct 18 15:36:27 2016 -0700"
      },
      "message": "Only purge sound models that violate the new primary key constraint if\nthey don\u0027t contain identical data.\n\nBug: 32174118\nChange-Id: Ied5e4e852337e5f819c7ded53dd941d79087ce73\n"
    },
    {
      "commit": "4a648f03c92d33fbfb421ecfef7bd3d6cb81a0be",
      "tree": "f527bfb52b2065fc1d8961aa8a5268168acc2c17",
      "parents": [
        "11ca129c2bdd98c3b6b09f1f6d6a979b17588dd4",
        "fb96985d9a9c0256746671fc607df741a032493a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Oct 18 02:22:41 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 18 02:22:44 2016 +0000"
      },
      "message": "Merge \"Fixed typo on service name.\""
    },
    {
      "commit": "fb96985d9a9c0256746671fc607df741a032493a",
      "tree": "5ffd9b5deb8ecdf69ddac302e4f0d1bd5cd73e2f",
      "parents": [
        "e1a81fcc654713de56fda8d57d098c595ec88823"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Mon Oct 17 10:22:36 2016 -0700"
      },
      "committer": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Mon Oct 17 10:22:49 2016 -0700"
      },
      "message": "Fixed typo on service name.\n\nTest: none\n\nChange-Id: Iba9324d0bbd8152594bb92ce66d2b1d1371f559b\n"
    },
    {
      "commit": "5bd5cf75e1d86baa49fb65836d69f294714d7066",
      "tree": "3e6f099749609c8833202b5fab2c4b4988fce8a2",
      "parents": [
        "e422b0b29f9fc61ffca1578503a06b8d924a462a"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Sun Oct 16 16:23:29 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon Oct 17 10:12:04 2016 -0700"
      },
      "message": "Update primary key in VIS sound model database.\n\nThe public API for getting at KeyphraseSoundModels is based on the user,\nlocale, and keyphrase ID. However, the sound model database would allow\nmultiple models to be registered using the same values, as it has a\nprimary key on the model UUID. This can potentially lead to a scenario\nwhere multiple models are enrolled for the same user, and the data that\nis returned when querying models is arbitrary.\n\nV6 of the sound model database now enforces a primary key over the user\nID, locale and keyphrase ID. When inserting a new model with the same\nprimary key, the old model will be removed and the new model will be\nused instead.\n\nWhen upgrading from V5 to V6, if there are any models that would violate\nthe primary key constraint, they are all dropped.\n\nBug: 32174118\nChange-Id: I9597c6a994f01a426625c3be2c53e826f26f5156\n"
    },
    {
      "commit": "e9563659a5976a82c643267cd309fbb705256331",
      "tree": "2b3a698d780aefbfb09ff7b2c36dfd0521c1d797",
      "parents": [
        "6af2db3824194c492b3c97a00fdf85cc5e47e9c1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 18 17:33:41 2016 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 18 17:33:41 2016 -0700"
      },
      "message": "Fix issue #30929080: Default Assist app is set to None...\n\n...on removing the third pary search app\n\nWe weren\u0027t taking into account old style assistants when determining\nwhether something interesting had been removed.\n\nChange-Id: I6b7b09cdf0781622924e10556d678565570dbd05\n"
    },
    {
      "commit": "2335bd67876e5346acef8db2fc2f58fb2adb465e",
      "tree": "37f5b28dc88226ca40181c63ef4f65b88c0ef1b3",
      "parents": [
        "58635e74edd5c5424ae22d72e6326d2ac89983bd"
      ],
      "author": {
        "name": "Adrian Roos",
        "email": "roosa@google.com",
        "time": "Thu Aug 11 15:42:40 2016 -0700"
      },
      "committer": {
        "name": "Adrian Roos",
        "email": "roosa@google.com",
        "time": "Fri Aug 12 12:04:53 2016 -0700"
      },
      "message": "Assist: Allow disabling the disclosure animation\n\nChange-Id: I6e7ed00f066fda7cc268119e7aa4133010aa69c1\nFixes: 30809067\n"
    },
    {
      "commit": "d0a83b89a622eb4b568951113ea627ee8f484a36",
      "tree": "4075b8f75eb51c9b695415c1fd99e15547da6c27",
      "parents": [
        "d71c64f7151ee53139c4b7e27b4051aa64691f1b"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Jul 19 18:56:15 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Jul 20 14:43:07 2016 -0700"
      },
      "message": "SoundTriggerHelpoer: Send pause events on abort if a model is running.\n\nIf the recognition was aborted due to the service state being set to\nfalse, clients were not made aware that the model had been stopped (but\nwould get a resume event).\n\nBug: 30233664\nChange-Id: I9f663362ff142eadfd5ef727c5f0c941f8e9e89d\n"
    },
    {
      "commit": "d953ab6fdf788352f1524685ad8e608a87c299c0",
      "tree": "21961ea3b1b52fa17b534c55925c84589a3029d4",
      "parents": [
        "2045bdd958a84b150a1db15216debcb46cdcba3a"
      ],
      "author": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Thu Jul 07 11:57:33 2016 -0700"
      },
      "committer": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Thu Jul 07 12:00:03 2016 -0700"
      },
      "message": "Move voice interaction callback list to VoiceInteractionManagerService\n\nBug: 30005941\n\nChange-Id: I23b3bba8b4525068b0f032d5ca908c0f1d181558\n"
    },
    {
      "commit": "2045bdd958a84b150a1db15216debcb46cdcba3a",
      "tree": "5a5cce8bccd17901cf419175ff0f0668f3d4a050",
      "parents": [
        "d58f07f58a8230ee906b9af7d7a89ac876158ab6"
      ],
      "author": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Thu Jul 07 10:22:34 2016 -0700"
      },
      "committer": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Thu Jul 07 10:22:34 2016 -0700"
      },
      "message": "Add a null check for mImpl.\n\nBug: 30005941\nChange-Id: I1212aa66be71b7ee0e990596272a33fa7530770f\n"
    },
    {
      "commit": "d58f07f58a8230ee906b9af7d7a89ac876158ab6",
      "tree": "7e579ca44ea8c34a6e14523d5f5d60d9a0222e4e",
      "parents": [
        "6f8d49db99f08692dd51faed2a0b3e1e70ce8f77",
        "ecb9f3e9b810c6d59d31e8bdeff6cc174d170792"
      ],
      "author": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Wed Jul 06 23:22:09 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 06 23:22:10 2016 +0000"
      },
      "message": "Merge \"Add callbacks to VoiceInteractionManagerService\" into nyc-mr1-dev"
    },
    {
      "commit": "ecb9f3e9b810c6d59d31e8bdeff6cc174d170792",
      "tree": "98f70f4d63ea0cd0ede84e12d5750b6720c6ddd7",
      "parents": [
        "5c6b53223c44b51a2fab2fc7af97893eb6bd596c"
      ],
      "author": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Mon Jun 27 16:01:52 2016 -0700"
      },
      "committer": {
        "name": "Annie Chin",
        "email": "afchin@google.com",
        "time": "Fri Jul 01 13:00:09 2016 -0700"
      },
      "message": "Add callbacks to VoiceInteractionManagerService\n\nBug: 29582254\n\nChange-Id: I548d01bd1c7e261b2d2e0afd606d964e5553124e\n"
    },
    {
      "commit": "174c58187746293144eaa27cf5fc5079db949439",
      "tree": "53456c1146ab1e8db284eba20dc2b0c4f28066a5",
      "parents": [
        "bae1198640f89b0d58db9ca0dfbeb045c174d217"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Jun 14 15:53:14 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Jun 14 15:53:14 2016 -0700"
      },
      "message": "Prevent NPE when updating models without a vendor UUID\n\nChange-Id: If58cd3ddb0a2afd601af3e3868ab4ff500be53a9\n"
    },
    {
      "commit": "6b1a34877da1551c949dd6be9c775f391a76b654",
      "tree": "6957ad57fc2ff5f2ae56c6ade23400ea047f2536",
      "parents": [
        "69a983dfec7140ee6aad5e2ffddc55fe3c5f170d"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Thu Jun 09 19:21:35 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Fri Jun 10 13:52:28 2016 -0700"
      },
      "message": "Store the vendor UUID of a KeyphraseSoundModel in the database\n\nBug:28027337\nChange-Id: Ieb1905812f9655aaf5608e92e160d59ff7b3abd9\n"
    },
    {
      "commit": "b625e19a877dc8e128329d730bc5e9b8e8a2fce9",
      "tree": "1f3df6e5c6bbd131569c5b347138724b8885e5dd",
      "parents": [
        "82c9562d3c35df6569fcb04e7cd999fdc11d5d99"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jun 02 15:25:12 2016 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Jun 02 15:25:15 2016 -0700"
      },
      "message": "Properly set default voice interactor\n\nWe need to figure out the default voice interactor to give\nit default permissions. This happens before the user has\nbeen unlocked and if the voice interactor is not direct\nboot aware we fail to find it, hence no permissions are\ngranted. Now we query the package manager for both direct\nboot aware and unaware components. This is fine as we\ndon\u0027t interact with the assistant until the user is\nunlocked.\n\nbug:28963642\n\nChange-Id: Ide5471fa1798e868c6e3a4b5e87570a5556e2d3f\n"
    },
    {
      "commit": "f5c37eb3b7e7b377aa7adb7fce58006ee06bd450",
      "tree": "39e87cb36c0f2dfd27a870cb2dc87da9ff0b6ec2",
      "parents": [
        "ff8ceadfc8c5f03da57420ad93a698cb0a57fcd9"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon May 23 17:21:08 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon May 23 17:21:08 2016 -0700"
      },
      "message": "Use correct synchronization lock\n\nThis is to fix an incorrect unregister() that was crashing\nthe system server. The only way it could be happening is\nbecause of incorrect locking. So, hopefully this fixes it.\n\nBug: 28813750\nChange-Id: Ie3c47ffa3024a0c533e12db0d2d021df8fc0367a\n"
    },
    {
      "commit": "4f128e4d968b376bb7c3fa209d27b0a30202e604",
      "tree": "f38e03e4a1e0d2df79bd6e22b039e8f11ef50338",
      "parents": [
        "01da140aced14162d6d1bf4a0b2bf33e23b9c2c4"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue May 10 11:44:12 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue May 10 12:17:51 2016 -0700"
      },
      "message": "Fix multi-window assiststructure trashing\n\nWhen multiple activities within the same process\ntry to handle requests for AssistStructure, the\nsingleton mLastAssistStructure tends to trash\nthe old structure when a second window\u0027s request\ncomes in.\n\nThis change passes in a sessionId so that the\ncache is only cleared if the session id changes.\n\nBug: 28348867\nChange-Id: I07efcd933db7e48aefd25a1c95493b71bbcffe4b\n"
    },
    {
      "commit": "02c80c63d44a6b9d10b18d3b12ee10c0d3e32748",
      "tree": "3b746b1a182c0c60e709f2bc3a7174bc3d0e4d2e",
      "parents": [
        "de5a7afc7989ecef051635fdc9ae52a69870c026"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon May 09 12:46:23 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon May 09 12:46:23 2016 -0700"
      },
      "message": "Workaround for assist crash with multiwindow\n\nTemporarily disable multiwindow assist until\nBug: 28348867\nis fixed correctly.\n\nChange-Id: Ia9d0fb5d4412e87aada90e8dcffe829b61221c6c\n"
    },
    {
      "commit": "f967da90528426ff48f75c9109aede2b89a14880",
      "tree": "8612cb3bd1189ba033a0f622a9082a5bbdb0f036",
      "parents": [
        "37f9776ab9aec865fe2ef6544fc84c37e48aca1a"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon May 02 19:22:57 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon May 02 19:22:57 2016 -0700"
      },
      "message": "VIMS should only stop the keyphrases it started.\n\nWhen the VIMS changes the implementation or has its implementation force\nstopped, it used to stop all the recognitions that were in the\nSoundTriggerService (without letting those clients know that they\u0027ve\nbeen stopped). Instead, the VIMS should just unload the keyphrases that\nit loaded, so the other clients are not perturbed.\n\nBug:28518547\nChange-Id: Ia70e8576f43cb8a8521c947ff7fc56f63cfbad54\n"
    },
    {
      "commit": "37f9776ab9aec865fe2ef6544fc84c37e48aca1a",
      "tree": "54e8e5f7f98845118a047fb474e7fac8b3a915c7",
      "parents": [
        "5b7a097b22cae234a7b0e575bda063525989a985"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Fri Apr 29 16:23:45 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon May 02 19:07:33 2016 -0700"
      },
      "message": "Remove the STH tracking if a model has been aborted.\n\nThe STH just needs to log the fact that a model has been stopped when it\nis aborted. We also need to allow models to be stopped even if the\nservice is unavailable.\n\nBug:28474708\nChange-Id: I2d618ae9c7c87311223f7d75b8ded7678252d11c\n"
    },
    {
      "commit": "56056038f750d29af79e47b04b845ec24a47157f",
      "tree": "3106d964c60adbedb2ce9c510e85c08b8f07304c",
      "parents": [
        "8e060d31d14163858e55b412f0490b19b2f44dd1"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Sat Apr 30 11:49:06 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Sat Apr 30 12:06:49 2016 -0700"
      },
      "message": "Keep STH state in sync with HAL\n\nDuring stopAllRecognitions(), the internal state of a sound model was\nbeing cleared (which made it look like the model was being unloaded).\nHowever, the model was still loaded, so subsequent calls to load a \u0027new\u0027\nmodel would break.\n\nBug:28432002\n\nChange-Id: I7090bf52704c6e46e3bb6d495d8fe4b8a1d9e2ad\n"
    },
    {
      "commit": "50bbb66d604feb8652c344ded22ac207a6c272d5",
      "tree": "41d23c3f8b4ec068d37060fb704929ead2010905",
      "parents": [
        "d67a1ca49b138056d53490322ffdadef61d95fec"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 22 15:43:21 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 22 15:43:21 2016 -0700"
      },
      "message": "Fix a regression in assist when context is disabled\n\nFixes: 28293783\n CTS: DisableContextTest#testContextAndScreenshotOff failure\n\nWhen assist context is disabled, make sure that the handleAssist() is\nstill called with no data.\n\nChange-Id: I569dd9f6de503e62fb04c590214df0f2ce3aa4f3\n"
    },
    {
      "commit": "2be4c463bc6411cf6fb9e2a4be0cbb90c485d0de",
      "tree": "62235a63c18c8313f9c783bc3b4f9dea0a614cf0",
      "parents": [
        "c708cf6340e623202e562992e6ef4062ace84cab",
        "42449786211591d097d0fbac72296534c4ab23b6"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 21 00:46:30 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 21 00:46:32 2016 +0000"
      },
      "message": "Merge \"Throw better exception when startVoiceActivity fails\" into nyc-dev"
    },
    {
      "commit": "37f9de996ee36f6d33930f765946dfcb44c23064",
      "tree": "4372b17d628b6691cee77e65f2fc88576bd8abb5",
      "parents": [
        "7ecd7671b75b2ae7c4d20928722b4a1d41bd62ff"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Apr 19 17:04:28 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Apr 19 17:20:51 2016 -0700"
      },
      "message": "Reinitialize voice interaction service on unlock\n\nFixes the incomplete initialization on FBE devices when\nvoice interaction service is not available before unlock.\n\nChange-Id: I397237e4554453d29da643aee59384e289fa3654\nFixes: 28183380\n"
    },
    {
      "commit": "42449786211591d097d0fbac72296534c4ab23b6",
      "tree": "1b3230271ee4175bdc8409377e444f1d13ba4fbd",
      "parents": [
        "8dd32a56f74b896b21895ec75d58fa415caa2c70"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Apr 19 11:45:51 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Apr 19 11:45:51 2016 -0700"
      },
      "message": "Throw better exception when startVoiceActivity fails\n\nIntroduced new error codes so that Instrumentation can\ninclude the correct message in the exception.\n\nBug: 28216630\nChange-Id: I93ee77153cdad11fa208c74c28c6790db27c9753\n"
    },
    {
      "commit": "41e04a4525923815176630a992cdbc6c4c737e6b",
      "tree": "97206ec6d50988a08abbcfa2dca17d1a2c64b508",
      "parents": [
        "de5dbec3aba4b0fcae226a8a512d37b1ee3071a8"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon Apr 18 16:51:08 2016 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Mon Apr 18 17:58:37 2016 -0700"
      },
      "message": "Use .equals() to compare two UUIDs in SoundTriggerHelper, rather than \u003d\u003d\n\nAlso refactors ModelData::clearState to clear a bit more of the state.\n\nBug:28251543\nChange-Id: I18d7ccd90a6a9ee8bc8743d9a92c48f17d87c842\n"
    },
    {
      "commit": "a09b4d2a611a7606e8fc8c73a24bd941b6fc173f",
      "tree": "01aea7a04f295a771c0145c5f78b7bcb66f194fe",
      "parents": [
        "988a20a94b71c7a8fdffcfbfe0b0ee0dd58854cb"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Apr 15 18:32:45 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Apr 18 09:55:59 2016 +0100"
      },
      "message": "Remove unnecessary allocation+unboxing of objects.\n\nTransforming String-\u003eint can be done with 0 allocations\nusing Integer.parseInt.\n\nbug: 28078871\nChange-Id: I8d9f322d7154728849dde61ef282046032858d60\n"
    },
    {
      "commit": "59623ee33742e69c4cb24901e5e81e2aca6496e7",
      "tree": "642ec591e3a4a207cb0a3f160085f351422f9861",
      "parents": [
        "c180d68a079ed02999c6015401c6f99c87005855",
        "fac2515695b9be78743d243b88f92d7687d24772"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Thu Apr 14 19:59:58 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 14 20:00:00 2016 +0000"
      },
      "message": "Merge \"SoundTriggerHelper: Add ability to manage multiple voice models.\" into nyc-dev"
    },
    {
      "commit": "fac2515695b9be78743d243b88f92d7687d24772",
      "tree": "2ed40ce6458ba9754b0b84909b60a282c3186196",
      "parents": [
        "cb6903deacacc18609c2e685b9b12080dca6bf27"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Sun Apr 10 20:35:16 2016 -0700"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Thu Apr 14 12:12:27 2016 -0700"
      },
      "message": "SoundTriggerHelper: Add ability to manage multiple voice models.\n\nThis CL adds the ability in STH to manage multiple voice models indexed by\nkeyphrase ID, which is an integer.\n\nBug: 28104190\nChange-Id: I8e10cca05ed8b4b8414cae7fffc26c132d4b7cbd\n"
    },
    {
      "commit": "e8222e551f8abd2d82ca4f77ddb275e2e509751e",
      "tree": "3e5e3310551590db05eb91b555636a59db739d03",
      "parents": [
        "bdae9296be975758e33579f85eaded83bc30c402"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri Apr 08 15:28:47 2016 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Apr 13 17:12:29 2016 -0700"
      },
      "message": "Multi-window assist callback\n\nIntroducing a new callback in VoiceInteractionSession to\nprovide assist data for additional activities in the\nforeground in a multiwindow setup.\n\nPIP, docked windows and free-form windows (top-most)\nwill be queried for assist data and passed through the\nnew API to the Voice Interaction service.\n\nBug: 27718385\n\nChange-Id: Ib4427c304611b75c2078dcb54f1f7e47ae7d9cfa\n"
    },
    {
      "commit": "78ab7cf301fd102fbfd99c69fd442ed93563a6f1",
      "tree": "0f08136759ea8ca3dcccb4c3cda8ae5a2d25f4cb",
      "parents": [
        "c147dbbca4ea1870bcf88c5889e6a83865ceed54"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Thu Mar 03 22:52:36 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Fri Apr 08 13:22:38 2016 -0700"
      },
      "message": "SoundTriggerHelper re-design.\n\nThis CL redesigns and cleans up a lot of the core logic in STH.\n\nMajor changes include:\n   - Adds Tron logging based counters.\n   - Common startRecognition(), stopRecognition() and updateRecognition()\n     routines that work on both Keyphrase and Generic sound models.\n   - Common streamlined logic for when recognition is aborted, requested and\n     paused due to phone call/power save etc, for both keyphrase and generic\n     models.\n   - Special handling of the singleton nature of keyphrase models in\n     startRecognition().\n   - Moves all Keyphrase model state to the common ModelData structure.\n   - Adds Recognition pause/resume() for generic sound models so that they react\n     to power save, call state, recognition aborted due to service unavailable\n     etc.\nBug: 27972641\n\nChange-Id: I96a7f567d2a4973facec556892a163ca74176bbf\n"
    },
    {
      "commit": "6e3eeadee26fc70bc9c4f08c4f8fa8cdeb9b437e",
      "tree": "3467770d1607631136e653e07264ef54b1ef98da",
      "parents": [
        "70612efe6542968a91db3e2dcc9cc4682d626615",
        "79655ebf7e1ef9dd48e71761fe71f8180d98a49f"
      ],
      "author": {
        "name": "Ryan Bavetta",
        "email": "bavetta@google.com",
        "time": "Wed Mar 09 00:05:31 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 09 00:05:33 2016 +0000"
      },
      "message": "Merge \"Fix unsynchronized access to model hashmap\" into nyc-dev"
    },
    {
      "commit": "79655ebf7e1ef9dd48e71761fe71f8180d98a49f",
      "tree": "6acf552a276c3ccf64de5d1a86858087e3f3fecb",
      "parents": [
        "139bc62117f01d228a6beb18d98755c2fcf60bbf"
      ],
      "author": {
        "name": "Ryan Bavetta",
        "email": "bavetta@google.com",
        "time": "Mon Mar 07 14:34:51 2016 -0800"
      },
      "committer": {
        "name": "Ryan Bavetta",
        "email": "bavetta@google.com",
        "time": "Tue Mar 08 20:14:04 2016 +0000"
      },
      "message": "Fix unsynchronized access to model hashmap\n\nBUG:27529749\nChange-Id: I5b7cd59d8b45858896e6014b8fe95c1cc3c77869\n"
    },
    {
      "commit": "3973b1a75dd8420d51a2cf0dbba0eea174a7dc9e",
      "tree": "a6b623d7a6dc0e14da5de675839e92a17b1188a8",
      "parents": [
        "1e55375c96cadb8ef7aa12008e2be754969e1294"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Feb 01 17:45:31 2016 -0800"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Fri Mar 04 12:21:30 2016 -0800"
      },
      "message": "Turn down the logging a little bit.\n\nChange-Id: I810b9bd58412d2b38d8ce4497baa71047125b92f\n"
    },
    {
      "commit": "f47f173b06e2972bb376da8ff11db3a83c21d10b",
      "tree": "0112c168702444476bf2324a0dc5a09e66af5b57",
      "parents": [
        "a572e4a87b361398a8a8b4ce485fe9226472c81f"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Thu Feb 18 16:16:12 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Wed Feb 24 12:57:01 2016 -0800"
      },
      "message": "Fix AlwaysOnHotwordDetector recognition event bug.\n\nParcelables don\u0027t work well with inheritance. So changed the\nIRecognitionStatusCallback to have onKeyphraseDetected() and\nonGenericSoundTriggerDetected() for those respective events.\n\nMade corresponding changes to AlwaysOnHotwordDetector and SoundTriggerDetector.\n\nBug: 27250528\nChange-Id: Ic08a431e7cc4248c688b05c865348170246de576\n"
    },
    {
      "commit": "2d1de78a4c8fc224329a9622c9326e42a42ddadd",
      "tree": "6c5bc935e1007db0de7ed99ba877fb311e0fe48f",
      "parents": [
        "9a08f827a4f8ac333402e22e5d45228abe8d98fa"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Sun Feb 21 18:10:28 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Mon Feb 22 15:19:44 2016 -0800"
      },
      "message": "Unload logic for generic and keyphrase sound models.\n\n When delete is called, now the STH unloads the corresponding models.\n\nFix bug with keyphrase where a delete call didn\u0027t unload (or stop)\nthe keyphrase model.\n\nBug: 27279380\nChange-Id: Ia34f713d2aecef4102c0f0ccc57b8d2e5febe4bb\n"
    },
    {
      "commit": "933da8150c4a80b94684c97cd6813e5018a73a8d",
      "tree": "83ceb5176e3ec8ca6ded45e555486b9a6ed3e6a4",
      "parents": [
        "24ffe236b1ca89b6088a5488c591ea836ee59e1c"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Thu Feb 18 15:31:54 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Fri Feb 19 15:06:27 2016 -0800"
      },
      "message": "Fix minor bugs:\n\n - Fix issue when multiple starts cause multiple spurious loads to be sent to\n   the native layer.\n - Fix scrolling issue in the native app.\n\nBug: 27222043\nChange-Id: Iddf36a8b68637f478dc23b001ecbde352db3a5f0\n"
    },
    {
      "commit": "3fff7f5634ca788c1c84b6f1b316819ffd4c7cb2",
      "tree": "20eda00acc17334e7efc29a22dd552b6900eee05",
      "parents": [
        "93dfc03ba632590e30604dde31b78628df962eff"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Tue Feb 09 12:15:19 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Wed Feb 17 14:24:03 2016 -0800"
      },
      "message": "SoundTriggerHelper changes for GenericSoundModels.\n\n - Refactoring SoundTriggerHelper to handle generic sound models.\n     - Ability to store multiple models, callback and state information.\n     - Separate out initialization to be done per voice model, per any model\n     and per generic model.\n - Minor change to the API exposed -- removing the Handler from the\n   createSoundTriggerDetector call.\n - Added callback processing for onRecognitionEvent().\n - Added logic for stopAll().\n - Changes to the SoundTriggerTestApp to start/stop recognition.\n     - Multiple models (3).\n     - Ability to start/stop/load/unload individual models.\n\nBug: 22860713\nBug: 27222043\nChange-Id: Ie5d811babb956bead653fb560a43f1e549ed11bd\n"
    },
    {
      "commit": "55a9b0089c12dd657a8dc8551c79cf3e0f25d7e4",
      "tree": "2326112b291b508b9658da7256160e85fa9fd7f0",
      "parents": [
        "a8b42780c24aa6938731aff186f152a7f8829528"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Mon Feb 01 14:06:37 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Mon Feb 01 14:14:06 2016 -0800"
      },
      "message": "Fix moduleProperties in SoundTriggerInternal.\n\nChange-Id: Ie7ea74ca39894f78875768dbc3e504b32f262fe6\n"
    },
    {
      "commit": "c722ec4105f7a4733a22fb9004e784347ee36663",
      "tree": "2461f5dc1a138a73ac84d41c5369362177ff379d",
      "parents": [
        "a0d65dc0db93c63e1a1dd19ca0bfff6f1fef14a9"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Wed Jan 27 13:29:12 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Wed Jan 27 13:37:27 2016 -0800"
      },
      "message": "Fix SoundTriggerModel uses to GenericSoundModel.\n\nChange-Id: I30308b39536864d7b9640367861730e3b1b12129\n"
    },
    {
      "commit": "a772e5fc062c8de48cb9c1d61755110f6b2e189b",
      "tree": "3ee387dd521a8d8d6c3bbc8841542ca07a5078aa",
      "parents": [
        "5c461fc36d79d13b037ef928beb38fdb64e94057"
      ],
      "author": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Mon Jan 25 10:33:11 2016 -0800"
      },
      "committer": {
        "name": "Arunesh Mishra",
        "email": "arunesh@google.com",
        "time": "Wed Jan 27 12:49:20 2016 -0800"
      },
      "message": "SoundTrigger API improvements.\n\nThis CL implements the SoundTrigger API improvements as given in b/22860713. Only the java-level\nparts are implemented in this CL.\n\nKey changes include:\n\n* Addition of a SoundTriggerManager/SoundTriggerDetector system API to manage\n  the sound-trigger based sound models.\n* Addition of a SoundTriggerService service that manages all sound models\n  including voice (keyphrase) and sound-trigger based models.\n* Includes logic to write sound-trigger based models to the database.\n* VoiceInteractionManager service now uses SoundTriggerService instead of\n  SoundTriggerHelper.\n\nBug: 22860713\nChange-Id: I7b5c0ed80702527c4460372efeb5e542d3693a69\n"
    },
    {
      "commit": "0af6fa7015cd9da08bf52c1efb13641d30fd6bd7",
      "tree": "e73062130b029fc260b14728c77a99e37b02d93b",
      "parents": [
        "b9dd234a6c30921a04d16dbd73826eb919537111"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sun Jan 17 15:36:19 2016 -0800"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Jan 23 21:25:50 2016 -0800"
      },
      "message": "Voice Interaction from within an Activity\n\nThis allows an app to show a voice search button\nand invoke a voice interaction session for use\nwithin the activity. Once the activity exits, the\nsession is stopped.\n\nTest application has a new activity that\ndemonstrates it with the test voice interaction\nservice.\n\nThis initial version is functional enough for\nan integration test, with some more tests\nand improvements to come later.\n\nBug: 22791070\nChange-Id: Ib1e5bc8cae1fde40570c999b9cf4bb29efe4916d\n"
    },
    {
      "commit": "6ac42aeed905181b484f97a53db57a17134ef7a8",
      "tree": "abd2878e8fda80799e5eda319d5d378ab918827f",
      "parents": [
        "f26709c7aff4d8a87021f9cb0d09e64fb4f1e5ac"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 08 17:22:10 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Dec 09 11:31:51 2015 -0800"
      },
      "message": "Add a mechanism for broadcasts to control background dispatching.\n\nRight now this is just for the BOOT_COMPLETED broadcast to allow\nall apps to receive it.\n\nAlso clean up the dumpsys of the broadcast queue to not have\nevery little detail of ResolveInfo+ActivityInfo+ApplicationInfo,\nwhich is just not useful and makes reading the broadcast queue\ndebug output a lot harder because of so much noise there is.\n\nAnd rename the package shell query-intent-* commands to a\nshorter query-* form.\n\nChange-Id: I0d01565babb87e68b840c9756a2ea730d699efc7\n"
    },
    {
      "commit": "c83189b5d6ab2fe5f1c38cbe22254f4995379c88",
      "tree": "0b0832088055142c70c6cd1448f3bc239224d49f",
      "parents": [
        "8958c1effb5432a0cbf01acb8c578b616d76401b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Nov 16 18:07:35 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 17 18:17:57 2015 -0800"
      },
      "message": "Fix issue #25673462: Shamu update from MMB29J -\u003e 29K does not complete\n\nThe direct path to the package manager returns null on failure, oops!\n\nChange-Id: Id33ea299b605a59b0703dab200bafb754dd66e78\n"
    },
    {
      "commit": "f9fc6d6cc05595241bc7ced6d4cab97b45f9b901",
      "tree": "0acf0e517de54713340c1ae88085ef9c7f88926e",
      "parents": [
        "cef9219fdad0585ab3948d349f346608a7b9feb3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Nov 08 16:46:05 2015 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Nov 11 10:47:23 2015 -0800"
      },
      "message": "More file-based encryption work.\n\nAdd granular StorageManager APIs for key creation/destruction and\nunlocking/locking.  Start passing through an opaque token as part\nof the unlock command, but leave it empty for now.  We now have a\nseparate \"prepare\" method that sanity checks that user directories\nare correctly setup.\n\nDefine a handful of system properties used for marking devices that\nshould be operating in FBE mode, and if they\u0027re emulating FBE.  Wire\na command to \"sm\", but persisting will come later.\n\nStart using new \"encryptionAware\" flag on apps previously marked with\ncoreApp flag, which were apps running in the legacy CryptKeeper\nmodel.  Small tweaks to handle non-encryptionAware voice interaction\nservices.  Switch PackageManager to consult StorageManager about the\nunlocked state of a user.\n\nBug: 22358539\nChange-Id: Ic2865f9b81c10ea39369c441422f7427a3c3c3d6\n"
    },
    {
      "commit": "d8ef44bc51a4a27cd9a57c880a367636a1377082",
      "tree": "6cc36e1c6cd4354025c7ca4906f2862a59d6ef28",
      "parents": [
        "75765dbe48ed38d7044f458062510a9082750049",
        "b7b5812147aadb159080f14944b7d93a5002fdb7"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Thu Oct 15 01:24:45 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 15 01:24:45 2015 +0000"
      },
      "message": "Merge \"Don\u0027t call StopRecognition when recognition was aborted.\" into mnc-dr-dev"
    },
    {
      "commit": "958b9d2ecc0fabdd1d6d3e99b001f0fa57897da9",
      "tree": "2d57d9ccbc47cda13346917b25c45e2c4acad7b1",
      "parents": [
        "29433f701f6722e1f175dd3b735ed025309907b0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 09 16:09:25 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 09 16:09:25 2015 -0700"
      },
      "message": "Fix issue #24743380: VoiceInteractionManagerService doesn\u0027t use current...\n\n...user for service info\n\nNow it does.\n\nThe actual change is basically one line, passing in the current user\nwhen building the service info.  The rest is more debugging output to\nbe able to see what is going on.\n\nChange-Id: I451884e0780aac6ee92fd2cd520071894afdf586\n"
    },
    {
      "commit": "b7b5812147aadb159080f14944b7d93a5002fdb7",
      "tree": "ffb3ab779ad48734b72563bb5a2414660a684d8b",
      "parents": [
        "714a61cd586c789b18acfd0567cfea2b4ea170dd"
      ],
      "author": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Tue Oct 06 16:48:12 2015 -0700"
      },
      "committer": {
        "name": "Chris Thornton",
        "email": "thorntonc@google.com",
        "time": "Wed Oct 07 11:33:45 2015 -0700"
      },
      "message": "Don\u0027t call StopRecognition when recognition was aborted.\n\nIf recognition has been aborted, then the call to the sound trigger\ndevice stop recognition has already occurred. The sound trigger helper\nwould then try to stop it again, which generates an error code for a\nstop without a corresponding start event.\n\nBUG\u003d24677430\n\nChange-Id: Ibf5d1da1a8eb06b677e428f047905d15fd5cf21f\n"
    },
    {
      "commit": "a35c96eb90f3be5980797b160da3780f2b8f35e6",
      "tree": "181999212059b7f0e248616e38bfb45303db7765",
      "parents": [
        "375c792c176be43720da47db2cfced23613f537c"
      ],
      "author": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Thu Aug 06 14:53:32 2015 -0400"
      },
      "committer": {
        "name": "Chris Wren",
        "email": "cwren@android.com",
        "time": "Thu Aug 06 15:11:42 2015 -0400"
      },
      "message": "add metrics to assistant\n\n  long press\n  screenshot enabled\n  context enabled\n\nBug: 22949579\nChange-Id: Iac178207fa7149cda03c9a817a0d1450e46e1c59\n"
    },
    {
      "commit": "3551a59b277fd4dc924f48116c153a50fb0913eb",
      "tree": "b11c52818f7c6489071ce12d2d6f5ac069ba91cf",
      "parents": [
        "850dd6907f87782474d4bc128c8c0137a9cc85fc",
        "57dd737443a174379eb638450e4888500d8e4a23"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 28 19:52:53 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 28 19:52:53 2015 +0000"
      },
      "message": "Merge \"Work on issue #21516866: Implement voice interaction in ResolverActivity\" into mnc-dev"
    },
    {
      "commit": "57dd737443a174379eb638450e4888500d8e4a23",
      "tree": "ac0750125c23a5e1e932e93407b421b5c397775a",
      "parents": [
        "e827c2525a6b76c130d2b877fbcdcf62b0ce42eb"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 27 18:11:14 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 28 12:52:11 2015 -0700"
      },
      "message": "Work on issue #21516866: Implement voice interaction in ResolverActivity\n\nThe main change here is to not allow the dialog to go in to its \"focus\non the last app the user selected\" when running in voice interaction mode,\ninstead just always giving a simple list.\n\nThis also fixes some problems with cleaning up active commands when\nan activity finishes and not forcing the current session to go away\nwhen the screen is turned off.\n\nAlso added some debug help, having activity print the state of the\nvoice interactor.\n\nChange-Id: Ifebee9c74d78398a730a280bb4970f47789dadf5\n"
    },
    {
      "commit": "1dfa7c6c79a7dfe842c229d7b2efb34608609db1",
      "tree": "1f35e901e0fa86c6745f42cd9e79de7fd6cb430d",
      "parents": [
        "db71828cb7bff983bd758e986b65731cb0a5b2f6"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jul 27 17:48:42 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jul 27 17:49:00 2015 -0700"
      },
      "message": "Don\u0027t use screenshot if structure is disabled (1/2)\n\nBug: 22674955\nChange-Id: I694bb8dbb578da9d729414c7f2947ba4c15651e3\n"
    },
    {
      "commit": "19695d97118d74aa7f54ba09b178e65378825cc0",
      "tree": "6afac03712cde70978fce033815a3e64be8f805d",
      "parents": [
        "e446dcee8f5c24121adbfb7600453e0de1826497"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jul 20 15:51:40 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Tue Jul 21 12:35:16 2015 -0700"
      },
      "message": "Add callback to voice interaction session for lockscreen shown\n\nBug: 22402726\nChange-Id: Iaf83e2f2b0389d74b6ecf480aa91a34443803f7b\n"
    },
    {
      "commit": "17f693520da8977c4a60f5b4be3be035cba7146c",
      "tree": "6e3fcf5d6adb3d72ab5b7c2300f3bb8ebe8bc550",
      "parents": [
        "5aff3b5489262ccff4b6f9e18e0d990ebfe4d7bc"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jul 17 18:04:14 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 20 12:49:10 2015 -0700"
      },
      "message": "Fix issue #22531747: Assist info should declare if user has disabled...\n\n...context and/or screenshot\n\nAdded new API to find out what contextual data has been globally disabled.\n\nAlso updated various documentation to make it clear what kind of contextual\ndata you will get (and when it will be null).\n\nAlso added a new Activity.showAssist() API because...  well, I was already\nin there, it was easy to do, it is safe, and maybe people will build cool\nthings with it.\n\nChange-Id: Ia553d6bcdd098dc0fce4b9237fbfaca9652fc74b\n"
    },
    {
      "commit": "1de1186d28f0ca7c0b6298edfa8ae497e651ba87",
      "tree": "a2fb5d493d38c1e5879a6e37e3e9d2773d8823aa",
      "parents": [
        "1d4247c4cc89c6d62e44ed3115f26579979b44b5"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 15 14:20:51 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 15 14:20:51 2015 -0700"
      },
      "message": "Implement issue #22403908: Enable assistant to refuse context sharing\n\nNew APIs allow the voice interaction service to set/retrieve a filter\nfor which of the show flags are allowed.\n\nChange-Id: I588cbe55afee0548ad3afa22d3a7d3bc43cb54a6\n"
    },
    {
      "commit": "165ce066b701ba0153000f0692bfc7032655d17d",
      "tree": "f557490ccff7c7dd1787fedd40540d6ccd35d5a3",
      "parents": [
        "588932a53e63c0a7ee281dea22559c129b40eb99"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jul 06 16:18:11 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Jul 08 22:26:24 2015 +0000"
      },
      "message": "Fix assist for hardware long-press\n\nActivating the assistant will now route through SysUI, so\nwe have the logic whether to start an activity or to start a voice\ninteraction session in one single place.\n\nBug: 22201770\nChange-Id: I0f4699533aea2a1e595ee25a844434c82f548c01\n"
    },
    {
      "commit": "4e88bcd39918197c78b148afe40a08b6adcace1e",
      "tree": "0a00e7b1ff8269d1fbab4edb591feaf8beb2d5a8",
      "parents": [
        "80abf887a1578669d3167ea83d52a497a64ea491"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 01 13:41:03 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 01 13:41:03 2015 -0700"
      },
      "message": "Fix issue #20672970: Notifications are not dismissed on hot word detection\n\nAdd new VoiceInteractionSession.closeSystemDialogs() API that closes\neverything except the session itself.\n\nChange-Id: If45f1e120d8ca095b6c8055b6485acb5e710820e\n"
    },
    {
      "commit": "a133f0b522f66b45d4105f6d514a8a17120833ad",
      "tree": "99fc0a8bb313339a446e7e6f5ce7deaa7ae1ca0d",
      "parents": [
        "4daf600ee0fb9fbc70f224e92c73e49f44b2bbbb"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Fri Jun 26 16:40:00 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jun 29 17:16:33 2015 -0700"
      },
      "message": "Add setting to disable screenshot separately (1/2)\n\nBug: 22063668\nChange-Id: Ief704004a8ab0a65d34753f9098003ba695726df\n"
    },
    {
      "commit": "b6fb3fe8f4fce5fda82a833247bd99ec435815f1",
      "tree": "ab4f2c6708aabdbfb070daff81442924a51d633a",
      "parents": [
        "1ea7a819315ddaa104099229b2b32f75d08a50be",
        "c200f44c46b7d6ddb104c0f09f2a4c679e218d0b"
      ],
      "author": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Mon Jun 29 10:29:19 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 29 10:29:23 2015 +0000"
      },
      "message": "Merge \"Block assist when screenshots are disabled by policy\" into mnc-dev"
    },
    {
      "commit": "cc3a46ada84b2c27544df0fa3369631c8dc9386e",
      "tree": "5bf0ffd86dc76e5e394f220f05c8539d0b2bb8d1",
      "parents": [
        "450176c52cb42d77764b6cacb7988fa8a6ebfde4"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Thu Jun 25 15:55:43 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Fri Jun 26 21:32:08 2015 +0000"
      },
      "message": "Also reset assist setting when force stopping assist\n\nBug: 20882522\nChange-Id: I57725586ab5ff203b378a1e6d2e5e77a47fd2448\n"
    },
    {
      "commit": "c200f44c46b7d6ddb104c0f09f2a4c679e218d0b",
      "tree": "4ada2d00b4eef76dd92fa546e6fc1c023b362d29",
      "parents": [
        "107cb81f9054a406b94e249c99fd7d64be71faec"
      ],
      "author": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Thu Jun 25 18:20:04 2015 +0100"
      },
      "committer": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Fri Jun 26 11:16:49 2015 +0100"
      },
      "message": "Block assist when screenshots are disabled by policy\n\nWhen a device or profile owner disables screen capture, we also want to\nblock context data being collected for the assist structure.\n\nBug: 21797707\nChange-Id: Ib8716c6dd71d538a027c04e1e907c87e2afa0ac8\n"
    },
    {
      "commit": "1e575a0f32a00fc6a2f9a71fe1d1eb4426c71787",
      "tree": "542a3e7078fcf45f101aba84677a0bf04b1dbde3",
      "parents": [
        "53a33da9af0cb09fb154db7dbd7c25e8a9936a7f",
        "adc1cf46045ae756d3a9ccbccf6b0f894e4c1edd"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Jun 19 22:26:30 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 19 22:26:32 2015 +0000"
      },
      "message": "Merge \"Only grant runtime permissions to special components.\" into mnc-dev"
    },
    {
      "commit": "adc1cf46045ae756d3a9ccbccf6b0f894e4c1edd",
      "tree": "3026471435d1bda05cdac444e2499703a53ff78d",
      "parents": [
        "90b3b93de460ccd1fc1116154f5d61bd2bc93d25"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Mon Jun 15 16:36:24 2015 -0700"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Jun 19 15:17:56 2015 -0700"
      },
      "message": "Only grant runtime permissions to special components.\n\nNow runtime permissions are granted only to components that are\npart of the system or perform special system operations. For\nexmple, the shell UID gets its runtime permissions granted by\ndefault and the default phone app gets the phone permissions\ngranted by default.\n\nbug:21764803\n\nChange-Id: If8b8cadbd1980ffe7a6fc15bbb5f54a425f6e8f9\n"
    },
    {
      "commit": "4f43dc042bf76ec6c3b340b2297dec7c4cdd9098",
      "tree": "871b6946c846090a5fc18f74867b554aff69868c",
      "parents": [
        "cdca13c613d3a8c9c8d7f4c9c29f4cb47d1bdb8d"
      ],
      "author": {
        "name": "Adrian Roos",
        "email": "roosa@google.com",
        "time": "Wed Jun 17 16:43:38 2015 -0700"
      },
      "committer": {
        "name": "Adrian Roos",
        "email": "roosa@google.com",
        "time": "Fri Jun 19 11:33:05 2015 -0700"
      },
      "message": "Assist disclosure\n\nAdd an animation that discloses delivery\nof contextual data to the assist component.\n\nAlso fixes a bug where contextual data was\ndelivered to legacy assist activities even\nthough the user explicitly disabled context.\n\nBug: 21568059\nChange-Id: I27dfaa36e2f677b0d73acfa4730f0f4ea3486919\n"
    },
    {
      "commit": "216f5c33472bf4014cb1951deeb2b7c09f4cae37",
      "tree": "b0a00a0cf1242d97c955876df1bec6e0eda9f931",
      "parents": [
        "ece811dac9a2784b4a2937a4ece75b58d0db9e8b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 16 18:12:31 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 16 18:12:31 2015 -0700"
      },
      "message": "Bring back screenshot API.\n\nChange-Id: Ia6bdfa300398d39119239f6a88c9992673edb3e0\n"
    },
    {
      "commit": "b8004ff3d4be75f2d57ac757cd0b983eed4ae9c0",
      "tree": "ffde2923733fa16f9f7cc808a6eb239778963861",
      "parents": [
        "285cb414eaab8543f6c857357849bfcf24b5974f"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 15 13:35:16 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 15 17:05:04 2015 -0700"
      },
      "message": "Fix issue #21816660 (app standby), work on issue #20882522 (voice interact)\n\nIssue #21816660: More app standby abuse prevention\n\nWe now apply the same rules for deciding when an app has counted\nas active when the screen is on as when the screen is off; the only\nchange this really means is that we don\u0027t immediately count foreground\nservices as making an app active both screen on as well as the\nexisting behavior for screen off.\n\nAlso small fix to how we switch into voice interaction mode that\nguarantees we immediately switch to the screen on state.\n\nIssue #20882522 VI: voice interactor service not restarted\n\nThis fixes some problems in the framework, allowing it to be\ncorrectly restarted (and rolled by to the default voice interactor\nif appropriate).  There are still some problems in system UI that\nleave things broken in some cases.\n\nAlso small fix to how we switch into voice interaction mode that\nguarantees we immediately switch to the screen on state.\n\nChange-Id: Ie4fd098a2f5174a2c94f36d30427fb2a9db3d835\n"
    },
    {
      "commit": "5f531f1f362af3a82cce93ad3ab6785c9224ce48",
      "tree": "32b0b2ee515fd7388513cf4a05bcbc04e8142cb6",
      "parents": [
        "62974816a325fa6ea49d6f9800b962af85a9856a"
      ],
      "author": {
        "name": "Yohei Yukawa",
        "email": "yukawa@google.com",
        "time": "Wed Jun 10 21:15:00 2015 -0700"
      },
      "committer": {
        "name": "Yohei Yukawa",
        "email": "yukawa@google.com",
        "time": "Wed Jun 10 21:15:00 2015 -0700"
      },
      "message": "Make VIMS.SettingsObserver multiuser-aware.\n\nVoiceInteractionManagerService.SettingsObserver has been used\nto monitor per-user settings hence we have to take care of\nmultiuser scenario.\n\nIn the case of VoiceInteractionManagerService, monitoring\nchanges from all the users is OK because event handlers will\nread settins from the current user anyway.\n\nBug: 21766395\nChange-Id: I357fe2a7e2a5645355e696c6fbaae762f54ca029\n"
    },
    {
      "commit": "b835dd7641c60cd5d2b372331ffc19f7165244bd",
      "tree": "39d1237596a807247d3f07a3d4ac945b4e6de357",
      "parents": [
        "53b3bb072bcebd6b7d89a6b06139f458e9240ae9"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon Jun 08 12:28:42 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Tue Jun 09 00:31:12 2015 +0000"
      },
      "message": "Close assist when launching intents from notification shade\n\nBug: 21035363\nChange-Id: I51a6dbe5f0d93aaf81a38d1f1afacaaeaf7732e2\n"
    },
    {
      "commit": "69c6adc96eecfde74ceb83cf9177428dc08b6067",
      "tree": "1c9fb3e63573cf0133ad3680d3cc8a048b0874c0",
      "parents": [
        "133b107d28649ef5a984be0acc06f53e49853b22"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 02 10:52:59 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 02 16:56:41 2015 -0700"
      },
      "message": "More API changes.\n\nStart moving Assist* stuff to android.app.assist.\n\nClean up some more of the VoiceInteractionSession APIs.\n\nClearly document that finish() is not the same as hide(),\nalways call hide() instead, and fix the finish() path to\nalso always do a hide to make sure everything is cleaned\nup correctly.\n\nChange-Id: I962d4069fcb34fe89547a95d395ae1b9fa3b4148\n"
    },
    {
      "commit": "2ee5c368f844bc0f6ce55ff6d5cf3d5604cad5d8",
      "tree": "592fceaa701e4bb71162f6d4da7ccc951fe5caa5",
      "parents": [
        "4573dddcce3f232d2eeb20bfe0e204e15a9416e9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 29 17:58:53 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jun 01 11:42:04 2015 -0700"
      },
      "message": "Update VoiceInteractionService from API review.\n\nThis may even manage to retain compatibility with existing\nbinaries!  (For now.)\n\nChange-Id: I3b1386287a6b9b20b57ac2e2444fd6f458837277\n"
    },
    {
      "commit": "09d57fe9b357495b7bc62be39a8befa00d9d7ffb",
      "tree": "1d71edec334401bb5b978f64267d7d8b496582cb",
      "parents": [
        "da1b398173a94e94c61a0d186c7dc0ef2a7bd060"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed May 27 18:05:52 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 28 11:44:58 2015 -0700"
      },
      "message": "Add new API to set URI on AssistContent.\n\nAlso rework how we transfer AssistContent and AssistStructure\nto the assistant, so they are delivered as completely separate\nobjects rather than the kludgy bundling them in the assist\ndata thing.\n\nChange-Id: Ib40cc3b152bafeb358fd3adec564a7dda3a0dd1d\n"
    },
    {
      "commit": "496767c142fbf8b412237f9ffc2f9af411a3d077",
      "tree": "f9a9a34704256eae7822bbf3e79b54967951bdbd",
      "parents": [
        "7d85ea93e951dc1dd82e7879e0399c56d116f231"
      ],
      "author": {
        "name": "James Cook",
        "email": "jamescook@google.com",
        "time": "Fri May 22 15:52:29 2015 -0700"
      },
      "committer": {
        "name": "James Cook",
        "email": "jamescook@google.com",
        "time": "Fri May 22 16:16:37 2015 -0700"
      },
      "message": "Cancel voice assist session on user switch\n\nEnsure any active voice interaction session is canceled when the\nvoice interaction service is shutdown. This ensures that the UI window\nis closed when a user switches accounts.\n\nBug: 20501283\nChange-Id: I9f3dae5afc4048482f6bedaed36dbae3c0823ebd\n"
    },
    {
      "commit": "d9b0c913f7dd1508b8d4b97d8b82ea23a5a9ca40",
      "tree": "7593f2b6dbca667f5ee9bed9b1a082e0fff593b4",
      "parents": [
        "d3f216d921b44990066d83a3379ee2dcf39fda81",
        "782def772adacaf029d7d9850605923066665424"
      ],
      "author": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Wed May 20 22:22:23 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 20 22:22:23 2015 +0000"
      },
      "message": "am 782def77: am 80cf2210: Add config_forceVoiceInteractionServicePackage to allow a device to config its VoiceInteractionService package and ignore the regular setting.\n\n* commit \u0027782def772adacaf029d7d9850605923066665424\u0027:\n  Add config_forceVoiceInteractionServicePackage to allow a device to config its VoiceInteractionService package and ignore the regular setting.\n"
    },
    {
      "commit": "80cf2210226bc652181abafe606b69ebce63af78",
      "tree": "e58d00e82437d0f0d9185190b27aaf63bdcf4f41",
      "parents": [
        "627f26817f752e0e1beb4185e778edc4501b4aa6"
      ],
      "author": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Tue May 19 15:44:31 2015 -0700"
      },
      "committer": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Wed May 20 13:50:22 2015 -0700"
      },
      "message": "Add config_forceVoiceInteractionServicePackage to allow a device to config its VoiceInteractionService package and ignore the regular setting.\n\nChange-Id: Ic40d90f1a7a9942f5e82080668552239bbed9b03\n"
    },
    {
      "commit": "c6767354c5c2e32648c7404b73878a8ae66dd3c8",
      "tree": "8c76c34ea2b2018629ba5e22c9f5f3744a3e44fb",
      "parents": [
        "2b0196a7d3d6c952c8df17acd9fcdf61ec735b5c",
        "9d91083034654b37461c891308a1d426054170a8"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Tue May 19 04:40:08 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 19 04:40:15 2015 +0000"
      },
      "message": "Merge \"Add setting to disable assist data (1/2)\" into mnc-dev"
    },
    {
      "commit": "9d91083034654b37461c891308a1d426054170a8",
      "tree": "4ff94f232c2820c929db20fff10718dda103b89f",
      "parents": [
        "ae1eac53a77a8f1cd6f1df0f8628cc64439e6a22"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon May 18 17:35:26 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Mon May 18 21:39:05 2015 -0700"
      },
      "message": "Add setting to disable assist data (1/2)\n\nBug: 20944446\nChange-Id: I8050df3177b6d540829c3f0989a4e4b1381c87ec\n"
    },
    {
      "commit": "38a499edf5542fbd0948a02b77ecd84c0d62a846",
      "tree": "b387fdbfe9ad8eaa4b9e22275fe5f011ee527ecd",
      "parents": [
        "d5538758af0f6fea0695d3682e9aad2613ab9192"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 18 17:48:40 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 18 17:48:40 2015 -0700"
      },
      "message": "Remove screenshot APIs.\n\nChange-Id: I1efdb7945bd52f5f43c7103480be3d7dac60018b\n"
    },
    {
      "commit": "03872c075e756b37a80de708cbd8d3d65d50a3a8",
      "tree": "afae62b128ef98fa29d7406ccf9b8db2e29f1f6e",
      "parents": [
        "3199980812473f8008b83e24c87fdeab28a68042"
      ],
      "author": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Thu May 07 18:12:51 2015 -0700"
      },
      "committer": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Fri May 08 01:21:38 2015 +0000"
      },
      "message": "Fixed a bug with svelte and voice assist\n\nHandling the case that no info is around.\nBug: 20925281\n\nChange-Id: Id5a4c4373877909a898c8852891a854eacbc1f6c\n"
    },
    {
      "commit": "e70d6535237d2e6f03adcd0bdc11e45ea714dc97",
      "tree": "342b22ff5e17567563e008f2b684bfcd3ba3f932",
      "parents": [
        "08e474ca24c024be29ed8a593cbd2748abde44ce"
      ],
      "author": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Fri Apr 24 16:46:13 2015 -0700"
      },
      "committer": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Tue May 05 14:52:52 2015 -0700"
      },
      "message": "The voice assist may now be launched above the lockscreen\n\nA possibility was introduced to launch voice assist over\nthe lockscreen using the left keyguard affordance.\n\nChange-Id: Ic4618d24256b65441a50d77d0ef59b0ec99b6ead\n"
    },
    {
      "commit": "5f560d056243638a83a4e7770035fdb66004c9d7",
      "tree": "23e0d0ca97b0784421ddd3f5c7798f351b399a6b",
      "parents": [
        "cf2999aacf45506ff6f9c2876bfd4fd5a99fc394"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Thu Apr 30 11:49:29 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Fri May 01 13:33:38 2015 -0700"
      },
      "message": "Rename supportsAssistGesture to supportsAssist\n\nBug: 20642759\nChange-Id: Idddc786980244cc94570d04fd414540bbad60448\n"
    },
    {
      "commit": "d69e4c1460017062e7c36be55801cb434ad19d97",
      "tree": "fdb11d94a6a8434e7c7667a8496288b599ef81b7",
      "parents": [
        "9ac2718e7dcf274ad41fbb374bedabadc558634b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 24 09:54:54 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 29 17:04:50 2015 -0700"
      },
      "message": "Update use of procstate for services.\n\nNow that we have a separate foreground service proc state\n(above a sleeping top app), update various system services\nto put their bindings into this state when appropriate.\n\nThere are two new bind flags for this -- one that just always\nmakes it a foreground service, another that only does it when\nthe device is awake (useful for things like the wallpaper).\n\nAnd with all of that, tweak network policy manager to only\ninclude apps that are at least foreground service state when\nin power save and device idle modes.  This will allow us to\nfurther reduce the set of apps that have network access\n(in particular not giving access to the current top app when\nthe screen is off), hopefully leading to even better battery\nlife.\n\nChange-Id: I91d85a5c5ed64e856149e9a5d94a634a7925ec7f\n"
    },
    {
      "commit": "4e41767977257a2b949f95a7ecb9b7ab4d1cdf10",
      "tree": "53e56211e870c3f0bbb1d03425885603ee00cc27",
      "parents": [
        "580c30a63353f67433da25ef7b90913300e0372f",
        "0af3af0397cb6a92ea140736e84f7484ce029071"
      ],
      "author": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Mon Apr 27 13:16:18 2015 -0700"
      },
      "committer": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Mon Apr 27 13:16:18 2015 -0700"
      },
      "message": "resolved conflicts for merge of 0af3af03 to mnc-dev\n\nChange-Id: I38f423be6dcef216cf813aa0f747be38f0ad792f\n"
    },
    {
      "commit": "c663d99f007c0faa7b66a569ec4083b82d60ef15",
      "tree": "ffc85e88fdc61f873d9bef7d628bff77d07b3a5b",
      "parents": [
        "d24cc19343073294b3376f825bdc0d54a8d692f1"
      ],
      "author": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Thu Apr 23 15:16:47 2015 -0700"
      },
      "committer": {
        "name": "Cedric Ho",
        "email": "cedricho@google.com",
        "time": "Fri Apr 24 14:38:25 2015 -0700"
      },
      "message": "Enable VoiceInteractionService on watch.\n\nChange-Id: I1d23ba55a98f6d68942cc344b4a564ab62285656\n"
    },
    {
      "commit": "b09f8e29dd7d45b2044c3c75fa40e3b31c5d2cfa",
      "tree": "c7aed94a41d7743872bed3c69a35dd689e7dd01b",
      "parents": [
        "2aad7ee245857a46aae305fefc4e3c1bcdd4a586"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Apr 15 15:11:48 2015 -0700"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Wed Apr 15 15:41:07 2015 -0700"
      },
      "message": "Fix VoiceInteraction permission issues\n\nChange-Id: Id3796066353a6d7799ae983d18e6adc38c8cef52\n"
    },
    {
      "commit": "4870e9d5eba59fb257a87f97f1adf0b734cf48d3",
      "tree": "5162b64339f8b47f807c7b709a832be0c1574676",
      "parents": [
        "7c6a34e64a52b71a6ea00efd2127a4814b5c72a6"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 08 16:55:47 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Apr 09 14:05:17 2015 -0700"
      },
      "message": "More work on device idle mode and other power stuff.\n\nAdd idle mode support to the alarm manager.  Introduce\na new concept of flags associated with alarms to tell\nthe alarm manager how to treat the alarm -- they allow\neverything from the alarm that will bring us out of idle\nmode, to alarms that are allowed when idle or should\nalso bring us out of idle.  The standalone boolean is\nnow also a flag.\n\n(Note there is currently no protection from user space\nsetting the flags however it wants; I will be working\non that in a follow-up change.)\n\nWhen in idle mode, the alarm manager pushes all alarms\nthat shouldn\u0027t execute during that time over to a\nseparate list that is not executed until out of idle.\nTo help with this, I reworked a bit how Alarm objects\nare managed, so that when rebatching or moving between\nlists we don\u0027t have to allocated new objects but can\njust use the same existing instance.\n\nAlso tweaked the sync manager to deal with idle mode,\nwhich currently just means doing the same thing as when\nlow on storage -- turning off sync.\n\nAdd new ACTION_CHARGING and ACTION_DISCHARGING broadcasts\nthat apps can listen for to know when the device is actively\ncharging and discharging.  These are better than the old\nPOWER_CONNECTED and POWER_DISCONNECTED ones because we only\nreport charging when we actually see that there is enough\npower being provided to charge the battery (and will report\ndischarging if there is not enough power).\n\nThe job controller uses these new actions for scheduling\njobs that want to run while plugged in.  Removed the\n\"stable charging\" stuff while doing so, since the new\ncharging state serves as an even better signal for that.\n\nIntroduced two new process states: FOREGROUND_SERVICE and\nTOP_SLEEPING.  This will allow us to treat foreground services\nspecially (such as still allowing network access to them for\nbackground music playback) while not mixing them together with\nwhatever happens to be the top activity while the device is\nasleep.\n\nAlso some other small cleanup here and there.\n\nChange-Id: I7a9808b578bad6f50deb8e1baf919298512a0d3a\n"
    },
    {
      "commit": "d59a5d59df920d743723521a2afed9de1da3373b",
      "tree": "2fa60c308b330a8203d00f1e99811e54c6f486a9",
      "parents": [
        "cef55cde1cf1b9b15583d6b4c439dfea7bac7c26"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sat Apr 04 14:52:14 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Sat Apr 04 17:36:05 2015 -0700"
      },
      "message": "Various fixes and improvements...\n\nIssue #19912529: VI: VoiceInteractor callback ClassCastException\n\nFix to use correct argument.\n\nIssue #19912636: VI: Documentation for VoiceInteractionSession.onBackPressed\n\nAdded documentation.\n\nIssue #19912703: VI: VoiceInteractionSession NPE on Abort Request\n\nMaybe fix this -- don\u0027t crash if there is no active session.\n\nIssue #19953731: VI: Add value index to...\n...android.app.VoiceInteractor.PickOptionRequest.Option\n\nThere is now an optional index integer that can be associated with\nevery Option object.\n\nIssue #19912635: VI: Behavior of startActivity when in voice...\n...interaction is unexpected\n\nWe now forcibly finish the current voice interaction task whenever\nanother activity takes focus from it.\n\nIssue #20066569: Add API to request heap dumps\n\nNew ActivityManager API to set the pss limit to generate heap\ndumps.\n\nAlso added app ops for assist receiving structure and screenshot\ndata, so that we can track when it does these things.\n\nChange-Id: I688d4ff8f0bd0b8b9e3390a32375b4bb7875c1a1\n"
    }
  ],
  "next": "0b68ff45125e449dd0b4120f530240093aa6253e"
}
