)]}'
{
  "log": [
    {
      "commit": "75685f743756e97728366e9bb2c5a70d51cb2f9d",
      "tree": "a7b2cbad5c3c8a967727a9cf9b9f6327835b015a",
      "parents": [
        "66f15cc01befadf7ce19629680798b31046978c3"
      ],
      "author": {
        "name": "lei.peng",
        "email": "lei.peng@spreadtrum.com",
        "time": "Sat Oct 08 17:58:37 2016 +0800"
      },
      "committer": {
        "name": "Yuntao.Xiao",
        "email": "yuntao.xiao@spreadtrum.com",
        "time": "Sun Oct 09 10:35:20 2016 +0800"
      },
      "message": "Modify the case in adjustFocus when the mFocusedActivity is null\n\nStarting activity failed and the mFocusedActvity become null,\nconsider this condition when adjust focus.\n\nBecause in this condition, the focus mismatch between\nActivityManagerService#mFocusedActivity and\nInputDispatcher(inputfilnger)#mFocusedApplication, ANR may occur.\n\nTest: monkey test 48h with no ANR\n\nChange-Id: Id1a2bf0d6ca6530e34443d359fbe2aa6c11b878c\n"
    },
    {
      "commit": "32fed96632f6216ff5ec983a1aa13bdb2117c3c8",
      "tree": "85ad03f1c916dfa81d44c1d7e54980fa3988b6a8",
      "parents": [
        "e3d5fa1094ecc9edd1c71b002ca4436d327c42eb"
      ],
      "author": {
        "name": "Qiushi Han",
        "email": "hanqiushitju@gmail.com",
        "time": "Sat Oct 01 17:06:49 2016 +0800"
      },
      "committer": {
        "name": "Qiushi Han",
        "email": "hanqiushitju@gmail.com",
        "time": "Sat Oct 01 17:32:28 2016 +0800"
      },
      "message": "Fix window animation flash issue\n\nThe original logic cuts down the mShownPosition, causing 1 pixel offset,\nsometimes this will cause flash.\n\nTo fix this, Use Math.round() instead.\n\ngoogle issue:\nhttps://code.google.com/p/android/issues/detail?id\u003d224185\n\nChange-Id: I8a2fe55a2df6eaa9eda4ba78966a74ea492ab8ea\n"
    },
    {
      "commit": "42d25b5992c6c5967ca7d82001bc0e415f2887a6",
      "tree": "bfdf34e7248eaa206f605cb17388c41ed1aca01f",
      "parents": [
        "d1d682e446ff309d292ca7ea7f709c722442310d",
        "794c8b0b3fe16051843c22232d58d6b184dde49b"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Fri Sep 30 20:30:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 30 20:30:43 2016 +0000"
      },
      "message": "Merge \"Handle the race condition when calling uncrypt services.\""
    },
    {
      "commit": "794c8b0b3fe16051843c22232d58d6b184dde49b",
      "tree": "9165917ea4d7b2d036e4731d47a16dfefb42ff84",
      "parents": [
        "f0aa998233c308fcc945493135448dfe51fb39b7"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Tue Sep 27 11:15:42 2016 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Thu Sep 29 16:07:19 2016 -0700"
      },
      "message": "Handle the race condition when calling uncrypt services.\n\nWe call uncrypt services to setup / clear bootloader control block (BCB)\nfor scheduling tasks under recovery (applying OTAs, performing FDR).\nHowever, we cannot start multiple requests simultaneously. Because they\nall use the same socket (/dev/socket/uncrypt) for communication and init\ndeletes the socket on service exits.\n\nThis CL fixes the issue by a) adding synchronized blocks for the service\nrequests; b) checking the availability of the socket before initiating a\nnew one.\n\nNote that adding synchronized blocks to RecoverySystem doesn\u0027t help,\nbecause the calls could be made from different processes (e.g. priv-app,\nsystem_server).\n\nBug: 31526152\nTest: FDR works while a priv-app keeps calling clear BCB.\n\nChange-Id: I95308989e849a9c98a9503ac509f2bc51ed3de19\n"
    },
    {
      "commit": "00b678dd2d87287fa4ac7ba2ea85a2a75be3850f",
      "tree": "b7436f7755688cf9cd91946354b3ba09d3f40388",
      "parents": [
        "14f4fd7d0b599e2bce893ce61ec102c0ebfa1a5c",
        "b55e42df971e6ab0cc2b21da14027d40cf2a754e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 29 19:17:36 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 29 19:17:36 2016 +0000"
      },
      "message": "Merge \"Clear pending activity launches when force stop package\""
    },
    {
      "commit": "b55e42df971e6ab0cc2b21da14027d40cf2a754e",
      "tree": "42c4acd074f85bf0fb6d2e521a059d7f8f1cc19e",
      "parents": [
        "0ac1aa8256d6862d1747b30ac5687a3919dc5838"
      ],
      "author": {
        "name": "liulvping",
        "email": "liulvping@xiaomi.com",
        "time": "Mon Sep 26 20:00:15 2016 +0800"
      },
      "committer": {
        "name": "Wale Ogunwale",
        "email": "ogunwale@google.com",
        "time": "Thu Sep 29 16:42:16 2016 +0000"
      },
      "message": "Clear pending activity launches when force stop package\n\nhttps://code.google.com/p/android/issues/detail?id\u003d223731\n\nIt is possible that an activity in pending launches be resumed while\nit\u0027s package was stopped by some other reason, like uninstall pkg.\n\nMerged-In: I130ded89cee162aa59ac2bf330f026e49e16ef69\nChange-Id: I130ded89cee162aa59ac2bf330f026e49e16ef69\nSigned-off-by: liulvping \u003cliulvping@xiaomi.com\u003e\n"
    },
    {
      "commit": "b60951f670e5e6d271786f9d0041091b5c16173d",
      "tree": "5c5e2a905f89901f17459c448cfe12032344feca",
      "parents": [
        "0ac1aa8256d6862d1747b30ac5687a3919dc5838",
        "895da77aa6baa9231faa2a1159b673b6c67db3b9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 29 05:00:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 29 05:00:42 2016 +0000"
      },
      "message": "Merge \"Reset mCurrentUserId when fingerprintd died\""
    },
    {
      "commit": "0ac1aa8256d6862d1747b30ac5687a3919dc5838",
      "tree": "f35b585dabc3ebc429047da8ec6c081f58e68d95",
      "parents": [
        "c95c2344b5ff02fef9379eacbcf61a1f12ccce19",
        "13018f37305f94c9a091d8f7ef4e6bc7235de781"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 29 00:00:49 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 29 00:00:49 2016 +0000"
      },
      "message": "Merge changes from topic \u0027cherry_ota_dexopt\u0027\n\n* changes:\n  OtaDexopt: Fix after-ota space measure\n  OtaDexoptService: Add tron logging\n  OtaDexopt: Downgrade apps when low on space\n  Installer: Support delete_odex command\n  Package Manager: Sort list of packages to dexopt\n"
    },
    {
      "commit": "13018f37305f94c9a091d8f7ef4e6bc7235de781",
      "tree": "4a54539a32e04da7661481d9f0e47c08ddec3c52",
      "parents": [
        "112e01480f62d42a0ce2527f7d98318cfec61b23"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 19 15:18:46 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 28 15:01:06 2016 -0700"
      },
      "message": "OtaDexopt: Fix after-ota space measure\n\nActually measure the available space.\n\nBug: 31458900\nChange-Id: I16ecee6c275229bc21e908b88b24152484025bc8\n(cherry picked from commit 8d1d2ab5b94f011ed611259df387391f1a1fe60f)\n"
    },
    {
      "commit": "112e01480f62d42a0ce2527f7d98318cfec61b23",
      "tree": "def8371abe329f5863ec50630a5ee77cfd9cd398",
      "parents": [
        "1920d7b434ea7424cae8249adec56856fb2484ae"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 13 11:12:13 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 28 14:54:14 2016 -0700"
      },
      "message": "OtaDexoptService: Add tron logging\n\nLog key properties of A/B OTA dexopting.\n\nBug: 31458900\nChange-Id: Iba1e5a40ff8b4998d4d876800ee59940f01afb6e\n(cherry picked from commit 77cc8172d31fff398b81a039b3fddc8acd1c609b)\n"
    },
    {
      "commit": "1920d7b434ea7424cae8249adec56856fb2484ae",
      "tree": "2622aa50a642f9b2b8c4c32289b831a1e5a6913c",
      "parents": [
        "33c592da0cac04172b6edaabf47ec09cd826bc8c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 09 17:50:20 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 28 14:11:08 2016 -0700"
      },
      "message": "OtaDexopt: Downgrade apps when low on space\n\nWhen running low on space, attempt to \"downgrade\" apps to lower\nstates in the optimization flow to free up space before starting\nthe OTA.\n\nBug: 31347757\nChange-Id: I3a44b106b83d86d7290f4c557267b319f28de12a\n(cherry picked from commit dab38e000436bf8234955b0333eaecf389e65b6f)\n"
    },
    {
      "commit": "33c592da0cac04172b6edaabf47ec09cd826bc8c",
      "tree": "3e0253be301e1628b59afd41f6acd385559b83c5",
      "parents": [
        "71ea678683bccc5cc51365a91ffae4ea87a33fc2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 09 17:08:53 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 28 14:00:20 2016 -0700"
      },
      "message": "Installer: Support delete_odex command\n\nAdd support for deleting odex files.\n\nBug: 31347757\nChange-Id: I29bca8751bcee8d6981c682fbbc816c73b78ac68\n(cherry picked from commit e5fedb95761fbffbd80200440f32e99e0d8c6f90)\n"
    },
    {
      "commit": "71ea678683bccc5cc51365a91ffae4ea87a33fc2",
      "tree": "fbe9117ea935ab12bf90862a9679f0f3c7d588aa",
      "parents": [
        "f0aa998233c308fcc945493135448dfe51fb39b7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 18:22:19 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Sep 28 13:59:03 2016 -0700"
      },
      "message": "Package Manager: Sort list of packages to dexopt\n\nSort the list by last-use-time, if available. Interleave the\ndependencies with the packages.\n\nClean up the code a bit for better code reuse and ease of writing\nfilters.\n\nThis should help with prioritization under space constraints.\n\nBug: 31347757\nChange-Id: Ia0ec62faf013a379dc4c80b18fd6b2bfbfa470c4\n(cherry picked from commit d3e07d46d41e8411def67c2150a0bae064e900dc)\n"
    },
    {
      "commit": "c1973ecbd2a87197d8b6b9f3996228f6ebd4e2a8",
      "tree": "cd178fcf1f44fa2975185186248d64d2fe246d6d",
      "parents": [
        "f0aa998233c308fcc945493135448dfe51fb39b7",
        "036d08638e6a5f849847a32d794ad34d7dec1368"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 28 19:42:29 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 28 19:42:29 2016 +0000"
      },
      "message": "Merge \"Log the error when uncrypt timeouts\""
    },
    {
      "commit": "ae302cef52dae719b057a16f564af863b9fc8e96",
      "tree": "966f9952d451882cc6ec10c99985a059416bd8d2",
      "parents": [
        "e43c1a3e3ee6607882e5f36d62ff952e2c481ea7",
        "05efd438fe69831bf5df9b38480eb68feb0ebe65"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 28 16:20:55 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 28 16:20:56 2016 +0000"
      },
      "message": "Merge \"fix persistent process is killed and restart again and again\""
    },
    {
      "commit": "036d08638e6a5f849847a32d794ad34d7dec1368",
      "tree": "3f80130b579ac3294c8793d8ff817a59cdd36188",
      "parents": [
        "95abef9355b37e4a3f8430b24c7c6f34b801cae0"
      ],
      "author": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Sat Sep 24 15:39:56 2016 -0700"
      },
      "committer": {
        "name": "Tianjie Xu",
        "email": "xunchang@google.com",
        "time": "Tue Sep 27 13:34:58 2016 -0700"
      },
      "message": "Log the error when uncrypt timeouts\n\nLog the error code to uncrypt_status if uncrypt gets killed because\nof timeout.\n\nTest: We log the error code correctly in uncrypt_status when uncrypt timeouts.\nBug: 31603820\nChange-Id: Ia623c333714295e68f4269257fbb4297a867e42b\n"
    },
    {
      "commit": "7fd48d54de4a3601da6ee4f049fb6e538abd6297",
      "tree": "c8a8bb2aa00c2fc64668370741a1660d02febaab",
      "parents": [
        "4062bec04ec662fe7f6d209edd5c4b4e8f8a7a64",
        "5df6ed4a878c778971f388e3cb88e53b8db43b35"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 27 13:18:53 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 27 13:18:53 2016 +0000"
      },
      "message": "Merge \"Implement untetherAll as calls to stopTethering\""
    },
    {
      "commit": "4062bec04ec662fe7f6d209edd5c4b4e8f8a7a64",
      "tree": "072806b811a03826e32e2830aaf36bbc47556457",
      "parents": [
        "4ad6291b08c8ff0ab2d8efadd4bd6aacd59dd904",
        "d73faf07606d40d3915d22a72fa14f7ba956d459"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 27 13:18:37 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 27 13:18:38 2016 +0000"
      },
      "message": "Merge \"Notify NetworkPolicyManagerService on tethering changes\""
    },
    {
      "commit": "895da77aa6baa9231faa2a1159b673b6c67db3b9",
      "tree": "1dfffd74802d18abf268a12976575bdd81a38a0a",
      "parents": [
        "dfa6e6f18650cfab8c8f6b7269ef131e391484ee"
      ],
      "author": {
        "name": "takuya,souma",
        "email": "takuya.x.souma@sonymobile.com",
        "time": "Tue Sep 13 16:58:08 2016 +0900"
      },
      "committer": {
        "name": "Hidenari Koshimae",
        "email": "hidenari.koshimae@sonymobile.com",
        "time": "Mon Sep 26 14:42:43 2016 +0900"
      },
      "message": "Reset mCurrentUserId when fingerprintd died\n\nA template fingerprint data is not loaded in fingerprintd when\nfingerprintd is died and restarted.\nFigerprintService tries to set userId after a restart of fingerprintd,\nbut it\u0027s skipped because the service tries to set same userId already\nset to mCurrentUserId.\n\nTo load correct template fingerprint data, reset mCurrentUserId\nwhen fingerprintd died.\n\nBug: 31734514\nChange-Id: I0d3452fc6c1f82bb2a2af10f61d3f3a47df9dec6\n"
    },
    {
      "commit": "1f34a1baeb5e989d690e88859d1e3358763423f0",
      "tree": "32ac85fe3882dd4ca48b43e4c3c3f52e7f75fe50",
      "parents": [
        "b05b93a674804f38d327b24e3d660adc3ad8c982"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 23 17:20:32 2016 -0700"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Sep 23 17:20:32 2016 -0700"
      },
      "message": "Add missing liblog dependency\n\nBug: http://b/31289077\nBug: http://b/27171986\nTest: remove liblog from libcutils and recompile\nChange-Id: I71f402a04686b7bd6ee6adacda7b51280f5c7b92\n"
    },
    {
      "commit": "74f60c0de8a9bc436b4dd891e359d014a748e1de",
      "tree": "0d4705270fa736fe969a2a369beacbf8b3a80a9f",
      "parents": [
        "f4c8c3590a82a4f4b56c6ecb7ceb407abdbb83d8"
      ],
      "author": {
        "name": "Pavlin Radoslavov",
        "email": "pavlin@google.com",
        "time": "Wed Sep 21 17:28:11 2016 -0700"
      },
      "committer": {
        "name": "Andre Eisenbach",
        "email": "eisenbach@google.com",
        "time": "Thu Sep 22 20:05:22 2016 +0000"
      },
      "message": "Removed MESSAGE_BIND_PROFILE_SERVICE messages on unbind\n\nAdd a missing call to remove all MESSAGE_BIND_PROFILE_SERVICE\nmessage when unbinding and finishing.\n\nBug: 31442739\nTest: manual, and \"frameworks/base/core/tests/bluetoothtests\" unit tests\nChange-Id: I7e9a8f79a38d4eb8ab8b53be04650226fc72732e\n"
    },
    {
      "commit": "2527fa3067ce5ccc707203a06f00eea595d05308",
      "tree": "efe488f3d463bb88960d9aff0903addae5433f4b",
      "parents": [
        "1d5447d70b50a24a5ebbd88897e8da4ed4407e18"
      ],
      "author": {
        "name": "liulvping",
        "email": "liulvping@xiaomi.com",
        "time": "Mon Jun 06 10:20:48 2016 +0800"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Thu Sep 22 16:53:21 2016 +0000"
      },
      "message": "Skip uninstalled package for getPackagesForUid()\n\nIf a package with sharedUserId had been setInstalled\nwith false, then the result of getPackagesForUid()\nshould not include it.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d212255\n\nChange-Id: I7b984051db34ecc2d0ef9518786d51100ab9ac79\nSigned-off-by: liulvping \u003cliulvping@xiaomi.com\u003e\n"
    },
    {
      "commit": "1d5447d70b50a24a5ebbd88897e8da4ed4407e18",
      "tree": "d045a238e222a9b019e6549eba4fe6ccc2059c56",
      "parents": [
        "2309b98b254b1fe3b9e4bb86dab28082ec51e3f5",
        "dc94b2973f76f1a2fa743353759154210306a0cf"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Sep 22 14:54:16 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 22 14:54:16 2016 +0000"
      },
      "message": "Merge \"[ActivityManager] Reset killed flag at attachApplicationLocked\""
    },
    {
      "commit": "dc94b2973f76f1a2fa743353759154210306a0cf",
      "tree": "6972667248ec3aa5942bad5156f3455585ed394b",
      "parents": [
        "f7c508ae09ad9dce600af23572d3d618c9ff8475"
      ],
      "author": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Thu Sep 22 18:17:16 2016 +0800"
      },
      "committer": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Thu Sep 22 18:17:16 2016 +0800"
      },
      "message": "[ActivityManager] Reset killed flag at attachApplicationLocked\n\nA restarted process will reuse original process record.\nIf only reset KilledByAm flag, not reset Killed flag.\nWhen app process have been killed by AMS can skip  unnessary ANR,\nbut not catch lowmemorykiller in AppErrors.appNotResponding()\n\nChange-Id: Ie4653edf4252797eaeefbf9a4a35ac00cfa857d8\nSigned-off-by: yuanhuihui \u003cyuanhuihui@xiaomi.com\u003e\n"
    },
    {
      "commit": "59acc059a623268b0eaac54d469a95e09efd81a5",
      "tree": "f9d1812bb346ad20b9701b664dacafc77bcbdcd0",
      "parents": [
        "e2d9cc4bc9787195b980090e50e0c80523efe4fc",
        "a0126e0857481866dab5060384d611c83ca53d0e"
      ],
      "author": {
        "name": "Greg Hackmann",
        "email": "ghackmann@google.com",
        "time": "Wed Sep 21 21:04:09 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 21 21:04:09 2016 +0000"
      },
      "message": "Merge changes Iaa153fca,I619e2d8a\n\n* changes:\n  AlarmManagerService: explain some timerfd_create() failures\n  AlarmManagerService: remove legacy /dev/alarm support\n"
    },
    {
      "commit": "cc6b37d9e26020186b309d714a2477d74849db7e",
      "tree": "ec51f12a38aa76a543275fad6d606572d5a8119e",
      "parents": [
        "dfa6e6f18650cfab8c8f6b7269ef131e391484ee"
      ],
      "author": {
        "name": "Michal Karpinski",
        "email": "mkarpinski@google.com",
        "time": "Thu Sep 15 17:07:08 2016 +0900"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Wed Sep 21 16:17:26 2016 +0900"
      },
      "message": "Rename the DnsEventListenerService to NetdEventListenerService\n\nThe service will be extended to include listening for connect events as well.\n\nTest: this is just a renaming change\n\nBug: 29748723\nChange-Id: I4e50e24d1bfb0b5ead4010cc7df3434d38b753d8\n"
    },
    {
      "commit": "5df6ed4a878c778971f388e3cb88e53b8db43b35",
      "tree": "7cd9e056894ce4c4cccb384d6bcb3ffe87c2de82",
      "parents": [
        "d73faf07606d40d3915d22a72fa14f7ba956d459"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Mon Sep 19 08:58:06 2016 -0700"
      },
      "committer": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue Sep 20 15:23:06 2016 -0700"
      },
      "message": "Implement untetherAll as calls to stopTethering\n\nCalling untether() on an interface name leaves the system\nin an inconsistent state, since this is an API for use by\nnetwork subsystems to start or stop the tethering of a prepared\ndownstream network interface.  The proper way to disable tethering\nis to call stopTethering() with an appropriate technology.\n\nuntetherAll() is called in parts of the system UI to disable\nall tethering on system state changes (e.g. on the enabling\nof data saver).\n\nBug: 31405407\nTest: Enabling data saver now correctly disables tethering\nChange-Id: I8e5724a31e015721910a8d278e100daf697c34d7\n"
    },
    {
      "commit": "d73faf07606d40d3915d22a72fa14f7ba956d459",
      "tree": "981409e4539d7349b8a245eeb4b4b934be9f003a",
      "parents": [
        "dfa6e6f18650cfab8c8f6b7269ef131e391484ee"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Fri Sep 16 11:14:36 2016 -0700"
      },
      "committer": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue Sep 20 15:18:50 2016 -0700"
      },
      "message": "Notify NetworkPolicyManagerService on tethering changes\n\nNo longer do this in ConnectivityService#tether/untether.\nInstead, have Tethering do it when an interface is actually\ntethered.\n\nBug: 31405407\nTest: Toggling hotspot now disables data saver\n\nChange-Id: I9910a2e488c30c92d45f817c8f5df0fac5510de6\n"
    },
    {
      "commit": "a0126e0857481866dab5060384d611c83ca53d0e",
      "tree": "7e633c09150367a44222f1c1a145d2a843178e1b",
      "parents": [
        "d7151c06f11c05ad3dcab175a6e4b4ea694dab96"
      ],
      "author": {
        "name": "Greg Hackmann",
        "email": "ghackmann@google.com",
        "time": "Mon May 02 13:22:51 2016 -0700"
      },
      "committer": {
        "name": "Greg Hackmann",
        "email": "ghackmann@google.com",
        "time": "Tue Sep 20 14:33:28 2016 -0700"
      },
      "message": "AlarmManagerService: explain some timerfd_create() failures\n\nWhen AlarmManagerService is broken, starting the framework fails in\nweird and inconsistent ways.  So if we detect your kernel is missing the\nrequired timerfd support, give up immediately and explain why.\n\nBug: 28357356\n\nTest: manually break timerfd_create syscall, check adb logcat during boot\nChange-Id: Iaa153fca38e9cd8e801f3e71c3e1ae2351907828\nSigned-off-by: Greg Hackmann \u003cghackmann@google.com\u003e\n"
    },
    {
      "commit": "d7151c06f11c05ad3dcab175a6e4b4ea694dab96",
      "tree": "260cd16d1cb5fb9083e29ab559c584b28ca7cbc7",
      "parents": [
        "5706a8f5353218a60d3cf104a03e79fae301c27d"
      ],
      "author": {
        "name": "Greg Hackmann",
        "email": "ghackmann@google.com",
        "time": "Mon Apr 25 13:30:34 2016 -0700"
      },
      "committer": {
        "name": "Greg Hackmann",
        "email": "ghackmann@google.com",
        "time": "Tue Sep 20 10:35:40 2016 -0700"
      },
      "message": "AlarmManagerService: remove legacy /dev/alarm support\n\nWe\u0027ve removed the Android alarm driver from our supported kernels.  It\u0027s\ntime to remove the userspace callers too: they make the native side of\nAlarmManagerService more complex, and send the wrong signal about\n/dev/alarm still being supported.\n\nBug: 28357356\n\nTest: cts-tradefed run singleCommand cts -d -c android.app.cts.AlarmManagerTest\nChange-Id: I619e2d8a98e4c4728131a2d826b1295f858abedd\nSigned-off-by: Greg Hackmann \u003cghackmann@google.com\u003e\n"
    },
    {
      "commit": "ce5d913387c7fa4792ccb0dd13d79b6636c300a7",
      "tree": "81ebde200c8c24d3920f86c7d71dd3ddf1630051",
      "parents": [
        "16e1007481f508e292505bc348cec2320cbe9d08"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue Sep 13 12:07:58 2016 -0700"
      },
      "committer": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Mon Sep 19 14:12:38 2016 -0700"
      },
      "message": "Allow WiFi components to manage interface up state\n\nSetting the WiFi network interface up or down is racy because it\nis not synchronized with the WiFi components managing the interface.\n\nThis causes a problem for hostapd when the interface is marked down\nbefore hostapd starts because it causes the driver to enter the\nde-initialization process.  hostapd does not know how to react to this\nchange of events.\n\nBug: 31205821\nTest: bug no longer reproduces on upcoming devices, unit tests pass\n\nChange-Id: I96938e2aef89b400593d42ce1b0a6ccc2d2e5754\n"
    },
    {
      "commit": "41d65f28c202bd405f60f7739fd2cd775bb35213",
      "tree": "c0b1f0eba2250466814cdcda6507bf4a63074351",
      "parents": [
        "05884ac869a963652bd3fcedbe12147618f47582"
      ],
      "author": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Wed Mar 23 19:08:44 2016 +0800"
      },
      "committer": {
        "name": "Mark Lu",
        "email": "Mark_Lu@htc.com",
        "time": "Sat Sep 17 00:28:20 2016 +0800"
      },
      "message": "[AM] Skip unnessary ANR when process already died.\n\nWhen app process been killed by AMS or lowmemkiller just before ANR report,\nbecause process record info has been cleared after received death recipient,\nit also cannot dump trace log because process already dead,\nso report ANR \u0026 show ANR UI to let user wait seems is unnecessary.\n(compare normal ANR case, if kill app process by command,\nANR dialog will also dismissed, it seems reasonable.)\n\nTo check above condition, if ANR process record killed set as true,\nit means process already dead \u0026 can skip report this ANR.\n\nChange-Id: I483cb02bacb10c32db80ca1097310b02abbac24d\n"
    },
    {
      "commit": "f0c606eb3e481050fd1dacd52694bacb794a4736",
      "tree": "ad66d1a579ec29de99040706e3f45e21595c63fc",
      "parents": [
        "9d9cf5b383f26c209b781dbca0723f69ff6913ba"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 15 13:13:39 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 15 13:13:39 2016 -0700"
      },
      "message": "Stop including libcore/include/ in most of frameworks/base.\n\nframeworks/base/core/jni/android_text_StaticLayout.cpp does actually use\nScopedIcuLocale, so I\u0027ve left that for now.\n\nChange-Id: I6458cd133871281a747a9da2e304da10b445051a\n"
    },
    {
      "commit": "9d9cf5b383f26c209b781dbca0723f69ff6913ba",
      "tree": "652dbb9384565f0d1d5ddcf2e867e988cd1ff65a",
      "parents": [
        "796578f9a99b3503aed1fb61f891bd80aad87422",
        "313177dccacaf5fefd2954d90c065e35e5b03253"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 14 13:54:36 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 14 13:54:37 2016 +0000"
      },
      "message": "Merge \"Skip ANR for processes that have been killed\""
    },
    {
      "commit": "1bb0616c5675bcd699b99a65ff566b2fac3ec0f7",
      "tree": "6b1aabe2cd3536b6537e2fe8b09bffc04d64f718",
      "parents": [
        "c7b84e6d0df07d9f09d55f786a8a4a6f03390e34",
        "ecbdb8834d82f0647a7c711bb95b065c8effa6c0"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Sep 12 21:07:39 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 12 21:07:40 2016 +0000"
      },
      "message": "Merge \"DO NOT MERGE. Listen to ACTION_UID_REMOVED only.\""
    },
    {
      "commit": "05efd438fe69831bf5df9b38480eb68feb0ebe65",
      "tree": "aeaa4c29ffab536999f20a2a0e96588aab793fb0",
      "parents": [
        "f7c508ae09ad9dce600af23572d3d618c9ff8475"
      ],
      "author": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Mon Sep 12 17:52:18 2016 +0800"
      },
      "committer": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Mon Sep 12 17:52:18 2016 +0800"
      },
      "message": "fix persistent process is killed and restart again and again\n\nstart presistent app  before system booting, in NewProcessRecordLocked\nwill set  persistent \u003d true, but not set r.maxAdj \u003d ProcessList.PERSISTENT_PROC_ADJ.\nso this process  may become CACHED_EMPTY, then be killed.\nwhile persistent \u003d true, will restart again.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d222224\n\nChange-Id: I91b405ca3f3bbe8934e4a495d9a54eab4f51e21f\n"
    },
    {
      "commit": "96b49848e7784bc4b40ffd01e2524461e1efcab7",
      "tree": "091cd1071de89ffe64bd1dae930f4ef2e402fe49",
      "parents": [
        "b9679dc1fad508a001e30a941148e1bdc3fe953f"
      ],
      "author": {
        "name": "Robert Sesek",
        "email": "rsesek@google.com",
        "time": "Fri Mar 18 16:52:57 2016 -0400"
      },
      "committer": {
        "name": "Robert Sesek",
        "email": "rsesek@google.com",
        "time": "Fri Sep 09 12:42:52 2016 -0400"
      },
      "message": "Split the zygote logic out of android.os.Process into a new ZygoteProcess class.\n\nThere is no functional change. This is to support adding new types of zygotes\nthat all operate using the same protocol.\n\nBug: 21643067\n(cherry picked from commit 94e824bc1b5f83024b7c9a228a8f2d0cd1347d11)\n\nMerged-In: Ie673ee816cae34ac20ffb8c774ec3e6461c3fd0a\nChange-Id: I104e6133a90dc93a9854836b5e92d3cd542163a3\n"
    },
    {
      "commit": "ecbdb8834d82f0647a7c711bb95b065c8effa6c0",
      "tree": "725e24846182e95bb40e4938b1a1d7cecb89fb7e",
      "parents": [
        "63a07e80d6c60c86bbcd81660f9693236de5ed80"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Thu Sep 08 17:09:08 2016 -0700"
      },
      "committer": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Thu Sep 08 18:15:23 2016 -0700"
      },
      "message": "DO NOT MERGE. Listen to ACTION_UID_REMOVED only.\n\nNMPS was listening to both ACTION_UID_REMOVED and\nACTION_PACKAGE_REMOVED, which not only was redundant but would also\ncause problems when a package with shared UIDs was removed.\n\nBUG: 31375684\n\nChange-Id: I78da95ef168321a837ed85ce2787a66a16830a78\n"
    },
    {
      "commit": "313177dccacaf5fefd2954d90c065e35e5b03253",
      "tree": "9b52b0ef7c89264dbcad977adeead2efa3f11812",
      "parents": [
        "9484bff017a5a919f31e3ee945430b86cc8c6609"
      ],
      "author": {
        "name": "Tobias Lindskog",
        "email": "tobias.lindskog@sonymobile.com",
        "time": "Tue Feb 03 11:45:58 2015 +0100"
      },
      "committer": {
        "name": "Edward Savage-Jones",
        "email": "edward.savage-jones@sonymobile.com",
        "time": "Wed Sep 07 14:36:46 2016 +0200"
      },
      "message": "Skip ANR for processes that have been killed\n\nIf a controller is attached and decides to kill a process after an ANR,\nother ANR reports for that app that are queued up won\u0027t be handled until\nafter the app has died.  This can create a report without the relevant\ncallstacks because the app is dead by the time the traces are dumped.\nSince the trace file is global, the traces recorded for the first ANR\nare overwritten, leaving us with no clue as to what happened.\n\nAfter the app has been killedByAm, it is not interesting to handle ANRs\nfor that app until it is started again, so killedByAm can be used to\nfilter out these spurious reports.\n\nChange-Id: I34ba790f6d29d563c819dc2f6ac71a3c8955bb76\n"
    },
    {
      "commit": "a817838e8be4902c2906d3d4abada8fd22461af4",
      "tree": "e87c6d188a5d6947bc589e962a75ab6f82ce3825",
      "parents": [
        "1cd624801265e4af0d3d91cd87b9a81e10e49dcc",
        "41e4a376f1fa700ba5ad18ce0f9efb45478c5454"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 06 22:19:03 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 06 22:19:03 2016 +0000"
      },
      "message": "Merge \"Avoid profile guided compilation for vmSafeMode\""
    },
    {
      "commit": "1cd624801265e4af0d3d91cd87b9a81e10e49dcc",
      "tree": "da3db258daf3b37c0fe846448f9cafc3df2724f4",
      "parents": [
        "421c74f8e74c67c4ce41300880b8e52a6d1a4a41",
        "efd1f1242b7010adbad19ccee2e3d3c2786bf374"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 06 21:09:05 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 06 21:09:06 2016 +0000"
      },
      "message": "Merge \"fixes mStartedUsers shoule be locked by mLock, not mVolumes\""
    },
    {
      "commit": "94f9be2ee2a40b390cc4de1f24a33d0b662a2d79",
      "tree": "96cd1fb62f5d20034c3d8f54e7a25518ad080954",
      "parents": [
        "3f95d0bb6af6a155291cff3f6b61b2b25348127f"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Thu Aug 18 11:22:52 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:46:18 2016 -0700"
      },
      "message": "Release mPackages lock earlier\n\nWe cannot hold mPackages when calling into generatePackageDexopts().\nThis method takes Package Manager\u0027s mInstallLock. By holding mPackages,\nwe have lock inversion and hilarity ensues.\n\nChange-Id: Ia11a158677051e3511702f38cde6780e75b256fb\nFixes: 30927731\n(cherry picked from commit a8d4f489974f3ea8f73990cbabbce205343fb926)\n"
    },
    {
      "commit": "3f95d0bb6af6a155291cff3f6b61b2b25348127f",
      "tree": "98b6aee4346e160c5bc344fcdfba4f5dd60b3e83",
      "parents": [
        "14186731f98d326239922d093371d1e63b8c22a5"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 22:08:26 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:45:06 2016 -0700"
      },
      "message": "OtaDexopt: Special-case system app classpaths\n\nSpecialize system apps\u0027 shared libraries so that classpath checks\nare elided.\n\nBug: 30568568\nChange-Id: Id1f2555ef43984b616e01f8596701ccba77895b3\n(cherry picked from commit c7e02c1d2a53e0f738d2a8383e03658b39d91ce6)\n"
    },
    {
      "commit": "14186731f98d326239922d093371d1e63b8c22a5",
      "tree": "5fb535d4b45d3548bd6dc3539205b533ae58838f",
      "parents": [
        "7e619a912cf6a53ede7d7eea67f8bc8ed1158e24"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 28 16:54:41 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:44:00 2016 -0700"
      },
      "message": "OtaDexoptService: Run dexopt on all apps\n\nTo avoid work after reboot, dexopt all apps. However, unimportant\napps are optimized with the first-boot reason (which is usually\ninterpret-only) for space reasons.\n\nBug: 30468718\nChange-Id: Ia05d879957388967c69f9380e50d8a9834afe07d\n(cherry picked from commit 115514b236ebe7cb3c90892891954b8c7ba69335)\n"
    },
    {
      "commit": "7e619a912cf6a53ede7d7eea67f8bc8ed1158e24",
      "tree": "71dcc0280b1a4f122889c75cea629832bd486ff4",
      "parents": [
        "08313b0d952b6d5fa6e7ed7e3a5e4a7154a7d2c9"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 12 22:42:41 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:41:59 2016 -0700"
      },
      "message": "Frameworks/base: Add compiler stats to Package Manager\n\nAdd a simple class for storing compiler statistics. Capture compile\ntimes for code paths from a package.\n\nBug: 29223204\nChange-Id: I1b066de6a83a739470a42480eee0bfef88423eea\n(cherry picked from commit 37e5fdc6b4963f3533caecdd92b129f79da69dd8)\n"
    },
    {
      "commit": "08313b0d952b6d5fa6e7ed7e3a5e4a7154a7d2c9",
      "tree": "767f3203d62ea3e7e9ecd3cbca36d132e88c4ce0",
      "parents": [
        "9438528d99a404ce10e567bbbb5f0cc9519fb5da"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 12 15:56:41 2016 +0100"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:41:04 2016 -0700"
      },
      "message": "[RFC] Special case system apps for profile optimizations\n\nIf the OTA updates a system app which was previously preopted to a non-\npreopted state the app might end up being verified at runtime. That\u0027s\nbecause by default the apps are verify-profile but for preopted apps\nthere\u0027s no profile.\n\nDo a hacky check to ensure that if we have no profiles (a reasonable\nindication that before the OTA the app was preopted) system apps get\ncompiled with a non-profile filter (by default interpret-only).\n\nBug: 30032273\nTest: Andreas \"has verified that Calin\u0027s change to A/B works as expected\nand promotes things like SystemUI to speed. From my side, that\u0027s\nready to be merged\"\n\nChange-Id: I7a052a8ea76cab7f649dc993237ea05534d6c4b9\n(cherry picked from commit 0bd776207999ccba17e5adb163710bd7b16ac907)\n"
    },
    {
      "commit": "9438528d99a404ce10e567bbbb5f0cc9519fb5da",
      "tree": "5d59af8778cda998e10efcdb1245ac5773f653f2",
      "parents": [
        "d15300cf38ae3840309dc6cb6c093b17713fc277"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 12 13:56:34 2016 +0100"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:40:18 2016 -0700"
      },
      "message": "Compile core-apps according to their own \"reason\" for A/B\n\nIf the core apps are not preopted in the B OTA, and REASON_AB_OTA is not\nspeed (by default is speed-profile) they will be interepreted/JITed.\nThis in itself is not a problem as we will end up doing profile guided\ncompilation. However, some core apps may be loaded by system server\nwhich doesn\u0027t JIT and we need to make sure we don\u0027t interpret-only.\n\nBug: 30032273\nChange-Id: Idb11b1c01c4c4ceba043feb3a9ccc6958035d3b7\n(cherry picked from commit 565621328dd4fc2e179a34494d0f8b8dc1b1eae9)\n"
    },
    {
      "commit": "d15300cf38ae3840309dc6cb6c093b17713fc277",
      "tree": "f986de4877b64b212f4fd08b325c4e35dd8db379",
      "parents": [
        "ff8ab4c9fade0dd95bac6df6506e1ce14dbd8e42"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 23 20:27:12 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:39:56 2016 -0700"
      },
      "message": "Frameworks/base: Add new flow to OtaDexoptService\n\nAdd functionality to capture/intercept installd communication, and\nuse this to return the full communication for dexopt. These parameters\ncan be used to drive otapreopt_chroot directly.\n\nKeep the old direct invocation alive until devices have transitioned\nto a service that exposes this API.\n\nIn preparation for renaming of A/B OTA artifacts to include target\nslot names.\n\nBug: 25612095\nBug: 28069686\nChange-Id: I14728ee1266f3882cada8f08dd21891ed5f7a0cb\n(cherry picked from commit cc241a580cb9b753d0dde0cea578feb74ad517e7)\n"
    },
    {
      "commit": "ff8ab4c9fade0dd95bac6df6506e1ce14dbd8e42",
      "tree": "6743c00ae591e2e7e8fcf08461146d31bc219f56",
      "parents": [
        "2b6fc4c92deac1572b68f3cfc326da0a230055a7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 10 15:21:39 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 10:39:20 2016 -0700"
      },
      "message": "Otadexopt: Expose progress percentage\n\nTo be able to report progress of an A/B OTA dexopt, expose a\nprogress function that the script can query.\n\nBug: 25612095\nBug: 29223204\nChange-Id: Ie8162946d18f6fa78649a40ad5d3949d31a181cd\n(cherry picked from commit bf06232f4d440ced8230662a77ca0e8ece6383ca)\n"
    },
    {
      "commit": "2b6fc4c92deac1572b68f3cfc326da0a230055a7",
      "tree": "2ce406d4a1c356dd71c6da70820919ea3d47ebab",
      "parents": [
        "f7c508ae09ad9dce600af23572d3d618c9ff8475"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 22 17:56:37 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 06 08:53:00 2016 -0700"
      },
      "message": "cp preopted files from B partition during PM init.\n\nThis allows us to save space on the system partition while still\nhaving access to the preopted files.\n\nWe do this on first boot when the \"ro.cp_system_other_odex\" property\nis set to 1. We do this during package manager initialization before\nscanning the system to see which apks need to be optimized again.\n\nNote that a separate script, run by init, is actually responsible for\nfinding and copying the files. We simply request that it runs.\n\nBug: 29278988\n\nChange-Id: I8d7c790ad35b32a0ce1d87939f043419bae4d88a\n(cherry picked from commit 3dafee6c1820bf0946bab04b290c5a757112d3e7)\n"
    },
    {
      "commit": "efd1f1242b7010adbad19ccee2e3d3c2786bf374",
      "tree": "46d33db1db52b77772e2a53e2ef53688649a7473",
      "parents": [
        "f7c508ae09ad9dce600af23572d3d618c9ff8475"
      ],
      "author": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Wed Jul 13 21:21:03 2016 +0800"
      },
      "committer": {
        "name": "yuanhuihui",
        "email": "yuanhuihui@xiaomi.com",
        "time": "Mon Sep 05 13:54:00 2016 +0800"
      },
      "message": "fixes mStartedUsers shoule be locked by mLock, not mVolumes\n\nwhen create/delete multiple user, plug/unplug externel storage(such as sdcard) at the same time.\nmultiple threads run concurrency , the newly created user can not get state of externel storage.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d215901\n\nChange-Id: I097f5291108af89a430e12045376065d71d48175\nSigned-off-by: yuanhuihui \u003cyuanhuihui@xiaomi.com\u003e\n"
    },
    {
      "commit": "41e4a376f1fa700ba5ad18ce0f9efb45478c5454",
      "tree": "2be05f12477297a28220318bd660e9c0f94afdf9",
      "parents": [
        "47784a790bca4cb9744cfcb9df0da5e38f5cbbf1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 02 16:36:42 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 02 18:15:45 2016 -0700"
      },
      "message": "Avoid profile guided compilation for vmSafeMode\n\nBug: 30688277\nBug: 30733908\n\nTest: adb shell cmd package compile -m speed-profile comb.BBClient\n\nChange-Id: I6783c80566b6b3b67025a3d258ebbdede0c7ca2d\n"
    },
    {
      "commit": "a6b6252d8bb79faf013c378f719244b0e06a6ff8",
      "tree": "48401a4f4db15f2b8c2f5da50bc7d8852e50598c",
      "parents": [
        "47784a790bca4cb9744cfcb9df0da5e38f5cbbf1",
        "6d09d547b06b86b337e8e16c2585b3882a5bb1dc"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Sep 01 17:33:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 01 17:33:42 2016 +0000"
      },
      "message": "Merge \"Fix google-explicit-constructor warnings.\""
    },
    {
      "commit": "6d09d547b06b86b337e8e16c2585b3882a5bb1dc",
      "tree": "0c81514e6726b36c90433e9d25eeb861702615f9",
      "parents": [
        "c4c4a1e76e4de30a43c3396d3e0b55209666346d"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Aug 29 14:51:31 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Aug 29 14:51:31 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\n* Add explicit keyword to conversion constructors.\nBug: 28341362\nTest: build with WITH_TIDY\u003d1\n\nChange-Id: Ic550902559b0800bdcfc0b1d301313a909434eed\n"
    },
    {
      "commit": "b0b6afc248307f0d2eec0e003e47a051a25da093",
      "tree": "b5304fc9040cfb72bdfc8f393866d53ae2fd70aa",
      "parents": [
        "bb205d5e3e2a8878295ed18c656ec55e90dd288b",
        "521c66e73cbd48b11c2fe4b28ffcf4279acb045c"
      ],
      "author": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon Aug 29 20:02:48 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 29 20:03:22 2016 +0000"
      },
      "message": "Merge changes from topic \u0027wifi-aosp-master\u0027 into stage-aosp-master\n\n* changes:\n  NetworkSelectionStatus: Fix copy constructor\n  Deprecate QNS network disable reason BAD_LINK\n  [NAN] API changes/fixes addressing apilint issues\n  [NAN] Add method to ConfigRequest to determine if non-default\n  [NAN] Simplify publish/subscribe configuration - merge match filters\n  [NAN] Udpate NAN API documentation, clean-up visibility\n  [NAN] Do not expose WifiManager.isNanSupported as new API\n  [NAN] Update finalize to check and warn user if resources not freed\n  [NAN] Fix bad merge use rethrowFromSystemServer\n  Add Log.wtf when transitionTo is used improperly\n  Ensure BSSIDs are correctly aged out in settings view\n  [NAN] Provide calling package name to service\n  Add WiFi toggle prompts - framework\n  Reenable the unit tests for StateMachine\n  Remove WiFi related methods from NetworkManagementService\n  Don\u0027t pull in external/junit through mockito\n  WifiConfiguration: Expose NetworkSelectionStatus strings\n  Add Bluetooth toggle prompts - framework\n  [NAN] Add LV utilities (TLV with T size of 0).\n  [NAN] Fix TlvElement member names - reflect public access.\n  TetherUtil: Use ConnectivityManager for tethering\n  [NAN] TLV utilities iterator - throw correct exception\n  [NAN] Modify arguments from \"array, length\" to \"array\"\n  [NAN] NAN System Api: RTT\n  Properly disable WiFi tethering\n  [NAN] Provide inteface MAC address to app.\n  [NAN] Add (T)LV validation testing\n  Add IPv6 tethering coordinator\n  Stop listening for WiFi interface status changes\n  [NAN] Add validity checks for service name\n  [NAN] Fix assumption about Strings containing single-byte characters.\n  [NAN] NAN data-path API: network specifier\n  DO NOT MERGE StateMachine: remove final from SendMessage\n  wifi: allow config of default+verbose ring buffers\n  Don\u0027t save the anonymous identity for EAP-SIM/AKA/AKA-Prime\n  Add a WifiScanner API to listener for ongoing scans\n  Fix invitation request from persistent GC\n  SettingsBackupAgent: Remove redundant size parameter\n  WifiConfiguration: Make NetworkSelectionStatus public\n  Use WifiManager for wifi backup/restore\n  Fix race conditions between Tethering and TetherInterfaceStateMachine\n  WifiManager: Add new API to restore old backup data\n  Tethering: Own WiFi tethering state and lifetime\n  IpConfigStore: Changes for parsing old wifi backup\n  WifiManager: Add new API\u0027s for backup/restore\n  XmlUtils: Add missing readThisByteArrayXml method\n  Use an ArrayMap instead of HashMap to track tether interfaces\n  Consolidate cleanup logic in TetherInterfaceSM.TetheredState\n  Annotate TetherInterfaceStateMachineTest for APCT\n  Rely on Tethering mutex for TetherInterfaceSM\n  Rename TetherInterfaceSM to TetherInterfaceStateMachine\n  [NAN] Add retry count for transmitting L2 NAN messages\n  Remove dead code from TetherInterfaceSM\n  Remove transient StartingState from TetherInterfaceSM\n  Expand test coverage of TetherInterfaceSM\n  Add demonstration unittest for TetherInterfaceSM\n  Extract TetherInterfaceSM to its own class.\n  Make Tethering.TetherInterfaceSM more self contained\n  WifiManager: add WIFI_MODE_NO_LOCKS_HELD\n  Create frameworks-base-testutils lib\n  Clean up class members in Tethering.TetherInterfaceSM\n  Move android.net.util.IpUtilsTest into a util/ directory\n  Fix trivial warnings in Tethering.java\n  Fix some trivial warnings in WifiP2pDevice.java\n  [NAN] Add support for NAN RTT.\n  [NAN] Remove OnNanDown notification from API\n  Remove unused method from NetworkManagementService\n  WifiConfiguration: Add new selection disable reasons\n  [NAN] Add type and nullability annotations. Update hide annotation.\n  [NAN] Add master switch to enable/disable usage of NAN APIs.\n  [NAN] Re-factor connect/config flow\n  [NAN] Refactor session lifecycle to clarify API \u0026 eliminate race conditions\n  [NAN] Removed NAN event registration - dispatch all callbacks.\n  [NAN] Consolidate publish/subscribe callback sets into single set\n  [NAN] Replace session callback configuration control\n  [NAN] Expose match style configuration as public API.\n  [NAN] API cleanup - rename FLAGS.\n  [NAN] Renamed listeners to callback per API guidelines\n  [NAN]: API update - consolidate Puslish|Subscribe Data+Subscribe -\u003e Config\n  NAN: Support multiple instantiation per UID - introduce a client ID.\n"
    },
    {
      "commit": "5de073a6b0d08f7bca33ea9e944379042d734d75",
      "tree": "8656105d957131706c40c7a53adef28fc9040d39",
      "parents": [
        "079b2f342cbcd40532d9c7f7f0e82e0d0e06c81e"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue Aug 02 11:38:57 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon Aug 29 11:26:50 2016 -0700"
      },
      "message": "Remove WiFi related methods from NetworkManagementService\n\nThese are no longer necessary, since WiFi manages its own details.\n\nBug: 30041228\nChange-Id: Ia3824da43367ae74d3f3a204318cfe5470d74957\nTest: Compiles\n(cherry picked from commit 212b95f587f4af637fb2429f29f7d0add1bd251f)\n"
    },
    {
      "commit": "05f86d1eec26b588caf45dbfb5a412176428e0a7",
      "tree": "182eaa011ace20cdbfa39f18761fd622b6108e43",
      "parents": [
        "2d3face59a6c7cc4e3e8651545302f0fb836c011"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Wed Jul 13 18:57:34 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon Aug 29 11:26:46 2016 -0700"
      },
      "message": "Properly disable WiFi tethering\n\nWhen Tethering.stopTethering(\u003cwifi\u003e) is called, we set\nmWifiTetheringRequested to false and request the AP be torn down.\nPreviously, we would discard WIFI_AP_STATE_CHANGED_ACTION Intents,\nbecause mWifiTetheringRequested was set to false.  This would in\nturn cause us to leave tethering enabled, because we only tear down\ntethering upon noticing that the interface is going down\n(as signalled by WifiManager via this Intent).\n\nIn the past, this was covered up because we would tear down tethering\nwhen the interface was taken down.  Now that we rely on SoftApManager\nto notify us of AP state, we need to pay very close attention to what\nis being said about the state.\n\nBug: 30124308\nTest: Can toggle tethering on and off reliably on shamu, bullhead,\n      angler with no SIM.\n\nChange-Id: If46a8ee11cf4c07c5cc336523f5e5f00273500ec\n(cherry picked from commit e52b24a0c52c6e29ea99760c920724f4143ac605)\n"
    },
    {
      "commit": "f834ddaf286b000d8ed1abe05033d311cd467e5b",
      "tree": "e9975fe33f673c22a418bf3838c3a5dfa3cd4796",
      "parents": [
        "9c820cdebf1ee13e63d5706c71750df292bd5d3d"
      ],
      "author": {
        "name": "Erik Kline",
        "email": "ek@google.com",
        "time": "Fri Jul 08 17:21:26 2016 +0900"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon Aug 29 11:26:44 2016 -0700"
      },
      "message": "Add IPv6 tethering coordinator\n\nAdd an IPv6TetheringCoordinator to TetheringMaster StateMachine, which\nreceives and processes NetworkState updates and passes the necessary IPv6\ninformation to the revelant TetherInterfaceStateMachine.\n\nAdd an IPv6TetheringInterfaceServices to TetherInterfaceStateMachine, which\nis responsible for adding local network routes and managing an IPv6\nRouterAdvertisementDaemon.\n\nPartial cherry-pick of only interfaceType method\nBug: 9580643\nChange-Id: I3eaae460b80752e2115359d7bde873a1e9ea515a\n(cherry picked from commit 1eb8c69bed1615e9502e94b1a676773ed28abfd9)\n"
    },
    {
      "commit": "9c820cdebf1ee13e63d5706c71750df292bd5d3d",
      "tree": "606911dc009e58754e0e5987a0402b0d18fb0dd6",
      "parents": [
        "01db037f455b7326e7952bb10d1deccebcfdd66c"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Fri Jul 08 09:33:50 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon Aug 29 11:26:44 2016 -0700"
      },
      "message": "Stop listening for WiFi interface status changes\n\nBug: 29931437\nTest: Can toggle tethering on and off repeated on shamu and an\n      upcoming device, both devices without a SIM.\nTest: Can toggle tethering on and off repeated on an\n      upcoming device with a T-Mobile SIM.\n\nChange-Id: I4986b1a5f6ae9b45010bd30639806f7ed63a605c\n(cherry picked from commit d30aaeb2148edbc0c7a97699a41c450c0591b983)\n"
    },
    {
      "commit": "c44a6e08e2e60672f83e50a7d6948bce1199f055",
      "tree": "57311e01ed9383f7943179303cd71bd2d963b965",
      "parents": [
        "e2732e5e384c0074e019db1019c5d8c9e68ec3fa"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sat Aug 27 12:16:44 2016 +0100"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Sat Aug 27 12:16:44 2016 +0100"
      },
      "message": "Track getxattr API change\n\nBug: 30992227\nChange-Id: I788b3e51a536c7df7896f622038fe762f9848a2a\n"
    },
    {
      "commit": "e90e0a74adf33f3d0ed0f2617520ab72b3b5d624",
      "tree": "927b6fb2008c6bde554534c7c792e69915a9436c",
      "parents": [
        "f9f88b8b20f4fe4e0c7b2c22c1f0d4d0a36f2217"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue May 31 10:44:35 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:47 2016 -0700"
      },
      "message": "Fix race conditions between Tethering and TetherInterfaceStateMachine\n\nPreviously, Tethering would answer requests for current tethering state\nby calling methods on instances of TetherInterfaceStateMachine to build\nup that state. This is incorrect, since state queries can come in on an\narbitrary thread, independent of updates to the state machines\ninstances.\n\nFix this by:\n  - Altering TetherInterfaceStateMachine to push consistent state\n    snapshots to Tethering via notifyInterfaceStateChange()\n  - Storing the last state snapshot in Tethering.mTetherStates\n  - Removing public methods to query TetherInterfaceStateMachine state.\n  - Consistently synchronizing access to Tethering.mTetherStates\n\nBug: 29009601\nTest: WiFi Tethering continues to work, unittests continue to pass\n\nChange-Id: Ied334f5e8739bc3aff1b08a1079095b9cc2a7958\n(cherry picked from commit de4819dc82b734036b22416228327d2712e01884)\n"
    },
    {
      "commit": "cd0cfbbc61168b61360a6247b4a826494deb3912",
      "tree": "ff073d37e896305a591fc4304c20da5fac67dfce",
      "parents": [
        "b6665deef283f9bb896fb038f7edbb6654900fde"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue May 31 14:43:08 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:46 2016 -0700"
      },
      "message": "Tethering: Own WiFi tethering state and lifetime\n\n- Add logic to Tethering to track whether the user has requested\n  tethering via WiFi.\n- Subscribe to intents regarding soft AP state to enable and\n  disable tethering when the AP comes up or goes down.\n- Refactor IP configuration logic to do configuration for WiFi\n  as well as USB.\n\nBug: 29054780\nTest: WiFi tethering continues to work on angler\n      Tethering related unittests continue to pass.\n\nChange-Id: I6eff2573ca3fd11fabcf138c468ba517ff2daf65\n(cherry picked from commit f1315c3cd6d77e812ae32fe038b4e8bf2e70d5bf)\n"
    },
    {
      "commit": "b6665deef283f9bb896fb038f7edbb6654900fde",
      "tree": "dcaf80f03e20ee91c92a219f14916f5146f8fb02",
      "parents": [
        "ffe0abf103ead1ca63ff9ae4807e0b973b1d39dc"
      ],
      "author": {
        "name": "Roshan Pius",
        "email": "rpius@google.com",
        "time": "Wed Jun 01 17:51:28 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:45 2016 -0700"
      },
      "message": "IpConfigStore: Changes for parsing old wifi backup\n\nSome changes in IpConfigStore to parse old backup data. The old backup\ndata contained a raw byte dump of the ipconfig.txt. So, make changes in\nIpConfigStore to parse the inputstream from backup data into\nIpConfiguration objects.\n\nChanges in the CL:\n1. Make the |readIpAndProxyConfigurations| method static so that\nit can be used as a utility for parsing the backup data.\n2. Create a new version of |readIpAndProxyConfigurations| method to\naccept an input stream parameter.\n3. Make |writeConfig| method static so that it can be used for\nunit-testing the backup migration logic.\n\nBUG: 29075035\nChange-Id: Ic074952d9f9ef143089a371e6c527470cb1c229c\n(cherry picked from commit 06fe328c4fc8ea701932ef8c49012c177fcd058b)\n"
    },
    {
      "commit": "46c5e17aa884273057bf52b6fb49dfe7cdf97356",
      "tree": "407139569819152eb53616bfbf533bf6c12a37c1",
      "parents": [
        "f972edcae7386d0dfc596aaa01e97d039dd1e0e2"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Thu May 26 15:57:29 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:42 2016 -0700"
      },
      "message": "Use an ArrayMap instead of HashMap to track tether interfaces\n\nSince the number of tetherable interfaces should be small (e.g. \u003c10),\nthe computational cost of a looking up objects in an ArrayMap is negligible,\nand the memory required is less than a HashMap.\n\nWhile here, remove some unused imports.\n\nChange-Id: I3fb7091cfb93697d2fc6388b843d60f7e8e7e1a6\nTest: Compiles.\n(cherry picked from commit 36f6f4e394750e4989d78f38a31ab8f2f66c07f7)\n"
    },
    {
      "commit": "f972edcae7386d0dfc596aaa01e97d039dd1e0e2",
      "tree": "e76e83b152ad000e4eab8de3ca1e28e3b405e872",
      "parents": [
        "9bc0df24827336889d3100542536595c2809c3ce"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Mon May 23 16:17:30 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:42 2016 -0700"
      },
      "message": "Consolidate cleanup logic in TetherInterfaceSM.TetheredState\n\nThis pushes all TetheredState cleanup logic into a single place.\nAll new unittests fail without the changes to TetherInterfaceSM.\n\nBug: 28915272\nTest: Compiles, unittests pass, WiFi tethering continues to work.\n\nChange-Id: Ia7bf210e00e9a54f2797baebc2e5333ce314c947\n(cherry picked from commit f54c5a932a9ac4a491ce775b21ff8288e40b5bad)\n"
    },
    {
      "commit": "9bc0df24827336889d3100542536595c2809c3ce",
      "tree": "aa36a5995ab132bdf98aff579ac361cf85ba34d2",
      "parents": [
        "afc46a7cbfec7150c35716b3aba0f20b08115e92"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Wed May 25 13:57:27 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:41 2016 -0700"
      },
      "message": "Annotate TetherInterfaceStateMachineTest for APCT\n\nAPCT needs a little additional magic to pick up JUnit4 tests.\n\nBug: 28958508\nTest: Tests continue to pass\n\nChange-Id: Ia45d91bb3b06e60e3a46ffe738d4468356e066b3\n(cherry picked from commit d905add4747d6060355c44dac1dce0eccd8014fb)\n"
    },
    {
      "commit": "afc46a7cbfec7150c35716b3aba0f20b08115e92",
      "tree": "40e99be6a93d279c0848e67ae8435785d2c2beef",
      "parents": [
        "4622c2d8b65e267ede15bffd903faaf917642d7e"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Mon May 23 13:58:00 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:40 2016 -0700"
      },
      "message": "Rely on Tethering mutex for TetherInterfaceSM\n\nStop passing Tethering\u0027s mutex into TetherInterfaceSM, and instead\nsimply rely on Tethering to acquire its own mutex when accessing\ninstances of TetherInterfaceSM.\n\nWhile here, remove some boolean fields (previously guarded by the mutex)\nwhich duplicate state information.\n\nChange-Id: Ie6b2128970981786a5d64fbf700c9f3d0a6721fb\nTest: Compiles, unittests pass, WiFi tethering continues to work.\nBug: 28910007\n(cherry picked from commit 4bc8d6b1ac0cb7d4192c829a44d988516f0adbdb)\n"
    },
    {
      "commit": "4622c2d8b65e267ede15bffd903faaf917642d7e",
      "tree": "607b84f69c737979b5975376fbb62436dc1b761f",
      "parents": [
        "7f41e09b08440e060b9d971f2fd70e09b40d6948"
      ],
      "author": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Mon May 23 16:40:10 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:39 2016 -0700"
      },
      "message": "Rename TetherInterfaceSM to TetherInterfaceStateMachine\n\nChange-Id: I324690b20f37cef6d58872e21b126a87d16f7ec8\n(cherry picked from commit c5baad02503d17a812ee1b44cc817c7e18935ff1)\n"
    },
    {
      "commit": "179ea1b19c5a93b01a359d80d24286ed30ab6447",
      "tree": "1f2eeaec4c4c49ad5445f4df7ae4768d3692a37f",
      "parents": [
        "0f6605721e1778f67c3bca08401dab95712a6f9a"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Fri May 20 17:51:27 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:38 2016 -0700"
      },
      "message": "Remove dead code from TetherInterfaceSM\n\nBecause no code outside of unittests ever issued these commands\nto TetherInterfaceSM, we never executed any of the removed codepaths.\n\nChange-Id: Id54f6e4eaeff8b3486cd78ddcc8c2a31011e6436\nTest: Compiles.  Unittests continue to pass.\nBug: 28798823\n(cherry picked from commit 2ea4166c74e70d3796b06c91f37eb03eecdf4773)\n"
    },
    {
      "commit": "0f6605721e1778f67c3bca08401dab95712a6f9a",
      "tree": "44798d8b643053d8e12cd3166b5890d4edbbd69c",
      "parents": [
        "279eca3de6f0eb3cd9a947991fe9d1d5d2cd13c1"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Fri May 20 16:44:04 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:37 2016 -0700"
      },
      "message": "Remove transient StartingState from TetherInterfaceSM\n\nThis state immediately switched into the TetheredState.\nWe can safely remove it at only the expense of a misleading state\nbroadcast.\n\nBug: 28798823\nTest: runtest frameworks-services -c\n    com.android.server.connectivity.tethering.TetherInterfaceSMTest\n\nChange-Id: I295d830dbdb11717d6e05161d97787ffe871beb3\n(cherry picked from commit 79e7fde00d74c2b6d329f7341029ea6b04ac2d97)\n"
    },
    {
      "commit": "279eca3de6f0eb3cd9a947991fe9d1d5d2cd13c1",
      "tree": "1836c89151105cb242ba76fcdea47975bc9fac77",
      "parents": [
        "08725a8c4042aee177774f6275811aa88f26ef30"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Fri May 20 13:23:10 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:36 2016 -0700"
      },
      "message": "Expand test coverage of TetherInterfaceSM\n\nAdd tests for most normal case operations:\n  - State machine startup.\n  - Entering a tethered state (as USB interface and not)\n  - Handling the first notification of an upstream interface\n  - Handle changes in upstream interface\n  - Handle unrequested teardown correctly\n\nBug: 28833951\nTest: These tests pass\n\nChange-Id: I2c0c9141bab9eaa92faec8de10fa653fb6236a74\n(cherry picked from commit 1b3830a2afab565a38572ac5c3238a171b2d56d4)\n"
    },
    {
      "commit": "08725a8c4042aee177774f6275811aa88f26ef30",
      "tree": "2d5853884aabfef002d13ff937e6196cf4b8aec5",
      "parents": [
        "48c7d465063f17da93f56d1dbda1efb3c8124c1e"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Wed May 18 16:32:44 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:35 2016 -0700"
      },
      "message": "Add demonstration unittest for TetherInterfaceSM\n\nProve that the concept works by writing a trivial test.\n\nBug: 28833951\nTest: `runtest frameworks-services -c\n  com.android.server.connectivity.tethering.TetherInterfaceSMTest`\n\nChange-Id: I51911cef7f0d5165221845070befd085497c21a6\n(cherry picked from commit 1cc6ffd2b32846996520fdf43125da3ec2bbdf49)\n"
    },
    {
      "commit": "48c7d465063f17da93f56d1dbda1efb3c8124c1e",
      "tree": "18c19a1b073245438ffb4bb05eb155389f0b6a8d",
      "parents": [
        "0cbdaccf7182ba0ff6011a9d0e952584007101e0"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Thu May 19 11:54:54 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:34 2016 -0700"
      },
      "message": "Extract TetherInterfaceSM to its own class.\n\nAttempt to keep all existing logic in place, except:\n\n + Marked a constructor as public, rather than default visible.\n + Added TAG, DBG, VDBG, and decoder ringer statics.\n + Moved static constants related to USB IPs into TetherInterfaceSM.\n\nBug: 28833951\nTest: WiFi Tethering works on angler.\n\nChange-Id: Id961220a9045832354cfe7381e5e9c0d8f54bf90\n(cherry picked from commit e3f93b02bdfde6fffd2bcbb2e1dc0785ce9f8d5a)\n"
    },
    {
      "commit": "0cbdaccf7182ba0ff6011a9d0e952584007101e0",
      "tree": "140088934c31c355eb47fa1672e404ac8fe6f645",
      "parents": [
        "55e92882fd18404a392040edf5e7471ae5127ae3"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Wed May 18 13:45:20 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:34 2016 -0700"
      },
      "message": "Make Tethering.TetherInterfaceSM more self contained\n\nRemove references from the class into the containing class:\n  - Move functionality to bring up a USB interface into the class itself.\n  - Extract an interface to wrap methods where TetherInterfaceSM was\n    calling into other private classes of Tethering\n  - Inject necessary dependendencies into TetherInterfaceSM instances.\n\nBug: 28833951\nTest: Compiles.\n\nChange-Id: Ic96947417cf8734072d027b0f1cba8a1a1be7a74\n(cherry picked from commit 9a509ca728fbe264e1a5a6ccd5b39ffc0b5eceb4)\n"
    },
    {
      "commit": "d2c287326f6af897715d12dc12d293cc151fe170",
      "tree": "7bdfecfd354ba3992016f58113a540dc30aaa5fa",
      "parents": [
        "26072ea08203e14daa3b39c64d17b65e5c8026e1"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Tue May 17 13:41:56 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:31 2016 -0700"
      },
      "message": "Clean up class members in Tethering.TetherInterfaceSM\n\nMark final fields as such.\nGroup mutex protected fields together with the mutex that protects them.\nAlways access mutex protected fields under the mutex.\n\nBug: 28798823\nChange-Id: I96cdd5e063babb73e9f124107c5576c47801f34b\nTest: Compiles, Wifi tethering continues to work on angler.\n(cherry picked from commit 7b30e548a58ac96a23033db43c7aac79c86e938c)\n"
    },
    {
      "commit": "26072ea08203e14daa3b39c64d17b65e5c8026e1",
      "tree": "fd0139f7959bdd685e98b76da0c250e158e9e3d1",
      "parents": [
        "938f5e8dd3c767c0ee14924ed2568b4baf158da2"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Wed May 18 12:30:23 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:30 2016 -0700"
      },
      "message": "Move android.net.util.IpUtilsTest into a util/ directory\n\nThis makes the file structure match the package declaration.\n\nBug: None\nChange-Id: Id6999e1857322f6dfd4caf805002398f08c378d6\nTest: Eclipse stops complaining.\n(cherry picked from commit 5b9903189c8a185efc8a2a64af34b7cde6f3bfe1)\n"
    },
    {
      "commit": "938f5e8dd3c767c0ee14924ed2568b4baf158da2",
      "tree": "8b098c1b5a10df63ca2545c473984efa9ce952c3",
      "parents": [
        "b10249d64dc41ed2bdf5ce3503759770fd952b8c"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Mon May 16 16:19:07 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:22:30 2016 -0700"
      },
      "message": "Fix trivial warnings in Tethering.java\n\nAdd some missing @Override annotations.\nUse template arguments to avoid explicit casting.\nIgnore unclosed IndentingPrintWriter in dump().\n\nBug: 28798823\nTest: Compiles.\n\nChange-Id: I2cb6eb384ca23057c8059f4842b1c0d8248d03f8\n(cherry picked from commit 6d475970a200f162ba6845d25bb2a777bcaa611c)\n"
    },
    {
      "commit": "31a513b461321300bf3a575632663d97292f30c8",
      "tree": "3b716055d25586df95e50799a3304469f003371c",
      "parents": [
        "72baa1de4dadecf9ff309dc5e58c59b5bed654e0"
      ],
      "author": {
        "name": "Christopher Wiley",
        "email": "wiley@google.com",
        "time": "Thu May 05 16:41:55 2016 -0700"
      },
      "committer": {
        "name": "Mitchell Wills",
        "email": "mwills@google.com",
        "time": "Fri Aug 26 13:20:40 2016 -0700"
      },
      "message": "Remove unused method from NetworkManagementService\n\nBug: 28598325\nTest: Builds\n\nChange-Id: I6a226b3410cda4e12a9225741ec81cd12b48892f\n(cherry picked from commit 2103e78e0cdc5938de479cd857325c537a9fc185)\n"
    },
    {
      "commit": "175621f51734a1880186e48cc74a48119bcd708f",
      "tree": "a322b1e8a470f69a56552cd5da31928a854c6134",
      "parents": [
        "e71ecb2c4df15f727f51a0e1b65459f071853e35",
        "984827cc9c170b1092a30931b08c7a0d18865fd3"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 25 18:01:05 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 25 18:01:06 2016 +0000"
      },
      "message": "Merge \"Fix suspend crash issue on no GPU platform.\""
    },
    {
      "commit": "984827cc9c170b1092a30931b08c7a0d18865fd3",
      "tree": "ae53f5b3dfb94022840b22c46f2143fd00f49cca",
      "parents": [
        "d0a0ae349c6bbfe4c9cae5d5d2e06085ad9b56e1"
      ],
      "author": {
        "name": "Ivan.liu",
        "email": "xiaowen.liu@freescale.com",
        "time": "Wed Aug 24 17:19:03 2016 +0800"
      },
      "committer": {
        "name": "Ivan.liu",
        "email": "xiaowen.liu@freescale.com",
        "time": "Thu Aug 25 10:50:54 2016 +0800"
      },
      "message": "Fix suspend crash issue on no GPU platform.\n\neglChooseConfig should return false only if an error occured.\nIf eglChooseConfig is called with a valid attribute list,\nno internal EGL errors occur. And if no available config matches\nthe requested attribute list, no configs are returned.\nNot only the return value of eglChooseConfig should be checked,\nthe \u0027num_config\u0027 out-param must be inspected too.\nIf no configs were returned, and no error occurred, then \u0027num_config\u0027 will be 0.\n\nChange-Id: Id36d88820b8e33713bc83e0d4b90c3fee7f005fd\nSigned-off-by: Xiaowen Liu \u003cxiaowen.liu@nxp.com\u003e\n"
    },
    {
      "commit": "401c208db8ba78f752b641f27aac9f9b0447498e",
      "tree": "00cbbf71ec193a98bd4b9a5cdcc508bdf8300687",
      "parents": [
        "53ff75bb68ccfaeb441dc41d57509635b0ab0f14"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 22 11:17:13 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Mon Aug 22 11:40:23 2016 -0700"
      },
      "message": "Add WorkSource to BLE scanning API\n\nThis will allow apps that do work on behalf of others to correctly blame\nthose apps for the power implications of BLE scanning.\n\nBug:22718669\nChange-Id: I1cbca8cf7bbe1ec5b804228f466fd9dd6fc68183\n"
    },
    {
      "commit": "67ffd5e61730d4074c174fa72fb752666cc8bbe0",
      "tree": "94c43e292d8b72071eeec1aa6f8e4d06e16d56a4",
      "parents": [
        "9b36ce973e458125807b59c002d3a1602e0b800d",
        "c76a3ac224833e7d3542f37543cfe4f63723e3f3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 17 13:27:29 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 17 13:28:04 2016 -0700"
      },
      "message": "resolve merge conflicts of c76a3ac to stage-aosp-master\n\nChange-Id: Ifff16bdc42e8326f3f60cf4b92688c445cb4db25\n"
    },
    {
      "commit": "1fda533936415b52d537b0056304ff5bd8af8519",
      "tree": "0fe7a682841772dbe94148d8b4b6036a39b46288",
      "parents": [
        "c5b376ab66d20defca0a60a4ba74bdbb31444d55"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 17 08:45:39 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Aug 17 08:45:39 2016 -0700"
      },
      "message": "Squashed commit of the following:\n\ncommit efa6f355b06675aa4d0879fd279e22c16d5c046c\nAuthor: Mikhail Naganov \u003cmnaganov@google.com\u003e\nDate:   Wed Aug 10 12:25:13 2016 -0700\n\n    MIDI: Use server-side socket in blocking mode for virtual devices\n\n    Since virtual MIDI servers may misbehave, blocking mode will throttle\n    them if clients are not coping with their sending speed.\n\n    Bug: 29413812\n    Change-Id: I9c4a2a7a7ea3ea060c93fedc7d0f033427c557c9\n\ncommit 755dfb5f83749d3963c63d98d692307f8271c804\nAuthor: Mikhail Naganov \u003cmnaganov@google.com\u003e\nDate:   Fri Jul 8 13:26:19 2016 -0700\n\n    Protect MIDI framework against client blocks in MidiReceiver.onSend\n\n    Make the server-side socket non-blocking when creating MidiOutputPort\n    for clients. Thus if a client ceases to read from its side of the\n    socket pair, the server will just fail to write instead of blocking.\n\n    One drawback is that the MidiOutputPort on the client can\u0027t indicate\n    that it has become dysfunctional, but it\u0027s not possible without\n    changing the API.\n\n    Bug: 29413812\n    Change-Id: I9dfcbdd214a815cea8fd1365324fd78ca459268a\n\ncommit c740b13953761f58233ac651a0b5227733b1bdcc\nAuthor: Mikhail Naganov \u003cmnaganov@google.com\u003e\nDate:   Fri Jun 17 04:11:25 2016 -0700\n\n    UsbMidiDevice: Clean up terminology and fix comments\n\n    When working with physical MIDI devices, an *input* stream is used\n    for reading from *output* port of the device, and vice versa. Thus,\n    using \"input\" and \"output\" without specifying whether it\u0027s a stream\n    or a port is confusing.\n\n    Clarify names of counter variables, and fix a couple of comments\n    that were incorrect due to this confusion. No functional changes.\n\n    Change-Id: If561eaca4bade94e9296d2c703c9fcebc91296e2\n\ncommit 4269c6417287737624f6165a8bbeb5aa427de9a0\nAuthor: Glenn Kasten \u003cgkasten@google.com\u003e\nDate:   Thu May 5 18:49:16 2016 -0700\n\n    Update MIDI package summary\n\n    Bug: 28625060\n    Change-Id: If552ca8e1a0666d402b5f536699bf3fb09c1e324\n\ncommit 862d40b73168bde7d0be5280d997985c18061014\nAuthor: Phil Burk \u003cphilburk@google.com\u003e\nDate:   Tue Apr 19 15:56:24 2016 -0700\n\n    MidiDevice: do not open ports on closed device\n\n    Fix involves client side mIsDeviceClosed flag.\n\n    Bug: 24949216\n    Change-Id: I666284a787fbb9a710d2372fb424e8e54f6a2825\n    Signed-off-by: Phil Burk \u003cphilburk@google.com\u003e\n\ncommit 6f1de358b9f2616e03f4655f01454770915ddd66\nAuthor: Phil Burk \u003cphilburk@google.com\u003e\nDate:   Mon Apr 18 16:05:28 2016 -0700\n\n    MidiService: fix resource leak\n\n    The proxy object was being used to match when adding or removing objects.\n    But they are different each time. So now we use an asBinder() object.\n\n    Bug: 28153736\n    Change-Id: I1bccebf1e9464668db757ff08b41902d0cf0e3a7\n    Signed-off-by: Phil Burk \u003cphilburk@google.com\u003e\n\ncommit f7386bd535bb8a1d7f8df8f44a1748ab770c991a\nAuthor: Phil Burk \u003cphilburk@google.com\u003e\nDate:   Tue Apr 5 14:19:53 2016 -0700\n\n    MidiDevice: fix connectPorts for same Process\n\n    If connectPorts() was called for a device in the same process then\n    the connection would die when the ParcelFileDescriptor was closed.\n\n    Bug: 26406775\n    Change-Id: Id0538452593b4761ac2a93d366ade76d2e35ce73\n    Signed-off-by: Phil Burk \u003cphilburk@google.com\u003e\n\nChange-Id: I4dfc2a2cbaf04bf1a790ae2cb39bf74fb5bb16ac\n"
    },
    {
      "commit": "2f2bf4014a41d285e8862fd2366424a5027fb2cd",
      "tree": "069dfb92b44579ba0726907e56975deea7bfef7c",
      "parents": [
        "ea537bf5b3d1dacc2fc904e238ee4e15aeb0d707"
      ],
      "author": {
        "name": "Phil Burk",
        "email": "philburk@google.com",
        "time": "Tue Apr 05 11:25:36 2016 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Aug 16 16:57:36 2016 -0700"
      },
      "message": "UsbMidiDevice: fix MIDI flush()\n\nThe proxy MidiReceiver in the USB device was not forwarding the flush\ncommand to the event scheduler.\n\nBug: 25511696\nChange-Id: I6a4759b71bc8f9ae3e20aed1238f62a2ed405e24\nSigned-off-by: Phil Burk \u003cphilburk@google.com\u003e\n"
    },
    {
      "commit": "bad369d63e975b7360693cebd1728765ddc7b924",
      "tree": "3d3b797ef02ba13ed6d78430040ccc0782ebcc2b",
      "parents": [
        "5b63231a31dbeafc0dfb260b2ebc52f536dc3441"
      ],
      "author": {
        "name": "zhangshuxiao",
        "email": "zhangshuxiao@xiaomi.com",
        "time": "Tue Aug 09 18:48:04 2016 +0800"
      },
      "committer": {
        "name": "Shuxiao Zhang",
        "email": "zhangshuxiao@xiaomi.com",
        "time": "Wed Aug 10 03:49:54 2016 +0000"
      },
      "message": "[NetworkPolicy]: Fixes the crash issues caused by null pointer.\n\nWhen handleRegisterNetworkAgent in ConnectivityService,\nthe networkinfo of NetworkAgentInfo will be set to null.\nSo we need to handle the null pointer of state.networkInfo.\n\nChange-Id: I2a278f1f1b2455057fd2ed323ff4df340c3cbca9\nSigned-off-by: zhangshuxiao \u003czhangshuxiao@xiaomi.com\u003e\n"
    },
    {
      "commit": "cbd4ad1f7e23d3dd261c872accb2ed555b16b279",
      "tree": "b3a51834312558c27ff654b8ef95816ec71ad22e",
      "parents": [
        "cc6fd4549b8574143e8cff3b32771448a93dbc8c",
        "78a72f069827733d5089bd2e6734469bd755908b"
      ],
      "author": {
        "name": "joonyoung.cho",
        "email": "joonyoung.cho@lge.com",
        "time": "Mon Aug 08 21:53:34 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 08 21:53:34 2016 +0000"
      },
      "message": "Merge \"fix safeMode status in AppWidgetService\"\nam: 78a72f0698\n\nChange-Id: I21559690f6371102cf48132d8930343923d60011\n"
    },
    {
      "commit": "78a72f069827733d5089bd2e6734469bd755908b",
      "tree": "a89c56ff5450958c51eabdb6b124dc1b40c05e88",
      "parents": [
        "3f67a1855ea444919282590ec3966bd49a88e3ad",
        "2f30cc1cfeadc9501e01089b95f7f1567a134573"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Aug 08 21:36:45 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 08 21:36:46 2016 +0000"
      },
      "message": "Merge \"fix safeMode status in AppWidgetService\""
    },
    {
      "commit": "ca7a43b5dad127def73b86c0540acce7a895609d",
      "tree": "50db21db4f31cc5d5f4a216afc7201951b9c693e",
      "parents": [
        "52fdb4750ad0ba1e857bb8bc33a62c51983c5299",
        "b68106cf2a32a0ac9fbd982279878a0d9e4f6b9d"
      ],
      "author": {
        "name": "songjinshi",
        "email": "songjinshi@xiaomi.com",
        "time": "Wed Aug 03 10:03:59 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 03 10:03:59 2016 +0000"
      },
      "message": "Merge \"Fixes the system server crash issue caused by uncatched exception.\"\nam: b68106cf2a\n\nChange-Id: Ia28f7bdad020dbb3695934cae1f193037de41fcb\n"
    },
    {
      "commit": "52fdb4750ad0ba1e857bb8bc33a62c51983c5299",
      "tree": "31fabeaaeba2e8eb22e552804a675bf6b7cede93",
      "parents": [
        "5e23ab394a9d15925be5775acf8551773e502df2",
        "554284edf392d84db1d75316c250eddf74d19082"
      ],
      "author": {
        "name": "Ganesh Mahendran",
        "email": "opensource.ganesh@gmail.com",
        "time": "Wed Aug 03 10:03:53 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 03 10:03:53 2016 +0000"
      },
      "message": "Merge \"remove x attribute of java file\"\nam: 554284edf3\n\nChange-Id: I05553fd2ecc175858e0923e68e62305149e8dd3e\n"
    },
    {
      "commit": "b68106cf2a32a0ac9fbd982279878a0d9e4f6b9d",
      "tree": "0310ebe78b3a51bff622315fcab1cd50d31b701d",
      "parents": [
        "554284edf392d84db1d75316c250eddf74d19082",
        "c5e249b9e06b3637a2931b338b5d5ce7b7cfb1e5"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Wed Aug 03 09:54:53 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 03 09:54:53 2016 +0000"
      },
      "message": "Merge \"Fixes the system server crash issue caused by uncatched exception.\""
    },
    {
      "commit": "7f7df654755eaa0c1c92d7bdafdf891514ae53b7",
      "tree": "2aa5a5adc6907914cd9ffe5e314a4baf220e7e25",
      "parents": [
        "6eb30f206085c6d6f036d0f6ec9b3b7c200feda9"
      ],
      "author": {
        "name": "Ganesh Mahendran",
        "email": "opensource.ganesh@gmail.com",
        "time": "Tue Jun 28 15:59:45 2016 +0800"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Tue Aug 02 19:33:26 2016 +0000"
      },
      "message": "remove x attribute of java file\n\njava file do not need x attribute, so this patch\nremoves it.\n\nChange-Id: I807722ac3f40688f032228294d61a4266d0e9e60\nSigned-off-by: Ganesh Mahendran \u003copensource.ganesh@gmail.com\u003e\n"
    },
    {
      "commit": "c5e249b9e06b3637a2931b338b5d5ce7b7cfb1e5",
      "tree": "d127a37d3fb95ba2951ce584b01fac91563cd5a9",
      "parents": [
        "6eb30f206085c6d6f036d0f6ec9b3b7c200feda9"
      ],
      "author": {
        "name": "songjinshi",
        "email": "songjinshi@xiaomi.com",
        "time": "Wed Jul 27 20:36:46 2016 +0800"
      },
      "committer": {
        "name": "songjinshi",
        "email": "songjinshi@xiaomi.com",
        "time": "Tue Aug 02 09:47:09 2016 +0800"
      },
      "message": "Fixes the system server crash issue caused by uncatched exception.\n\nThe restat method of the StatFs may throw an IllegalArgumentException,\nso we must to catch it and throw an IOException for the caller\nof the trimToFit(),this fix can improve system stability.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d218359\n\nChange-Id: I54a2f569eea67d3ab628944e3586ca918ec70283\nSigned-off-by: songjinshi \u003csongjinshi@xiaomi.com\u003e\n"
    },
    {
      "commit": "8f7223e420785962487995baad89f654fa1cc8ce",
      "tree": "e21abbfd4822eecc032b168304e9d31b4e398888",
      "parents": [
        "4643acaa34f2d7bddaf86c9dbe21bce0fc5aec21",
        "c95e7a30144cdf7ca3dfa3c28b6ac3651e86c9fe"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jul 20 18:10:47 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 20 18:10:47 2016 +0000"
      },
      "message": "Merge \\\"Remove dependency on android_alarm.h.\\\"\nam: c95e7a3014\n\nChange-Id: I19908fa29772c89b8112e371702da6197b20465d\n"
    },
    {
      "commit": "338893e47ed8e2a913e5def987469647809cdbc6",
      "tree": "140f3b8f421413e8a89393f0c766b6747aaa80b3",
      "parents": [
        "e2994438d24645d5b5b2345db170354e6354ae6e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jul 18 16:58:52 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jul 19 12:23:26 2016 -0700"
      },
      "message": "Remove dependency on android_alarm.h.\n\nandroid_alarm.h no longer exists in upstream android kernels. Since it\u0027s\nonly used by the AlarmManagerService, copy in the parts of the file that\nare needed into that one file.\n\nBug: 30072483\nChange-Id: I5c994dfa2ad261da48a67e5c35dc4b6618b82aa1\n"
    },
    {
      "commit": "e82b43f77efdab04e6ff52ff5820669afd204227",
      "tree": "380fdd8a9475cf7b8a7dee304b1fb42bc2d158da",
      "parents": [
        "2747eb7e94bbc393f8a1583fb2af43610c6b9c79",
        "ee4c8fb9ebfd014fc6bc0fd2cc24ada2c078455e"
      ],
      "author": {
        "name": "Hugo Benichi",
        "email": "hugobenichi@google.com",
        "time": "Tue Jul 12 13:15:41 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 12 13:15:41 2016 +0000"
      },
      "message": "Merge \\\"Fix unsafe concurrent access in LegacyTypeTracker\\\"\nam: ee4c8fb9eb\n\nChange-Id: I928b2c6ef8e20e197425c214242287185a9daa06\n"
    },
    {
      "commit": "5224f00b5110e37a288692a3449387aa199a1fc3",
      "tree": "b9d70ffd007e07b3a52c3703b5549a68ccc4eba3",
      "parents": [
        "9a3fbe116209a6d44a5f9672a3a249cb8932e3d2"
      ],
      "author": {
        "name": "Hugo Benichi",
        "email": "hugobenichi@google.com",
        "time": "Tue Jun 21 09:48:07 2016 +0900"
      },
      "committer": {
        "name": "Lorenzo Colitti",
        "email": "lorenzo@google.com",
        "time": "Tue Jul 12 21:56:40 2016 +0900"
      },
      "message": "Fix unsafe concurrent access in LegacyTypeTracker\n\nThis patch adds synchronization inside LegacyTypeTracker so that\ngetNetworkForType() can safely run concurrently with remove().\n\nWithout synchronization if remove() removes the last network for a\ngiven type while getNetworkForType() runs for the same type, it is\npossible that getNetworkForType tries to access the head of an empty\nlist, resulting in a runtime exception.\n\nThis issue was found by zoran.jovanovic@sonymobile.com who proposed a\nfix in AOSP (Change-Id: Ia963662edb9d643790e8d9439e4dbdcac4c2187b).\n\nThis patch differs from the fix proposed by the bug reporter and tries\ninstead to do the minimum amount of locking to make getNetworkForType\nsafe.\n\nBug: 29030387\n\n(cherry picked from commit 78caa25870391f676e1edbd448b5ff3e12a99a1e)\n\nChange-Id: I915aac527fc8828b32bf35fee870add2dfb11d8d\n"
    },
    {
      "commit": "9a3fbe116209a6d44a5f9672a3a249cb8932e3d2",
      "tree": "112ace698b357534985394398e561c8cb7ef2bee",
      "parents": [
        "18941cb53f6257690ab6966fc22752af6c3780ce",
        "b87ce123594e95de5596e828dfc84fae359d804e"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Mon Jul 11 14:32:02 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 11 14:32:02 2016 +0000"
      },
      "message": "Merge \"Solve the infinite loop on clearExternalStorageDataSync\""
    },
    {
      "commit": "2c565826bac683a59cdcf4694077d75e5adf0670",
      "tree": "e2392150fe091ddd405bd2a37e360fa68ebdb177",
      "parents": [
        "b417585b2973433eb8878f0fa323c6b1ec29d910",
        "06561db2078241dccd473e85c7015536f365c329"
      ],
      "author": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Thu Jul 07 15:31:16 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 07 15:31:16 2016 +0000"
      },
      "message": "Merge \\\"Resolve deadlock between ActivityManagerService and PowerManagerService\\\"\nam: 06561db207\n\nChange-Id: I7f78cf1ef0c490aceb527dbc82228d00fae2f7e4\n"
    },
    {
      "commit": "43f5de0125a22e9bcc4cf675034116f754f3bfc2",
      "tree": "6b544b456ebece3903c3d8534c3d99f4bfc95e30",
      "parents": [
        "fcae61308ca0a0dc91dc8d8d1e798c6313d202e1"
      ],
      "author": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Wed Jul 06 02:12:10 2016 +0530"
      },
      "committer": {
        "name": "Shibin George",
        "email": "shibing@codeaurora.org",
        "time": "Thu Jul 07 19:45:35 2016 +0530"
      },
      "message": "Resolve deadlock between ActivityManagerService and PowerManagerService\n\nActivityManagerService lock and PowerManagerService.mLock can\nbe acquired in different threads in different orders.\nregisterReceiver() here tries to acquire ActivityManagerService\ninternally while holding mLock. A particular call from\nWindowManagerService acquires these locks in reverse order.\nThis deadlock can be resolved by moving registerReceiver()\nto another thread.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d215254\n\nChange-Id: I12cd610e61f212a3fb5e441f2c7a557c90afbda4\nSigned-off-by: Shibin George \u003cshibing@codeaurora.org\u003e\n"
    },
    {
      "commit": "fcae61308ca0a0dc91dc8d8d1e798c6313d202e1",
      "tree": "96db6807e19628b8914982d6b4794ca043cea36b",
      "parents": [
        "5b6c03415c0ceb3f7f8b9022ccdab0f1d479616e",
        "8ebba5cb83e70d3f30ee5a77565eafe9229f2a1a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jul 06 07:58:53 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 06 07:58:53 2016 +0000"
      },
      "message": "Merge \"MediaSession: Use mHandler for sending a pending intent\""
    }
  ],
  "next": "5f5bd8848c3374e6429a82840573526c637fffc7"
}
