)]}'
{
  "log": [
    {
      "commit": "57e490cf8cf85932c11208c64bbd2b35315ffbc8",
      "tree": "38070ad246bd7003c680149a74683ab7c951a832",
      "parents": [
        "78a20be77acb6595ed112f2a2642ed569f6082b5"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Thu Feb 09 14:47:53 2017 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Thu Feb 09 14:52:43 2017 +0000"
      },
      "message": "Partial Revert \"Replace com.android.internal.util.Predicate with java.util.function.Predicate\"\n\nThis partially reverts commit 3e5fbca0c57742f28f5c7e6bda6c3500b9471b47.\n\nBug: 35187548\nBug: 30188076\nBug: 35089332\nTest: make checkbuild\nChange-Id: I7ab4279aab604e3d56003b0a59867948aebabd28\n"
    },
    {
      "commit": "3e5fbca0c57742f28f5c7e6bda6c3500b9471b47",
      "tree": "5bee6ac83dc3cc0b8f9421a61b2108b994c587a9",
      "parents": [
        "97fca8c035c7daa9cb1058aa37f0d8fb3ec73f70"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Feb 07 15:04:10 2017 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Feb 07 16:57:54 2017 +0000"
      },
      "message": "Replace com.android.internal.util.Predicate with java.util.function.Predicate\n\nBug: 35089332\nBug: 30188076\nTest: make checkbuild\nMerged-In: I0a5b4bf520fc39b59d8d790b01e9cff0d54e6d21\nChange-Id: I58e4e35e7b7315033d893748f7c79e1ba6732f39\n"
    },
    {
      "commit": "ccb04450279c53eda250ac3e20b75cd07bcd1f7e",
      "tree": "b7465ccb8c71931bcc64f3fa19c90be70d6baf54",
      "parents": [
        "0ac7232b7cd55806b4fd231899a57a20c7f7bdd8"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Jan 10 12:08:23 2017 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Thu Jan 19 09:43:05 2017 +0000"
      },
      "message": "Prepare for removal of legacy-test from default targets\n\nIn preparation for removing junit classes from the Android API\nthe legacy-test target will be removed from the\nTARGET_DEFAULT_JAVA_LIBRARIES. This change adds explicit\ndependencies on junit and/or legacy-android-test to ensure that\nmodules will compile properly once it is removed.\n\n(cherry picked from 6387604f9e672ece85e07c4bcbd7be396867f06f)\n\nBug: 30188076\nTest: make checkbuild\nMerged-In: I13e88297731253420e4e5f5291d503f13a39a156\nChange-Id: I58446eb8c45d8ac2bcdbc9fa40d1321e811bdd4b\n"
    },
    {
      "commit": "eef35dd29ae2cf9d78c052ef8b8a49aa4da55be9",
      "tree": "b505adc571a8f6d18add650f1ab7dfba8d331808",
      "parents": [
        "06178a39f880a12f881bf1c4144b9e54601dfd4a"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Mon Dec 12 12:22:31 2016 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Wed Dec 14 10:41:05 2016 +0000"
      },
      "message": "Copy junit-runner files into test-runner.\n\nThe android.test.runner target forms part of the Android API and\nso must maintain backwards compatibility. The junit classes that\nbelong in there are copied here to ensure that they do not\nchange when external/junit is upgraded.\n\nBug: 30188076\nTest: make checkbuild and checked android.test.runner contents\nChange-Id: I947144c47ae1c3eb361a43c39bdd03dc11b9575f\n"
    },
    {
      "commit": "9249205d1ba91065b7f314a05706d2b1011ee71b",
      "tree": "b10abe2bd5bb692687d2ee8f3cdff46bb7ef1378",
      "parents": [
        "19fc36fa336c65405f88dbcef907ecc0feace7e7"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Thu Dec 01 13:50:06 2016 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Dec 06 14:32:41 2016 +0000"
      },
      "message": "Replace core-junit with junit\n\nBug: 30188076\nTest: make checkbuild\nChange-Id: I0cb6f89907eb099714b54bac57b51c4be186c3e0\n"
    },
    {
      "commit": "0342ab5b9447481ad82740dde01595bf3c288e15",
      "tree": "e6bec185c8117cd62fb0baaebb8a7591c90789c2",
      "parents": [
        "c6c005ef5b927be1b49b4d18a0b887b571fb3ca4"
      ],
      "author": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Mon Nov 21 15:26:00 2016 +0000"
      },
      "committer": {
        "name": "Paul Duffin",
        "email": "paulduffin@google.com",
        "time": "Tue Nov 22 12:27:53 2016 +0000"
      },
      "message": "Move JUnit classes from here into external/junit\n\nChecked that android.test.runner had the same classes in as\nbefore the change.\n\nThese classes are legacy 3.8.1 classes, they are not in 4.10 at\nall. They appear to have been left here by accident. Looking at\nthe history it appears that at one time there were copies of\nJUnit 3.8.1 junit.runner classes in frameworks and\nexternal/junit. The classes here were upgraded to 4.10 but even\nthough these classes had been deleted immediately after 3.8.2\nwas released they were not removed, instead they appear to have\nbeen reformatted as part of the upgrade. The external/junit\nsource was upgraded to 4.10 about two weeks later which seems to\nhave been done correctly. About three months after that the\nclasses here that were duplicates of those in external/junit\nwere removed from here leaving the legacy classes from 3.8.1.\n\nI could not find any usages of these classes and they are not in\nthe public API so they can probably be removed altogether.\nHowever, for now I will simply move them into external/junit as\ndescribed and remove them when upgrading JUnit there to 4.12.\n\nBug: 30188076\nTest: Built android.test.runner and checkapi\nChange-Id: I88687889315c041d999fe7e61b9652ac8406165c\n"
    },
    {
      "commit": "4ece3d6bb18a609afcd0e82f0340b7d36ba24eea",
      "tree": "5cdbf44c4ed33767fe334feca6add5d106f40714",
      "parents": [
        "f184789ae9154059a2b74cab386a65b04cefc9c0"
      ],
      "author": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Thu Jun 16 18:05:41 2016 -0700"
      },
      "committer": {
        "name": "Adam Lesinski",
        "email": "adamlesinski@google.com",
        "time": "Tue Jun 21 17:55:58 2016 -0700"
      },
      "message": "ContextImpl: Keep DisplayAdjustments and Display in sync\n\nMake sure that when our Resources get updated, that DisplayAdjustment\nand Display properly reflect the potentially new screen dimensions.\n\nBug:28388969\nChange-Id: I340550ea094ece87abc8790dd46aaa60ab3cedd3\n"
    },
    {
      "commit": "ebdc157bc0d41decfdcade19bd3bda680ace499b",
      "tree": "3e1bcec34e3f1d0c556854fddd83bdba6ec2e69c",
      "parents": [
        "29c01336db4b2db5582904597559b14563543054"
      ],
      "author": {
        "name": "Stephan Linzner",
        "email": "slinzner@google.com",
        "time": "Wed May 25 15:48:29 2016 -0700"
      },
      "committer": {
        "name": "Stephan Linzner",
        "email": "slinzner@google.com",
        "time": "Wed May 25 22:54:27 2016 +0000"
      },
      "message": "Un-deprecated Android mock testing APIs\n\nSome mock APIs don\u0027t have an ATSL equivalent yet\nwill be deprecated in O timeframe now.\n\nChange-Id: Ibb7ec32fba3d16f0ea02d100f4e4fc8f011288f0\nBug: 28295815\n"
    },
    {
      "commit": "a9c2500a6863dabdd786f17a25ce0bf3683109a2",
      "tree": "30a9b8acaeaf91ac0c90ede24fbfa6deac2cd441",
      "parents": [
        "8bb7ad598560fda42ec256f02ba69cf54b433a85"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Apr 13 19:25:56 2016 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Apr 13 19:31:40 2016 -0700"
      },
      "message": "Disallow disable of the system shared libs.\n\nbug:28173410\n\nChange-Id: If731f2d90312a083bb940f83431ba3eccf213947\n"
    },
    {
      "commit": "78c9eb8947538f63d2e06684663d400991dfff8f",
      "tree": "8aade80caa37234ec166da1b2d43d4b453acbe6a",
      "parents": [
        "518bae5fa411327b14ca1e1496f6c9836da0eccd"
      ],
      "author": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Tue Apr 12 15:51:35 2016 -0700"
      },
      "committer": {
        "name": "Suprabh Shukla",
        "email": "suprabh@google.com",
        "time": "Tue Apr 12 18:23:56 2016 -0700"
      },
      "message": "Added api to delete cache files for a given user\n\nAdded an api to delete application cache files for a specific user. This\nallows settings to clear cache files for work profile apps as well.\n\nBug: b/25338468\nChange-Id: I52d4944a7a03b6d63ad44dd6bb868aec62815eab\n"
    },
    {
      "commit": "70168dde6e1da06042818350fc6e258188d001ae",
      "tree": "42dce8046e15800facbd1a0bd2b33e1a7f97e6a1",
      "parents": [
        "60328375c85e2a9b48139b553912606e19865196"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 30 21:47:16 2016 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 30 23:31:39 2016 -0600"
      },
      "message": "Make Parcelable classes final, API cleanup.\n\nRemove some Context methods that leaked through.  Add lint rule to\nrecommend using List\u003c? extends Parcelable\u003e instead of Parcelable[].\n\nBug: 27932224, 27930145, 27932911\nChange-Id: Ia302de46cdb0c5101fa175a09316df91aeefcf0d\n"
    },
    {
      "commit": "8a372a0a280127743ce9a7ce4b6198c7a02d2a4f",
      "tree": "f2446f9d00e6dc0be78885db357719b9b3830e48",
      "parents": [
        "58ae278294017abca0dffc95f006ae646c88db89"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Mar 16 16:25:45 2016 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Mar 17 14:49:08 2016 -0600"
      },
      "message": "Refactoring FBE APIs based on council feedback.\n\nMostly consists of removing the word \"encryption\" from most APIs,\nsince we can\u0027t actually make promises about the data being encrypted.\n\nBug: 27531029\nChange-Id: Iace9d7c4e64716abf86ed11847c40f3947e1d625\n"
    },
    {
      "commit": "bbb3ff2b2a29d42771a9ce2fe2d6f576cff62617",
      "tree": "8ac2249728f187ca613a274f85755875c7c9ee78",
      "parents": [
        "466b702cac1ba6102c0c96b6528b4b0b30cd0a0b"
      ],
      "author": {
        "name": "Sudheer Shanka",
        "email": "sudheersai@google.com",
        "time": "Thu Jul 09 15:39:23 2015 +0100"
      },
      "committer": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Wed Mar 16 01:42:23 2016 +0000"
      },
      "message": "Flush package restriction changes for a user.\n\nChange-Id: I7c4481f820b6b368487d00de6c783e64cec99f4b\n"
    },
    {
      "commit": "66ae66a7f74ee835807a141a216afbb254664510",
      "tree": "34fd21f558dd52533d9e47ac48f135decf89320d",
      "parents": [
        "60b7bcc614ae818c902e1a0ed3b2381e23eba61c"
      ],
      "author": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Thu Feb 18 15:41:21 2016 -0800"
      },
      "committer": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Wed Mar 02 14:55:04 2016 -0800"
      },
      "message": "Adding getManagedUserBadgedDrawableForDensity() to PackageManager.\n\nIt allows badging an image regardless of of the user (no\nuser id parameter). The styling for managed users is applied.\n\nThis is useful for new cases where the existing functions\nwouldn\u0027t badge the icon, but we need it.\n\nBug: 25192539\nChange-Id: I2fd2f226f626fb2e6cda1cfe072013350e12b41c\n"
    },
    {
      "commit": "093622f089a84298b5cfaab839eef6678292de5d",
      "tree": "4457547077c5881408a94c6cd2b1c6ea5a5a3e20",
      "parents": [
        "9f68f41a5866e1feb810b16c769705c10e850d5d"
      ],
      "author": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Wed Mar 02 01:51:42 2016 +0000"
      },
      "committer": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Wed Mar 02 01:51:42 2016 +0000"
      },
      "message": "Revert \"Adding getManagedUserBadgedDrawableForDensity() to PackageManager.\"\n\nThis reverts commit 9f68f41a5866e1feb810b16c769705c10e850d5d.\n\nCaused breakage.\n\nChange-Id: I441737f61f6f38ed9f440211b52bbac0f74982e3\n"
    },
    {
      "commit": "9f68f41a5866e1feb810b16c769705c10e850d5d",
      "tree": "77defdaf8ce5c43281b824a7923fe6809d8e0273",
      "parents": [
        "85f2ded23e0e77678f606dfa3ea4536d71c6edd2"
      ],
      "author": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Thu Feb 18 15:41:21 2016 -0800"
      },
      "committer": {
        "name": "Vadim Tryshev",
        "email": "vadimt@google.com",
        "time": "Wed Mar 02 00:41:26 2016 +0000"
      },
      "message": "Adding getManagedUserBadgedDrawableForDensity() to PackageManager.\n\nIt allows badging an image regardless of of the user (no\nuser id parameter). The styling for managed users is applied.\n\nThis is useful for new cases where the existing functions\nwouldn\u0027t badge the icon, but we need it.\n\nBug: 25192539\nChange-Id: I20ca2d7265cbc3a47c050a72ec1843cc0a481c74\n"
    },
    {
      "commit": "a67932374dbbfbe4c6440d223fc7922b313dd957",
      "tree": "59ba1c512eb7732c9913c2306017a67650342bd5",
      "parents": [
        "72041bb2c6cbdab53f00d23cd7f832acf2cbfb5d"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed Feb 24 22:46:00 2016 +0000"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue Mar 01 07:19:33 2016 -0800"
      },
      "message": "Revert \"Revert \"Remove deprecated methods / classes\"\"\n\nThis reverts commit 5cbeb5902633646fbc0a1be252081e77aaaee7b4.\n\nChange-Id: Id96010364d65e6131221ebbcc8ce5889a2da256c\n"
    },
    {
      "commit": "fe01ea05dd196acaf95a61e169f6b75654ae0875",
      "tree": "0a01ef705adc53a56558f1deff7111fb117e45ea",
      "parents": [
        "b7838209cb9b3e5f89c31487efc7b3f9555a9013",
        "5cbeb5902633646fbc0a1be252081e77aaaee7b4"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed Feb 24 22:45:48 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 24 22:45:50 2016 +0000"
      },
      "message": "Merge \"Revert \"Remove deprecated methods / classes\"\" into nyc-dev"
    },
    {
      "commit": "5cbeb5902633646fbc0a1be252081e77aaaee7b4",
      "tree": "47e3242796eabfe4e66c9301f90b4f235d38a4d6",
      "parents": [
        "9706c01f9b92cee64bb84782138735225c8588e0"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed Feb 24 22:45:00 2016 +0000"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed Feb 24 22:45:00 2016 +0000"
      },
      "message": "Revert \"Remove deprecated methods / classes\"\n\nThis reverts commit 9706c01f9b92cee64bb84782138735225c8588e0.\n\nChange-Id: I14c53ab140220e48f6728b1173ea58760bbeb7f9\n"
    },
    {
      "commit": "ca67844e0c6b564970b8d329009c0d110888a3fc",
      "tree": "fc7490d5dbf1b1134630fd70dbb0a71770088906",
      "parents": [
        "8a5a25db42d87566173cbca99e5a9d52f0874078",
        "9706c01f9b92cee64bb84782138735225c8588e0"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Wed Feb 24 21:02:56 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 24 21:02:58 2016 +0000"
      },
      "message": "Merge \"Remove deprecated methods / classes\" into nyc-dev"
    },
    {
      "commit": "2c1ba9a961d4f96c26df260ee437655ad9e7c03e",
      "tree": "9e31be1e3cb94b1bd2a9cdf96f12e42e92dcfc09",
      "parents": [
        "18026642213698fc095a9510c2431862d3a7f310"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Feb 17 15:29:38 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Feb 18 10:54:11 2016 -0700"
      },
      "message": "Make BackupManager encryption aware.\n\nBackup requires both CE and DE storage to be available, so delay\nspinning up the backup system until the user is unlocked, since\nthat\u0027s when CE storage becomes available.  Note that devices without\nFBE immediately transition USER_SYSTEM into the unlocked state,\nsince their CE is always available.\n\nOffer to backup and restore files under both CE and DE.  Since DE\nis effectively the same as CE, most logic is simply duplicated for\nnow, but it could be simplified in the future.  Since system apps\ncan force their default storage location to DE, we always build\nexplicit CE and DE paths.\n\nAdd getDataDir() to give clean access to the top-level private data\ndirectory, but disclaim that apps shouldn\u0027t create files there.\n\nBug: 26279618\nChange-Id: Ic34a4b330223725db93b1d0f5c9dffc88002c61f\n"
    },
    {
      "commit": "eb84b1843a3f6805c6109c1d9d023550229a3fc5",
      "tree": "a689a4889e3978303935f49c2dd27eaf6303053b",
      "parents": [
        "9496df19ae7552370ec37cfb62cce3d919b0b116"
      ],
      "author": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Tue Jan 26 18:39:55 2016 +0000"
      },
      "committer": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Wed Feb 17 15:14:33 2016 +0000"
      },
      "message": "Suspend packages - one call for multiple packages\n\nRefactor setPackageSuspended into setPackagesSuspended. The rationale\nis that the consumers of this API are likely to want to remove\nmultiple packages at once. Rather than calling the API N times, call\nit just once.\n\nThe good part is that we already have the broadcast intent for\nsuspended packages take an array so only one broadcast. Less stress\non the system.\n\nAnother good part is that (right now) we only have one consumer of\nthis API and it will be easy to make changes once this CL goes in.\n\nAs a shell command, for consistency only allowed one package at\na time.\n\nBug: 22776761\nChange-Id: Ic8b8cf64d0a288ea3a282bb7b72f9d663b3b0049\n"
    },
    {
      "commit": "5ae4e73ef0747c2d08a901f1a76d8fb8ee64a53a",
      "tree": "fee0f42b55a307e99989e4fcca379383a6ac9684",
      "parents": [
        "804d648138212a00bb260291e39fde0b327df709",
        "355b232d7998cfc9b29d42a0356390e25191bcbd"
      ],
      "author": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Wed Feb 17 11:57:50 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 17 11:57:51 2016 +0000"
      },
      "message": "Merge \"Suspend packages - new API for retrieving the suspended status\" into nyc-dev"
    },
    {
      "commit": "9706c01f9b92cee64bb84782138735225c8588e0",
      "tree": "d968b7db4486a79a5eb0fa33bf7e29c49d9e852b",
      "parents": [
        "4f15f2ba67b6bc0ddad53b42235ac86d1079bbba"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Fri Feb 12 15:17:36 2016 -0800"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue Feb 16 13:39:55 2016 -0800"
      },
      "message": "Remove deprecated methods / classes\n\nNow that we\u0027ve moved the majority of system components to the\nPackageInstaller, we can remove the majority of the \"installPackage\"\nmethods and the VerificationParams/ContainerEncryptionParams\nclasses. There are still some lingering references to the two\ninstallPackage() methods left [both internal and external; play\nis using these methods via reflection].\n\nBug: 24542768\nChange-Id: Ib65323d842d9f0e7fed60e37e6b5f103c94c859b\n"
    },
    {
      "commit": "355b232d7998cfc9b29d42a0356390e25191bcbd",
      "tree": "7c0155a58f49b9eec15cd163b0b1625f44488bb8",
      "parents": [
        "29b13190cd57bd823eb803f6fca03f671a32a5fe"
      ],
      "author": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Fri Feb 12 16:43:51 2016 +0000"
      },
      "committer": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Tue Feb 16 14:57:29 2016 +0000"
      },
      "message": "Suspend packages - new API for retrieving the suspended status\n\nInstead of always rebuilding the full ApplicationInfo for a\npackage when callers are only interested in the suspended status\nadd a new fast API in Packagemanager (which only checks the\nsuspended user setting for the requested package and returns\na boolean) and change the appropriate caller code too.\n\nBug: 26794775\nBug: 22776761\nChange-Id: Ide8428ef734479360d5a8a75fd8e0ed8ddf2da7a\n"
    },
    {
      "commit": "115d2c189a46f535778d9dd0923f703ff2f888fe",
      "tree": "f082b998dc2345ccb24b47657c8b2104991225b6",
      "parents": [
        "c6ca265902d41a0553d15f660647410db6a3e889"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Feb 15 17:25:57 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Feb 15 17:45:42 2016 -0700"
      },
      "message": "Add feature versions for devices and apps.\n\nWe\u0027re starting to see more instances of device features that will\nincrement separately from the SDK API level, such as camera HAL,\nGPU capabilities, Bluetooth, and other hardware standards.\n\nThis change adds the ability for device features to specify a\nversion, which is defined to be backwards compatible.  That is, apps\nrequesting an older version of a feature must continue working on\ndevices with a newer version of that same feature.\n\nWhen a version is undefined, we assume the default version \"0\".\n\nBug: 27162500\nChange-Id: If890bf3f3dbb715e8feb80e7059a0d65618482ea\n"
    },
    {
      "commit": "d7b1f41109abee60ec8529369a85d84300b1d678",
      "tree": "51b28d52f9f79810bcea61eba44dd239e86b08d3",
      "parents": [
        "2a061b5bcfb92be2829f6fe9a6d86352193752e3"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Feb 09 18:49:23 2016 -0800"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Feb 09 18:49:27 2016 -0800"
      },
      "message": "Add an API to query the package name of the services shared lib\n\nThe servcies shared lib contains components apps can invoke such\nas services to bind to, activities to start, UI choosers, etc.\nThis lib is built from AOSP code but an OEM may chage its\npackage name. For example, Google renames the package names for\nGMS apps from android.foo.bar to com.google.android.foo.bar.\nWhile we have more than one shared lib that are a part of the\nplatform (currently shared and services libs) the serivces lib\nis the only one clients need to start components in, thus need\nto know its package name. This change adds an API to query the\npackage name of the services shared lib. The API is hidden as\ncurrently the only clients are a part of the system.\n\nChange-Id: Ied48fa4819024522791764b22b3336d4f4b42cc3\n"
    },
    {
      "commit": "35871f2c2bb114806b4e3f109960b7f863d7885c",
      "tree": "9a89bda9cbc01d61a3fd35271f31f092c856672d",
      "parents": [
        "f6ede47b78f557d49a1e2273e37f355d39a75a59"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 29 17:13:29 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jan 30 17:03:23 2016 -0700"
      },
      "message": "Offer to migrate databases and SharedPreferences.\n\nDatabases and SharedPreferences often involve multiple files under\nthe hood, so developers wanting to migrate them between different\nstorage contexts should ask us to make sure all relevant files are\nmigrated correctly.\n\nThis makes a best-effort attempt to recover from battery pulls\nduring migration, while still trying to alert developers to\nconflicting files.\n\nBug: 26668510, 25860525\nChange-Id: I9ffa3e8cb6191dfd4237b9466a081d6d77df3ba0\n"
    },
    {
      "commit": "b51617f4668ef8cf0e6d8d0fc3284eae51dbd8ca",
      "tree": "9e66ea505482770b09a33c338d008ab549357b91",
      "parents": [
        "d11c15d418d776d1db33f7664fad2671de0e6669"
      ],
      "author": {
        "name": "Stephan Linzner",
        "email": "slinzner@google.com",
        "time": "Wed Jan 27 18:09:50 2016 -0800"
      },
      "committer": {
        "name": "Stephan Linzner",
        "email": "slinzner@google.com",
        "time": "Wed Jan 27 18:09:58 2016 -0800"
      },
      "message": "Deprecated platform Android testing APIs\n\n- Deprecated most android.test.* APIs\n- Kept ProviderTestCase2 and LoaderTestCase since we don\u0027t have a\nreplacement yet\n- Deprecated android.test.suitebuilder\n- Added Javadoc to all deprecated APIs with links to corresponding\nAndroid Testing Support Library APIs\n- Removed all trailing whitespace\n\nBug: 22314304\nChange-Id: I1b1f0dd5132364110f1dfd4e3eb2dd044700d859\n"
    },
    {
      "commit": "e6ff946cd4f40a0d4f3de51b6554e07b8d3cee93",
      "tree": "bee8b54d24cc40f6115fe2b3a696c0e1c77a8a97",
      "parents": [
        "6183d12926a189b08cc3be8d9c78470617e63db0"
      ],
      "author": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Fri Jan 15 15:07:06 2016 -0800"
      },
      "committer": {
        "name": "Selim Cinek",
        "email": "cinek@google.com",
        "time": "Thu Jan 21 19:42:49 2016 -0800"
      },
      "message": "Switched the work profile badge used in the notifications\n\nChange-Id: I62616f1ae8fcda9953853b9859c69a9f1e6f44ca\n"
    },
    {
      "commit": "12705131b95d5d6bcfae79d7991ff3e6f02457e4",
      "tree": "49075f5f7d46b3d8bb72aae6edfaa4692764b261",
      "parents": [
        "f55ed12fd128961db0ab02d9884bda9721cc1e66"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue Jan 05 15:17:57 2016 -0800"
      },
      "committer": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Mon Jan 11 16:21:03 2016 -0800"
      },
      "message": "Hide ephemerality\n\nChange-Id: Ibf60366b3f00b1920e330cd804bcc1c550f8882a\n\nBug: 26404647\n"
    },
    {
      "commit": "cd65448ccd13c4c2d0fe9e9623fec3a898ab9372",
      "tree": "da60bd6e2d928bfe7119258f8908d8360166f2c0",
      "parents": [
        "629f98466a4c2d778ddd4ce5a9df107e28f9b98a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 17:42:11 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jan 08 18:35:54 2016 -0700"
      },
      "message": "Even more PackageManager caller triage.\n\nFinish moving all UID/GID callers to single AIDL method that requires\ncallers to provide flags.\n\nTriage AppWidgets and PrintServices, which currently can only live on\ninternal storage; we should revisit that later.\n\nFix two bugs where we\u0027d drop pending install sessions and persisted\nUri grants for apps installed on external storage.\n\nBug: 26471205\nChange-Id: I66fdfc737fda0042050d81ff8839de55c2b4effd\n"
    },
    {
      "commit": "8588bc1ef1f020bbe4a24d46874f675708149a57",
      "tree": "ac8ebdc1706f519a8f798ac4f5ca3e26e0439e99",
      "parents": [
        "aec99bf78ff2404bf5497fdcb01430150709d8b3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 16:47:42 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jan 07 10:33:26 2016 -0700"
      },
      "message": "Add flags to requests for package UID/GIDs.\n\nThis gives callers the ability to request details for missing\npackages.  Also add annotations for userId and appId variables and\nstart tagging their usage.\n\nChange-Id: I63d5d7f870ac4b7ebae501e0ba4f40e08b14f3f6\n"
    },
    {
      "commit": "e06b4d1d9f718b9fe02980fea794a36831a16db2",
      "tree": "cfef7d72c17fc71b008f0c9a8f08d49553a30e16",
      "parents": [
        "2a90f673f5819e05ea72f6aba3e75956e0f807dc"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 14:51:50 2016 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jan 06 15:21:06 2016 -0700"
      },
      "message": "Consistent naming for PackageManager methods.\n\nWhen hidden PackageManager methods take a userId argument, they\nshould be named explicitly with the \"AsUser\" suffix.  This fixes\nseveral lagging examples so that we can pave the way to safely\nstart passing flags to new methods without scary overloading.\n\nAlso fix spacing issues in various logging statements.\n\nChange-Id: I1e42f7f66427410275df713bea04f6e0445fba28\n"
    },
    {
      "commit": "31ffb442414bd9cf6c0225799d7d0c5409f3769d",
      "tree": "5e163c32b628b53a36c7c5252e8e7ffb27d6cb11",
      "parents": [
        "8464831bf27cfe27980d0d86b96ba1c348792020"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Dec 21 11:32:53 2015 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jan 04 12:31:29 2016 -0800"
      },
      "message": "No need to pass digest of AndroidManifest.xml around.\n\nWhen an APK is being installed, the full path to the file is\noccasionally passed between processes. To detect changes to the file\nduring these handovers, the digest of the AndroidManifest.xml entry\ncould be passed around as well.\n\nThis security feature is no longer used and is no longer needed. APKs\nshould be installed using the modern Package Installer API\n(android.content.pm.PackageInstaller).\n\nBug: 24542768\nChange-Id: I2762634c85448e7adcd47ffc9a5294c021e127bd\n"
    },
    {
      "commit": "1e2839188fb49575b86646d3aadb355c81ef9cc5",
      "tree": "7d891672e43cb5162b7e7c99a3a68e91f8431227",
      "parents": [
        "53129f1c21fc1e404f8e1d5772954710e6442dd8"
      ],
      "author": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Thu Nov 26 15:26:28 2015 +0000"
      },
      "committer": {
        "name": "Andrei Stingaceanu",
        "email": "stg@google.com",
        "time": "Wed Dec 16 18:14:14 2015 +0000"
      },
      "message": "Wire call to suspend a package\n\nAdds APIs in DevicePolicyManager and PackageManager for allowing\na device admin to suspend a package. PackageManagerService sets\nor unsets a new PackageUserState \u0027suspended\u0027 setting. Terminal\ncommand to suspend/unsuspend has been added via\nPackageManagerShellCommand (as root).\n\nNext steps:\n* use the new \u0027suspended\u0027 setting for denying access to start app\n(probably in ActivityStackSupervisor)\n* broadcast a PACKAGE_(UN)SUSPENDED intent for launchers to pick up\n* remove app from recents (go further and kill it if it is running)\n* erase existing notifications for this app\n\nBug: 22776576\nChange-Id: I718b3498f6a53cc0c6fdfb6d15031e53ddca4353\n"
    },
    {
      "commit": "0c6cc308cfd26ae102a1a3deb258e675da2c1eb0",
      "tree": "1cae39c64e8f239fb491b0a478b73716cf7ad324",
      "parents": [
        "6ec3e4c56b4539e59b932137030e3e745cfdec00",
        "e0e413e2b17a0164e15c77f4ab51b3166f9111d2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 10 20:13:29 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 10 20:13:29 2015 +0000"
      },
      "message": "Merge \"Add new target SDK filtering feature to BroadcastOptions.\""
    },
    {
      "commit": "e0e413e2b17a0164e15c77f4ab51b3166f9111d2",
      "tree": "74aa91f46362c7cb351aa6f505f7c8eab790bdf5",
      "parents": [
        "27cf982641e5e84669565634bbb45940f6b1209a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Dec 09 17:22:26 2015 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Dec 10 12:12:00 2015 -0800"
      },
      "message": "Add new target SDK filtering feature to BroadcastOptions.\n\nYou can now control the range of target SDKs that receivers\nwill be need to have in order to receive your broadcast.\n\nUse this for CONNECTIVITY_ACTION to not allow N+ applications\nto receive these broadcasts through their manifest.\n\nAlso tweak the broadcast debug output code to now include the\ndisposition of each receiver in the list.  This is becoming\nimportant as skipping receivers is becoming a more common\nthing to have happen.\n\nChange-Id: I251daf68575c07cbb447536286ab4e68b7015148\n"
    },
    {
      "commit": "98cb23dccfb65ddd2802c49d8714979f7dbae1df",
      "tree": "5159f138d37965c9b3bd695b7bfe16f1f6f915a1",
      "parents": [
        "863cf1572ebf12cb6ef3a8e5424b1348c4734b0a",
        "e13529a4adb60e5a18c2e36ce6c5bf8f2d1db78f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Wed Dec 09 22:51:43 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Dec 09 22:51:43 2015 +0000"
      },
      "message": "Merge \"Slight API renaming, better behavior.\""
    },
    {
      "commit": "e13529a4adb60e5a18c2e36ce6c5bf8f2d1db78f",
      "tree": "210d70d496483b2cf99b55350d55dc37c6514ebb",
      "parents": [
        "7a30a30ebece75f4a73fa604d4c7721d28eecc16"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Dec 09 14:15:27 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Dec 09 15:22:54 2015 -0700"
      },
      "message": "Slight API renaming, better behavior.\n\nRename APIs to reflect that they\u0027re storage-related.  Also move\ncredential-storage APIs to be system API.\n\nReturn a null Context when device-encrypted storage isn\u0027t\nsupported.  This is the easiest way to keep legacy apps working when\nupgrading from M to N.\n\nReduce strictness of path checking so we don\u0027t crash when working\nwith special packages like \"android\".\n\nBug: 22358539, 26104027\nChange-Id: I38c24fc003488186210a6ae3b64270f86e1efe56\n"
    },
    {
      "commit": "103d61b9f79de4d7b907227a7925e809e3e183c2",
      "tree": "e8c3cbd3b9474dc6b69a92b2dd0de295a951e2d6",
      "parents": [
        "15c4bbddfa2b8597498c2fb960038952f22c3775",
        "7a30a30ebece75f4a73fa604d4c7721d28eecc16"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@google.com",
        "time": "Tue Dec 08 22:29:52 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 08 22:29:52 2015 +0000"
      },
      "message": "Merge \"Shift around encryption public APIs.\""
    },
    {
      "commit": "7a30a30ebece75f4a73fa604d4c7721d28eecc16",
      "tree": "ff6f65eb8291e9e07a83f7ae6cc7363ee3e0cc3c",
      "parents": [
        "6a6cdafaec56fcd793214678c7fcc52f0b860cfc"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 08 14:20:06 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Dec 08 15:24:29 2015 -0700"
      },
      "message": "Shift around encryption public APIs.\n\nThere are far too many Context APIs with special directory paths\nto replicate device-encryption versions of them all.  Instead, add\nmethods to clone a Context that explicitly stores its data in either\ncredential- or device-encrypted storage.\n\nMethods to test the behavior of a given Context.\n\nBug: 22358539\nChange-Id: I6a6290a9b282605ce9a1f82742fc2c4c50536754\n"
    },
    {
      "commit": "2acf063da08dfff69f184c9a6a90a7a5fe60d818",
      "tree": "57da22759eccdbe0400d1916febec19de0732b9b",
      "parents": [
        "4f5ab5ffbe3d624fd4218e0ccf67a29a0150e102"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Nov 24 19:10:59 2015 -0800"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Dec 08 19:17:15 2015 +0000"
      },
      "message": "Ephemeral cookie API\n\nAdd APIs for an ephemeral app to set a cookie which is a small\npeice of data cached longer than the app itself. This is useful\nfor avoiding the user to login every time they use the ephemeral\napp. The cookie is stored after an ephemeral app is uninstalled.\nNormal apps or ephemeral apps upgraded to full apps can also use\nthese APIs with the difference that once they are uninstalled\nthe cookie is deleted.\n\nThe cookie size defaults to 16KB and is configurable by a global\nsettings which can be adjusted via gservices. Also eviction policy\nis time based with a default of one month and is configurable by\na global setting which can be adjusted via gservices. If the cert\nof the app cahnges (when ephemeral is installed, uninstalled and\ninstalled again) the cooke is wiped to prevent data leaks.\n\nThis cahange also adds an API for apps to know whether they run in\nan ephemeral mode since it this mode some APIs will not be available.\nAnother API exposed by this change is private for the system and\nexposes all ephemeral apps - installed and uninstalled. Only the\nsystem can call this API. When an ephemeral app is uninstalled the\nsystem stores its name, icon, and permissions. When the app is\nreinstalled or a full version is installed the permissions are\npropagated.\n\nChange-Id: Id4a73a7750bfbabda0bfcb9bf9018d2062e94367\n"
    },
    {
      "commit": "6a6cdafaec56fcd793214678c7fcc52f0b860cfc",
      "tree": "8875835dd240914d9bf7344dc5f2c0c35dc77b40",
      "parents": [
        "ce14cd01411c384b3b979a9f662bf3cd5f9e7183"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Dec 07 19:25:19 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Dec 07 19:25:25 2015 -0700"
      },
      "message": "APIs to obtain SharedPreferences paths.\n\nNeeded for apps that want to migrate SharedPreferences from CE to DE\nstorage.  Note that a device will only ever enter a CE mode with a\nfactory reset, so apps should only be using these APIs when they\nwant to migrate files to a consistent location on non-FBE devices\nfor simplicity.\n\nBug: 25503089\nChange-Id: Ic846215da1617d116a048e036415ac7ad523b770\n"
    },
    {
      "commit": "8fc29cf1052fd951a3a0828b65506db30df89ece",
      "tree": "dccb83793bc843e60e57d3c477517ab3adfc65b4",
      "parents": [
        "8924e8759f9a8cffb5ad538ca40a7826793aac07"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 30 17:51:00 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 30 18:01:20 2015 -0700"
      },
      "message": "API to create SharedPreferences from File.\n\nNeeded to support storage of SharedPreferences on both credential-\nencrypted and device-encrypted storage paths.\n\nBug: 22358539\nChange-Id: I576b696951b2a9de817d5be63d31b06f7e166a19\n"
    },
    {
      "commit": "cfa292e1dad184648bf673167f3f35b4fb34fc93",
      "tree": "7a6515d840e908fe36e23b674e0fc11299055057",
      "parents": [
        "4133dee9ec5338816e462650afcd039002eb289c"
      ],
      "author": {
        "name": "Piotr Jastrzebski",
        "email": "haaawk@google.com",
        "time": "Tue Feb 17 16:58:52 2015 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Nov 20 14:06:55 2015 +0000"
      },
      "message": "Add core-oj to the list of core library jars.\n\nWith some core classes moved to separate core-oj jar\nwe need to use the new jar.\n\n(cherry-picked from f898cda2f499b14f92bc7fb75f44110cdec7654f)\n\nChange-Id: Ica148f11bcc77f57d22944ff78c501611a293167\n"
    },
    {
      "commit": "15447798a38d2b5acb1998731340255f4203f294",
      "tree": "e65073fba1b29d787b7867ea79b12951383a1869",
      "parents": [
        "ea1e8ecf5eb988703cb4b5297b30b10561d07c29"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Nov 05 16:18:51 2015 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Nov 06 18:35:27 2015 -0800"
      },
      "message": "Initial file-based encryption public APIs.\n\nDefine two explicit directories where device-encrypted and\ncredential-encrypted data will be stored.  Third-party apps only\nneed access to the device-encrypted directory, so that\u0027s the only\nAPI exposed for now.\n\nGeneral cleanup in how ApplicationInfo details are derived.\n\nBug: 22358539\nChange-Id: If0a0108721a4aa1c3052b4912e08604bbf24e1ae\n"
    },
    {
      "commit": "9a80e53b27cd1ca00364a30a0ad153c83000b9d2",
      "tree": "735b91420989e654df9513c4d4d2fe91a4042987",
      "parents": [
        "7d92c474986c0ed562310a99aebd4ed845027f8b"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Wed Sep 23 15:49:28 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Thu Sep 24 10:57:51 2015 +0100"
      },
      "message": "Add more methods that take a userId to PackageManager.\n\nAdd methods installPackageAsUser and installExistingPackageAsUser\nand deletePackageAsUser and getPackageInfoAsUser.\n\nBUG:23516394\nChange-Id: I15e30d2ec45ab18c7f8c0ac02cfc617c50fedb44\n"
    },
    {
      "commit": "3355eca23e89045be068b39f5236cd43406a2a2d",
      "tree": "cd16f63e49e7e644433abd1c5ffd1c3a780bee73",
      "parents": [
        "3b0fc3cf24e1fecdbc11808483c2109415ebfdd2"
      ],
      "author": {
        "name": "Nicolas Prévot",
        "email": "nprevot@google.com",
        "time": "Wed Sep 23 11:34:38 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Prévot",
        "email": "nprevot@google.com",
        "time": "Wed Sep 23 11:34:38 2015 +0000"
      },
      "message": "Revert \"Add more methods that take a userId to PackageManager.\"\n\nThis reverts commit 3b0fc3cf24e1fecdbc11808483c2109415ebfdd2.\n\nIt breaks the build. I had missed other places that extend PackageManager.\n\nChange-Id: Iff012ed4ec8d2d32821586eca85fce55ae67f5b5\n"
    },
    {
      "commit": "3b0fc3cf24e1fecdbc11808483c2109415ebfdd2",
      "tree": "7956d80abb8a83bc7f346b416c59528fb92e0461",
      "parents": [
        "d6fb31adde6cf6c17ee794fd51ea23dbe88ac20e"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Mon Sep 21 11:39:42 2015 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Mon Sep 21 11:39:42 2015 +0100"
      },
      "message": "Add more methods that take a userId to PackageManager.\n\nAdd methods installPackageAsUser and installExistingPackageAsUser\nand deletePackageAsUser and getPackageInfoAsUser.\n\nChange-Id: I9a3ff96f968b4f8d21a57cc7760679628d35c1a9\nBUG:23516394\n"
    },
    {
      "commit": "c875ad14ddc09d0d3a3bde58f71845123110f9f2",
      "tree": "37e0fc1e80f6d47557fd4c984c9a0c1a0c99e001",
      "parents": [
        "33ec1710b0404f36019688ea8e285b687f81109c",
        "56de616725aca7d875fafc2a94e00ae9874fedf9"
      ],
      "author": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 29 19:23:52 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 29 19:23:52 2015 +0000"
      },
      "message": "am 56de6167: am f6c2d8a9: am 6da43a83: am 9352af2a: Merge \"Remove dependencies on the package installer\\\u0027s package name\" into mnc-dev\n\n* commit \u002756de616725aca7d875fafc2a94e00ae9874fedf9\u0027:\n  Remove dependencies on the package installer\u0027s package name\n"
    },
    {
      "commit": "f1b7f20bb839c96e8254ccb65398135f10fd45d9",
      "tree": "7803c21a30ad4f110925ee94a1b76735a1c1d406",
      "parents": [
        "02022b70bef7d6964bc8043385531d1aa97fb15b"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 29 08:33:42 2015 -0700"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 29 08:33:46 2015 -0700"
      },
      "message": "Remove dependencies on the package installer\u0027s package name\n\nbug:22700053\n\nChange-Id: I8540eb8577fbec84e1a67e31e1c31ba654c828a4\n"
    },
    {
      "commit": "808dd5cc8af3e26d12c1b5fe80663eb306cc0c20",
      "tree": "50869898906e303e96e0e8c687e9df0bcec7772c",
      "parents": [
        "89aca46b1bce3d311b445905575633815d5eeda1",
        "4753b5bcf4877e125a8e38d5bcd2ac46c1744429"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jul 15 02:21:54 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 15 02:21:54 2015 +0000"
      },
      "message": "am 4753b5bc: am 4f73990a: am aa3694f2: am f1f8b9cc: Merge \"Fix issue #21626564: MMS should be receivied while Dozing\" into mnc-dev\n\n* commit \u00274753b5bcf4877e125a8e38d5bcd2ac46c1744429\u0027:\n  Fix issue #21626564: MMS should be receivied while Dozing\n"
    },
    {
      "commit": "1fa2a0888284ae00c905dce7a3003b995815467a",
      "tree": "e3071a813aceceda2e3b5b13e071636a5535eac8",
      "parents": [
        "f488fc28102870d8ec943d0a3a78c6d3997711c2",
        "1281575c257d52f256f4a08559611e6ec0b6190e"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Wed Jul 15 01:42:58 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jul 15 01:42:58 2015 +0000"
      },
      "message": "am 1281575c: am 41fac5e8: am 189f3136: am 98724126: Merge \"Added sendBroadcastMultiplePermissions method\" into mnc-dev\n\n* commit \u00271281575c257d52f256f4a08559611e6ec0b6190e\u0027:\n  Added sendBroadcastMultiplePermissions method\n"
    },
    {
      "commit": "fd854ee58c5d56f84047007ead9f88a767ae956f",
      "tree": "8cd12e57928f2984b2da6c9a0872fcb795c5fa94",
      "parents": [
        "987241265b77542f45ce95838c25beeaf3ae6849"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Jul 13 18:00:37 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jul 14 18:33:08 2015 -0700"
      },
      "message": "Fix issue #21626564: MMS should be receivied while Dozing\n\nWe now place whoever is receiving the MMS on the temporary\nwhitelist while doing so, so they can get network access to\ndownload it.\n\nThere was also an issue that needed to be fixed where we\nwere no longer updating the list of allowed uids while\ndozing based on their proc states...  we now do that.\n\nAlso did a bit of optimization of the temp white list update\npath do the network policy manager, instead of going through\na broadcast we now directly call in to the network policy\nmanager.  This also allows us to have a synchronous version\nof updating the list, so we can know the app has network access\nbefore we tell it to do anything.\n\nFinally added battery stats events for things going on and off\nthe whitelist so we can diagnose the behavior there.\n\nChange-Id: Ic7fe010af680034d9f8cb014bb135b2addef7455\n"
    },
    {
      "commit": "d4fd8c766da8a70e3359bbc7efbbc79496efe71a",
      "tree": "971bad23792d3f9486e1ef7a0b0fe6f2952c84b9",
      "parents": [
        "b42cb352a350bac198470f65125aa151ecacff13"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Mon Jul 13 19:19:25 2015 -0700"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 17:25:42 2015 -0700"
      },
      "message": "Added sendBroadcastMultiplePermissions method\n\nAdded Context.sendBroadcastMultiplePermissions(Intent intent, String[]\nreceiverPermissions) method, which allows an array of required permissions\nto be enforced.\n\nBug: 21852542\nChange-Id: I27c9130e8f004b428452501ebc8a36aabde1f343\n"
    },
    {
      "commit": "7aeb1a5c19a1226f2b0ca7b498bdad941d206808",
      "tree": "32778466c47a0628b350a338d37818874e395125",
      "parents": [
        "097ec7b958891852d4f5267064845d91e4fd7ba0",
        "cf4617cfd0c9da1fa5a12da5ed576dd0c823f8e5"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 23:55:48 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 14 23:55:48 2015 +0000"
      },
      "message": "am cf4617cf: am 1aeceef4: am fc4acfd9: am 4a817924: Merge \"Revert \"Allow array of required permissions in sendBroadcast\"\" into mnc-dev\n\n* commit \u0027cf4617cfd0c9da1fa5a12da5ed576dd0c823f8e5\u0027:\n  Revert \"Allow array of required permissions in sendBroadcast\"\n"
    },
    {
      "commit": "64e8aa18f8c089989113ecd8775d41bffe74b41d",
      "tree": "7db5b5b83a40d67cdf7b217f326f21a41de8ea79",
      "parents": [
        "026d6f97d120f7f557a50effd82e6b3b6f032870",
        "7f006b52215634f37aa881157df6473b8e3dd803"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 22:56:11 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 14 22:56:11 2015 +0000"
      },
      "message": "am 7f006b52: am 70174794: am ef77c116: am d69a82c1: Merge \"Allow array of required permissions in sendBroadcast\" into mnc-dev\n\n* commit \u00277f006b52215634f37aa881157df6473b8e3dd803\u0027:\n  Allow array of required permissions in sendBroadcast\n"
    },
    {
      "commit": "e37520b49da8fc2b7b7501c6dbbe1e6ac984dd9f",
      "tree": "f7e2e3ca94572f22d8067d571518f845624dfb48",
      "parents": [
        "b4e7283c9afd9fb15ebd63f6ce9b75c9c1af658b"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 22:29:21 2015 +0000"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 22:29:21 2015 +0000"
      },
      "message": "Revert \"Allow array of required permissions in sendBroadcast\"\n\nThis reverts commit b4e7283c9afd9fb15ebd63f6ce9b75c9c1af658b.\n\nChange-Id: Ie8390964bda5bdfa869cee8f46584043d8e7c664\n"
    },
    {
      "commit": "fc5e0ba6254d82074d8d4f46dbd5cc580f933ede",
      "tree": "f116124cfd1b9a81181496f640a60675aa38df94",
      "parents": [
        "82f91da700445c4606faea45ac8f0dc9f2857471",
        "b9f170ff99a3ad25623bf20c77eb4f6173577c98"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jul 14 20:27:48 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jul 14 20:27:48 2015 +0000"
      },
      "message": "am b9f170ff: am b4db7923: Merge \"Delete some obsolete test code.\"\n\n* commit \u0027b9f170ff99a3ad25623bf20c77eb4f6173577c98\u0027:\n  Delete some obsolete test code.\n"
    },
    {
      "commit": "b4e7283c9afd9fb15ebd63f6ce9b75c9c1af658b",
      "tree": "16259cb24eda7170075fb4ff4d90d34c77c2463f",
      "parents": [
        "37511e35ae22ea88539f1137ea2f74c9cb17f60c"
      ],
      "author": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Mon Jul 13 19:19:25 2015 -0700"
      },
      "committer": {
        "name": "Fyodor Kupolov",
        "email": "fkupolov@google.com",
        "time": "Tue Jul 14 12:50:22 2015 -0700"
      },
      "message": "Allow array of required permissions in sendBroadcast\n\nAdded Context.sendBroadcast(Intent intent, String[] receiverPermissions)\nmethod, which allows an array of required permissions to be enforced.\n\nBug: 21852542\nChange-Id: I3b8ff258fa9f3249c344bb8093b820b24eef00c0\n"
    },
    {
      "commit": "85bdaae347ac3e6fc0e0cb1f2104958a79831d79",
      "tree": "f150c856ef905886b4fbda11fefb54096a5a10e2",
      "parents": [
        "43a2aca4c279d3db8abdf4692249134fdd69bd96"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jul 09 18:22:21 2015 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jul 09 18:23:53 2015 +0100"
      },
      "message": "Delete some obsolete test code.\n\n- Get rid of obsolete annotations in MediaInserterTest.\n\n- Drop support for @BrokenTest and @SideEffect. Nobody uses\n  SideEffect and none of the tests that use this test runner\n  (vm-tests-tf, essentially) use @BrokenTest.\n\nChange-Id: Id73c4d4eda8031689f9263c85b563c29e635d446\n"
    },
    {
      "commit": "ad3b2975574f916c14382628d50c710a78064746",
      "tree": "57b6dfd10624fd9e00facac26725e29a9909727f",
      "parents": [
        "3aa1b1e5ec3a4e2074ea054b931cd68df45b43cf"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jul 07 22:49:17 2015 -0700"
      },
      "committer": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 08 18:12:58 2015 -0700"
      },
      "message": "Add an API for apps to query if a permisison is denied by policy.\n\nbug:22177216\n\nChange-Id: I32227f55097fae997f33743fd1eee06cb18f47f1\n"
    },
    {
      "commit": "a750a63d639f6936af456df904fa6b9ba941885e",
      "tree": "41cd79aec0dedbf162eab2749bd6dec45bb7509d",
      "parents": [
        "f5820276635a2d3d2e3c694eddba7e6a02093a20"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 16 17:18:23 2015 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 17 11:41:45 2015 -0700"
      },
      "message": "Fix issue #21814207 and issue #21814212 (alarm manager)\n\nIssue #21814207: AlarmManager.setAndAllowWhileIdle should also allow wake locks.\n\nIntroduce a whole new infrastructure for providing options when\nsending broadcasts, much like ActivityOptions.  There is a single\noption right now, asking the activity manager to apply a tempory\nwhitelist to each receiver of the broadcast.\n\nIssue #21814212: Need to allow configuration of alarm manager parameters\n\nThe various alarm manager timing configurations are not modifiable\nthrough settings, much like DeviceIdleController.  Also did a few\ntweaks in the existing DeviceIdleController impl.\n\nChange-Id: Ifd01013185acc4de668617b1e46e78e30ebed041\n"
    },
    {
      "commit": "f7c06eb03ab4479b9d0656a23a4733d17e995183",
      "tree": "4f2fd559d9db7eafd59dbef2f2ad2a6bc35d6bff",
      "parents": [
        "970b59cbe377e23e9c681a5cef30c01f730c7377"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jun 10 18:43:22 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jun 10 21:24:13 2015 -0700"
      },
      "message": "Add system API to watch for permission changes\n\nChange-Id: I1ce450a59fb326c14848f46732d877dea33f33c7\n"
    },
    {
      "commit": "20770ddbd4d6f2af0093f36462a8f44a678b084b",
      "tree": "70cf421b5fafd4c2412a4cc56ddb6cd6fcf67c9f",
      "parents": [
        "3546c61b27eee218fc37581a3e0229b8646eb119"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Fri May 29 15:43:04 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Tue Jun 02 14:48:38 2015 -0700"
      },
      "message": "Add API to hint whether to show on-board UI before a permission request.\n\nbug:21511988\n\nChange-Id: I9d1d7adf34b68074e65510f53b6e642cf784cf6b\n"
    },
    {
      "commit": "8c7f700a59ad26e75c9791335d78f14322cad49a",
      "tree": "151d514ffaf4c6bde3ee650e8f94b7f64eb74fd8",
      "parents": [
        "3ce72722ca14ad9e84ca54920bb2829696f68d53"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu May 07 10:48:44 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Mon May 11 17:13:57 2015 -0700"
      },
      "message": "Add permission meta-state flags to support grant/revoke permission policy.\n\nWe now maintain a mata-state with each permission in the form of flags\nspecyfying the policy for this permission. This enables support of the\nfollowing use cases:\n\n1. The user denies a permission with prejudice in which case an app cannot\n   request the permission at runtime. If an app requests such a permssion\n   it gets a denial unless the user grants the permission from settings.\n\n2. A legacy app with disabled app-ops being upgraded to support runtime\n   permissions. The disabled app ops are converted to permission revocations.\n   The app ops manager is a part of the activity manger which sits on top\n   of the package manager, hence the latter cannot have a dependency on the\n   former. To avoid this the package installer which is the global\n   permission managment authority marks the permission as revoked on\n   upgrade and the package manager revokes it on upgrade.\n\n3. A device policy fixing a permission in a granted or revoked state. This\n   additional information is folded in the meta-state flags and neither\n   apps can request such permissions if revoked not the user can change\n   the permission state in the UI.\n\nChange-Id: I443e8a7bb94bfcb4ff6003d158e1408c26149811\n"
    },
    {
      "commit": "620b32b316fd4f1bab4eef55ec8802d14a55e7dd",
      "tree": "afedbccf5c135e8d19ba52db199316ab0932a277",
      "parents": [
        "61044cfd9c7f02d3806338a6b8f137f50e1b1e0f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 23 19:36:02 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 23 20:32:17 2015 -0700"
      },
      "message": "Package and storage movement callbacks.\n\nSince package and primary storage movement can take quite awhile,\nwe want to have SystemUI surface progress and allow the Settings\napp to be torn down while the movement proceeds in the background.\n\nMovement requests now return a unique ID that identifies an ongoing\noperation, and interested parties can observe ongoing progress and\nfinal status.  Internally, progress and status are overloaded so\nthe values 0-100 are progress, and any values outside that range\nare terminal status.\n\nAdd explicit constants for special-cased volume UUIDs, and change\nthe APIs to accept VolumeInfo to reduce confusion.  Internally the\nUUID value \"null\" means internal storage, and \"primary_physical\"\nmeans the current primary physical volume.  These values are used\nfor both package and primary storage movement destinations.\n\nPersist the current primary storage location in MountService\nmetadata, since it can be moved over time.\n\nSurface disk scanned events with separate volume count so we can\ndetermine when it\u0027s partitioned successfully.  Also send broadcast\nto support TvSettings launching into adoption flow.\n\nBug: 19993667\nChange-Id: Ic8a4034033c3cb3262023dba4a642efc6795af10\n"
    },
    {
      "commit": "529f91fc8e7e884ef19bef8eb3e4e3a1d69336f4",
      "tree": "463b7b5d9175e98402939a2bbfebd4f30899feac",
      "parents": [
        "355df8f16ae4c428997d88ba86f1ce07e5eca35e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Apr 18 20:23:13 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Apr 18 21:11:58 2015 -0700"
      },
      "message": "Always send volume UUID with installd commands.\n\nSince packages can be moved to other volumes, all relevant commands\nto installd now require an explicit volume UUID parameter.\n\nBug: 20275577\nChange-Id: Ie84f5bc43c7aada5800b8d71692c7928b42b965e\n"
    },
    {
      "commit": "16a16899505ec0a9ede5b76650bfb8817b3227c7",
      "tree": "ab1ff64e6befd59d55de65dbe7a89614feadcd2f",
      "parents": [
        "d01242946eb7423612998b5bdbc71a6a1b3e8581"
      ],
      "author": {
        "name": "Svet Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Thu Apr 16 10:32:04 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Fri Apr 17 20:43:56 2015 +0000"
      },
      "message": "Add OP_READ_PHONE_STATE app op - framework\n\nThe READ_PHONE_STATE permission protects PII information and\nis in the Phone group. This change is adding the corrseponding\napp op for gating access to the API guarded by READ_POHNE state\nwhich will be used instead as an access control for legacy apps.\n\nChange-Id: I2ff895a5a0e529f26ec0ad706266a30d829268ba\n"
    },
    {
      "commit": "e2d45be4dae116307f8edd85eaa61134221cb8f9",
      "tree": "136b7e24f05cc792db37f8a8cf140589b057d4f6",
      "parents": [
        "9f09b2d93fb8b15d5905b22f566dc0fa99fd086f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 15 17:14:12 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Apr 15 22:21:49 2015 -0700"
      },
      "message": "Candidate volumes for packages, fix symlink.\n\nAdd API to determine the possible candidate volumes that a package\ncan be moved to.  For example, it currently knows that we need to\nmove ASEC-based apps through internal storage before migrating them\nto a private volume.\n\nComparator for consistent VolumeInfo ordering when displayed in UI.\n\nFix native library symlink to be volume UUID aware.\n\nBug: 19993667\nChange-Id: I68d5fac5f0f776ac1c7dd15e7a984bfe2704f3f7\n"
    },
    {
      "commit": "30ca50a3ddf35e6426e7b561b95e0864885de6d5",
      "tree": "fed235ae2e68ae901be48fca12b313676e7abfc7",
      "parents": [
        "975ab5c0f0ad0343f4a4cbc342f6f77d30d29e0a",
        "6227172310663e1267b1fabd68be890a1cb7e145"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Sat Apr 11 02:07:37 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Apr 11 02:07:39 2015 +0000"
      },
      "message": "Merge \"Add Default Browser App support and relax Hosts validation for AppLinks\""
    },
    {
      "commit": "6227172310663e1267b1fabd68be890a1cb7e145",
      "tree": "b05d1ddcd6858b676c6e5a128fdd07e0b6e5f599",
      "parents": [
        "2d897fbc447fd315b246a752e14825cbd7214e74"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Fri Apr 10 17:24:02 2015 -0700"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Fri Apr 10 17:54:02 2015 -0700"
      },
      "message": "Add Default Browser App support and relax Hosts validation for AppLinks\n\n- add private PackageManager APIs for setting/getting the default\nBrowser App package name\n- serialize / deserialize the default Browser App package name per User\n\nAlso relax the Hosts name validation for the AppLinls feature. Now we\njust care if the IntentFilter is having an HTTP or HTTPS scheme.\n\nChange-Id: I4436f66ac6beff57e14f7f3a2a00b0b582c03be9\n"
    },
    {
      "commit": "cb0392fa1c9b95a97d3bf7b78c6ba41afff2cff1",
      "tree": "094065a95dfe814a2345f7badbc6905cfc7d3878",
      "parents": [
        "b77640533f039c0d2202dcacb944eff1b2dfe0fb",
        "4e0951ef7a2bb492fd1255b83eba00b1b0556290"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 10 03:11:41 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 10 03:11:44 2015 +0000"
      },
      "message": "Merge \"Expose Cursor.setExtras().\""
    },
    {
      "commit": "4e0951ef7a2bb492fd1255b83eba00b1b0556290",
      "tree": "3638f2a096e0a3368f831eb9df58487d516521a8",
      "parents": [
        "8faab36fdd2d7dd038885a5073eeb8354d8996d4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 09 18:28:24 2015 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 09 19:48:11 2015 -0700"
      },
      "message": "Expose Cursor.setExtras().\n\nBug: 19369537\nChange-Id: I78e319667cbfaeb51f471d18c4fefeac01d49d80\n"
    },
    {
      "commit": "0788595e0c9bc5e8c1907c63db595010006ef5b4",
      "tree": "1f44f98341a3ed4c1e4f81bf597f67d25edbbc88",
      "parents": [
        "37c905e64655d5bfc5ba06fa0bbee10c1fdc6010"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Apr 06 19:41:28 2015 -0700"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Tue Apr 07 17:13:32 2015 -0700"
      },
      "message": "Add IntentFilter auto verification - part 3\n\n- add private API PackageManager.getAllIntentFilters(String)\nfor getting all IntentFilters from a given package\n- update IntentFilterVerificationInfo to use an ArrayList\u003cString\u003e\nfor domains instead of a String[]\n- if you make an App a default domain handler then make the\nothers as non default\n- create an IntentVerificationInfo even if the App IntentFilters\ndo not need to be verified. This would be done only if the App\nhas some domain URLs defined and would allow to make it the\ndefault handler for a domain\n- a few code optimizations here and there\n\nChange-Id: I4535372a0bb1a2c8e662e1485be8ca700003e9b3\n"
    },
    {
      "commit": "b2b9ab8354da1485178cd8d8e9d89ac915b3f269",
      "tree": "3d58a32b4ef47c632e5aebebee34e143d1d8cc5a",
      "parents": [
        "b9223015261afdec7e8686b732b298b809bf87dc"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 05 21:10:42 2015 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 06 21:17:58 2015 -0700"
      },
      "message": "Installing packages to expanded storage.\n\nPackageManager now offers to load/unload packages when expanded\nvolumes are mounted/unmounted.  Expanded storage volumes are still\ntreated as FLAG_EXTERNAL_STORAGE from a public API point-of-view,\nbut this change starts treating the INSTALL_EXTERNAL flag as\nexclusively meaning ASEC containers.\n\nStart tracking the UUID of the volume where a package is installed,\ngiving us a quick way to find relevant packages.  When resolving an\ninstall location, look across all expanded volumes and pick the one\nwith the largest free space.  When upgrading an existing package,\ncontinue preferring the existing volume.  PackageInstaller now knows\nhow to stage on these volumes.\n\nAdd new movePackage() variant that accepts a target volume UUID\nas destination, it will eventually move data too.  Expose this\nmove command through \"pm\" command for testing.\n\nAutomount expanded volumes when they appear.\n\nBug: 19993667\nChange-Id: I9ca2aa328b9977d34e8b3e153db4bea8b8d6f8e3\n"
    },
    {
      "commit": "1c1b47125da018b44240739db75f8898e064a948",
      "tree": "c2c4b241798ae9e5d61fd09955b8c0d2704bb133",
      "parents": [
        "523fe91af4baf26cd26e46c1418a072574959b73"
      ],
      "author": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Wed Nov 19 17:12:32 2014 -0800"
      },
      "committer": {
        "name": "Fabrice Di Meglio",
        "email": "fdimeglio@google.com",
        "time": "Mon Mar 30 10:58:35 2015 -0700"
      },
      "message": "Add IntentFilter auto verification\n\nThe purpose of this feature is to prompt the Disambiguation dialog\nto Users as less as possible.\n\n- add the new \"autoVerify\" property to the IntentFilter class\n- add new APIs to PackageManager:\n verifyIntentFilter(int, int, List\u003cString\u003e),\n getIntentVerificationStatus(String, int),\n updateIntentVerificationStatus(String, int, int),\n getIntentFilterVerifications(String)\nfor supporting IntentFilter verification\n- add support for multi-user\n- update PackageManager for IntentFilter verification:\nbasically when we are installing a new package, ask for verification\nof all domains from the IntentFilters that have the \"autoVerify\" to true.\nThis means that the PackageManager will send a well defined protected\nbroadcast (with a new INTENT_FILTER_NEEDS_VERIFICATION action) to\nan IntentFilter verifier to do the real job of verification.\nWe are passing in the broadcast Intent all the necessary data for\ndoing the verification. The PackageManager will receive as response\nthe result code of the domain verifications and, if needed, the list\nof domains that have failed the verification.\n- add a new INTENT_FILTER_VERIFICATION_AGENT permission that needs to\nbe set by an intent filter verifier to be considered as a trustable\nparty by the PackageManager.\n- add also a new BIND_INTENT_FILTER_VERIFIER permission for securing\nthe binding between the PackageManager and a service doing the\nintent filter verifications.\n- add ResolveInfo filterNeedsVerification which is a boolean\nto knows if the IntentFilter is of a type that needs a verification\n(action VIEW, category BROWABLE, HTTP/HTTPS data URI)\n- add new \"domain-preferred-apps\" / \"d\" dump command for listing the\nprefered Apps for all domains\n- add new \"intent-filter-verifiers\" / \"ivf\" command for listing the\nIntentFilterVerifier used\n- introduce the IntentVerificationService which is a basic service\nfor verifying IntentFilters. This service will send HTTPS requests\nto the domain declared in the IntentFilter(s) for doing the\nverification. This service has a low priority level so that it\ncan be replaced by a more sophisticated one if needed. This service\nis updating the PackageManager intent verification states thru\nthe updateIntentVerificationStatus(...) API.\n- update MockPackageManager\n\nChange-Id: I0bfed193d0bf1f7c7ac79f6c1b160b7ab93b5fb5\n"
    },
    {
      "commit": "c6d1c345f41cf817bf2c07c97b97107d94296064",
      "tree": "4bb0bac510ae49524f25a71e3f9e73f5f78cf36f",
      "parents": [
        "3910eb551c7736015708c627dcabaa75c66d9ec3"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Thu Feb 26 14:44:43 2015 -0800"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Mon Mar 23 18:50:35 2015 -0700"
      },
      "message": "Runtime permissions: per user permission tracking.\n\nBefore all permissions were granted at install time at once, so the user\nwas persented with an all or nothing choice. In the new runtime permissions\nmodel all dangarous permissions (nomal are always granted and signature\none are granted if signatures match) are not granted at install time and\nthe app can request them as necessary at runtime.\n\nBefore, all granted permission to an app were identical for all users as\ngranting is performed at install time. However, the new runtime model\nallows the same app running under two different users to have different\nruntime permission grants. This change refactors the permissions book\nkeeping in the package manager to enable per user permission tracking.\n\nThe change also adds the app facing APIs for requesting runtime permissions.\n\nChange-Id: Icbf2fc2ced15c42ca206c335996206bd1a4a4be5\n"
    },
    {
      "commit": "73fca8ed2bfc314afb9b8cfa67fc64f1d26ab4c3",
      "tree": "a7d04174c4ff6c719f29290c50313af0d16eb79e",
      "parents": [
        "828e0f78b30f98eb37dd30eaa49d03b96c37ab89"
      ],
      "author": {
        "name": "Evan Charlton",
        "email": "evanc@google.com",
        "time": "Mon Mar 02 07:07:05 2015 -0800"
      },
      "committer": {
        "name": "Evan Charlton",
        "email": "evanc@google.com",
        "time": "Mon Mar 02 07:07:05 2015 -0800"
      },
      "message": "Fix some javadocs typos\n\n\"Delegating\" was misspelled in various ways.\n\nChange-Id: I7b441f1c33b7d876b8f82829fddc1eb017cce2d0\n"
    },
    {
      "commit": "6e53931f49f49245deef8622eb8e7dc6ccf04536",
      "tree": "0b7101049fca594901d09a089ba1f9588053cd1e",
      "parents": [
        "ddd30928a7d8f410d7d13d5706da44ba20bac440"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Feb 24 18:53:21 2015 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Feb 25 17:04:13 2015 -0800"
      },
      "message": "Add Context.getSystemService(Class\u003c?\u003e).\n\nAdded an overload of getSystemService() that takes a class instead of a\nservice name to eliminate the extra cast and provide more type safety.\n\nCleaned up docs.\n\nRemoved the default constructor of BatteryManager which should not have\nexisted.\n\nChange-Id: I9da46b20641fc83ecd3342560e5b94cb721f289c\n"
    },
    {
      "commit": "377d6f00dc2ab42df501fd12b23e1dab54cea6b7",
      "tree": "68ca3dd6db17c060f07f573362c1a9d66019bfc5",
      "parents": [
        "0d4a4e6e59267ed58d9fe44303e400877aa1caab",
        "42fec57f3addfb1958f814b5d6772ff81341ba20"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Nov 21 00:43:51 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Nov 21 00:43:51 2014 +0000"
      },
      "message": "am 42fec57f: am d9968438: Merge \"Fix issue with call backs from media process.\" into lmp-mr1-dev\n\n* commit \u002742fec57f3addfb1958f814b5d6772ff81341ba20\u0027:\n  Fix issue with call backs from media process.\n"
    },
    {
      "commit": "ff17024e583b170312d82089fd358d278ce16c9a",
      "tree": "8c88e1081fe932f64fbae35b87fad3bb6f4ddd93",
      "parents": [
        "9522055f1d10b30158b772885bf4befe06fb2a08"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 10:59:01 2014 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Nov 19 14:29:10 2014 -0800"
      },
      "message": "Fix issue with call backs from media process.\n\nAll but a few lines of this is for issue #16013164, which allowed\napps to do some operations as the media uid by having it call\nback to them to open a file.  The problem here is with the tempory\nidentity stuff in the activity manager, allowing us to make the open\ncall as the original caller...  ideally we should figure out a way\nto just get rid of all of that, but the solution here is actually\neasier (even though it doesn\u0027t look it) -- we now hand a token over\nto the openFile() call that it can use when doing permission checks\nto say \"yes I would like the check to be against whoever is responsible\nfor the open\".  This allows us to do the uid remapping for only this\none specific set of permission checks, and nothing else.\n\nAlso fix issue #17487348: Isolated services can access system services\nthey shouldn\u0027t be able to.  Don\u0027t send any system service IBinder objects\ndown for the first initialization of an isolated process.\n\nChange-Id: I3c70e16e0899d7eef0bae458e83958b41ed2b75e\n"
    },
    {
      "commit": "05ea3213fd68204aa7cd9cc4b9b6a0a973f69c17",
      "tree": "7715bbc8d1d20fa3cc767d0d715e5192616f4c58",
      "parents": [
        "2a369533947c5552ba8e1c5cc9fb657952e3f0e0",
        "73577862ffe6332f326628febfa1fbb9e693bb40"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Thu Oct 30 23:44:09 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 30 23:44:09 2014 +0000"
      },
      "message": "am 73577862: am b1346d78: Merge \"Change boot screen title to \"Android is starting\" when not upgrading.\" into lmp-mr1-dev\n\n* commit \u002773577862ffe6332f326628febfa1fbb9e693bb40\u0027:\n  Change boot screen title to \"Android is starting\" when not upgrading.\n"
    },
    {
      "commit": "9f60c08a446e38f9e2d5271546ef69ca5941eba9",
      "tree": "f4ff67d3fecc7482d79d542531d8c5f46dead95e",
      "parents": [
        "ba9836d9726bbc7413a07ae2b86afde8adcd4cc3"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Oct 28 18:51:07 2014 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Oct 29 14:42:39 2014 -0700"
      },
      "message": "Change boot screen title to \"Android is starting\" when not upgrading.\n\nBug: 17565501\nChange-Id: Id5741e6e7a40750feee1cd7306e79f7baeec67de\n"
    },
    {
      "commit": "1e788daf6a0a4c3ad561002e1039f9cc2450d578",
      "tree": "b851d9333c76ca3aa5d7647f7174a7011b7ff592",
      "parents": [
        "3ad81eee7202317220599454bf550a755516a449",
        "6c99561384dafaa080b804078e55c6167efe0e11"
      ],
      "author": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Fri Oct 10 04:26:18 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 10 04:26:18 2014 +0000"
      },
      "message": "am 6c995613: am 301d2276: am 49e2371a: Merge \"Log exception when creating Activity in ActivityUnitTestCase.\" into lmp-sprout-dev\n\n* commit \u00276c99561384dafaa080b804078e55c6167efe0e11\u0027:\n  Log exception when creating Activity in ActivityUnitTestCase.\n"
    },
    {
      "commit": "301d2276f9d5208da7036b465203575a5eac8936",
      "tree": "56822cf1b6a1aa63fb9f9341e0992da7fef11469",
      "parents": [
        "466f5581ef1b45e601dc40db53a5ebd2d465ae14",
        "49e2371a271e33bbe8177c3f87d5f3b8ef7f59c5"
      ],
      "author": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Thu Oct 09 13:03:01 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Oct 09 13:03:01 2014 +0000"
      },
      "message": "am 49e2371a: Merge \"Log exception when creating Activity in ActivityUnitTestCase.\" into lmp-sprout-dev\n\n* commit \u002749e2371a271e33bbe8177c3f87d5f3b8ef7f59c5\u0027:\n  Log exception when creating Activity in ActivityUnitTestCase.\n"
    },
    {
      "commit": "49e2371a271e33bbe8177c3f87d5f3b8ef7f59c5",
      "tree": "c90ccc07dc538da700c370909d57a509b4fc5867",
      "parents": [
        "293b883c754df6c69ec9a77820d39fb55dc60018",
        "bc7f4f0e1275fca1484c02ba465fce907c6692f7"
      ],
      "author": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Wed Oct 08 21:12:23 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 08 21:12:25 2014 +0000"
      },
      "message": "Merge \"Log exception when creating Activity in ActivityUnitTestCase.\" into lmp-sprout-dev"
    },
    {
      "commit": "b81889f54ec297aba82ac8110c9983966d2bf9a6",
      "tree": "640a5e4cc060535dee9f00e49d80a0e5b07a7a97",
      "parents": [
        "7f1146084b6caa3fa73a08968214868682e7833c",
        "59f7c4c749fb69c9f83a3d28784147a941fecc58"
      ],
      "author": {
        "name": "Raluca Sauciuc",
        "email": "ralucas@google.com",
        "time": "Tue Oct 07 00:55:52 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 07 00:55:52 2014 +0000"
      },
      "message": "am 59f7c4c7: am 1cb156bb: am f35c305f: am 6a3faf5a: Merge \"Fix test framework to allow Mockito tests to run successfully on ART.\" into lmp-dev\n\n* commit \u002759f7c4c749fb69c9f83a3d28784147a941fecc58\u0027:\n  Fix test framework to allow Mockito tests to run successfully on ART.\n"
    },
    {
      "commit": "1cb156bb0160a1474b1703893b6e3e96c407cc5a",
      "tree": "c173488eaf6735be483ff771f35e3adcadd382ed",
      "parents": [
        "84527eca759495b4a5514edbea9a56b907992a42",
        "f35c305f45db60394c3c7fec2e41b38963da70ca"
      ],
      "author": {
        "name": "Raluca Sauciuc",
        "email": "ralucas@google.com",
        "time": "Tue Oct 07 00:32:10 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 07 00:32:10 2014 +0000"
      },
      "message": "am f35c305f: am 6a3faf5a: Merge \"Fix test framework to allow Mockito tests to run successfully on ART.\" into lmp-dev\n\n* commit \u0027f35c305f45db60394c3c7fec2e41b38963da70ca\u0027:\n  Fix test framework to allow Mockito tests to run successfully on ART.\n"
    },
    {
      "commit": "adabf536fbb971b2eb50a37f563e3027bda04061",
      "tree": "9455033b4b82d01219d0ab398a9f6c5e1a411236",
      "parents": [
        "6da9182faec9a8a7cc0d597957d00dd5e8226e34",
        "00fcb749cbd26c83d1a29a974bd92967b41c5882"
      ],
      "author": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Mon Oct 06 16:52:27 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 06 16:52:27 2014 +0000"
      },
      "message": "am 00fcb749: am 31409c0c: Merge \"Introduce new API to get an unbadged icon and unbadge permissions.\" into lmp-mr1-dev\n\n* commit \u002700fcb749cbd26c83d1a29a974bd92967b41c5882\u0027:\n  Introduce new API to get an unbadged icon and unbadge permissions.\n"
    },
    {
      "commit": "bc7f4f0e1275fca1484c02ba465fce907c6692f7",
      "tree": "522551f4acd35259cd4398dd92586ac4e419d952",
      "parents": [
        "35eb89097f4f555dc03d4d406359a9ebfa64144d"
      ],
      "author": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Mon Sep 29 14:05:19 2014 -0700"
      },
      "committer": {
        "name": "Filip Gruszczynski",
        "email": "gruszczy@google.com",
        "time": "Fri Oct 03 14:06:19 2014 -0700"
      },
      "message": "Log exception when creating Activity in ActivityUnitTestCase.\n\nIf the creation of an Activity fails, it is impossible to determine what\nwent wrong. We should log the exception immediately before failing on assert.\n\nChange-Id: Ie6cbe87ff342b8d60989f5e1a6ffa3efc058c585\n"
    },
    {
      "commit": "0180dfeff341639011ce005a6707c9dc3b55f5df",
      "tree": "52af2d8a04cd4d261ffeb67513377ac9ddafd625",
      "parents": [
        "b27d43a8805769f9a9dfdc024b5cd19b71cfd8d7"
      ],
      "author": {
        "name": "Raluca Sauciuc",
        "email": "ralucas@google.com",
        "time": "Fri Oct 03 10:58:29 2014 -0700"
      },
      "committer": {
        "name": "Raluca Sauciuc",
        "email": "ralucas@google.com",
        "time": "Fri Oct 03 10:58:29 2014 -0700"
      },
      "message": "Fix test framework to allow Mockito tests to run successfully on ART.\n\nCurrently, Mockito tests don\u0027t run on ART (KitKat \u0026 L) due to an extra\nNoClassDefFoundError exception being thrown while trying to resolve\ninternal test runner classes. These exceptions are benign, Mockito\u0027s\ninternal test runners all inherit from org.junit.runner.Runner, which is\nnot included in the setup, but none of them are actually used in tests.\n\nThe same apks succeed on Dalvik, and logcat shows the same exceptions\n going by, minus the NCDFE\u0027s.\n\nSection 5.3 of the VM spec says the virtual machine has to wrap a\nClassNotFoundException in NoClassDefFoundError if the first exception\narises from verification or resolution but not initialization of that\nparticular class.\n\nBug: 17042833\nChange-Id: I3af20f6884d9fa3afc3fbf9fcb238be10267827a\n"
    },
    {
      "commit": "ec2d48b96d1f95fb266914df294a27c210f8c3f5",
      "tree": "c0f88914e37dfb9a2c0577370bd7b92c63127fea",
      "parents": [
        "3e9bf6c69330d3e9b0f3d9424814b307532a64e9"
      ],
      "author": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Wed Oct 01 15:38:43 2014 +0100"
      },
      "committer": {
        "name": "Benjamin Franz",
        "email": "bfranz@google.com",
        "time": "Fri Oct 03 09:41:08 2014 +0100"
      },
      "message": "Introduce new API to get an unbadged icon and unbadge permissions.\n\nBug: 17125560\nChange-Id: I61b884186c96cc54dcaf1d3c7ee8f47610fd1d21\n"
    },
    {
      "commit": "c2a0b4482d7144e8382346ea4c22c7b89368fec0",
      "tree": "f0ec3fbeee8dde1d56ad85c59d858ec093d5eb9d",
      "parents": [
        "f08384c763d2e57c05e0be4325c267d12fc516d4",
        "ee665151a4c6359cbfbb9a6795aa9097c4622083"
      ],
      "author": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Thu Oct 02 14:32:37 2014 +0100"
      },
      "committer": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Thu Oct 02 14:32:37 2014 +0100"
      },
      "message": "resolved conflicts for merge of ee665151 to lmp-mr1-dev-plus-aosp\n\nChange-Id: I2588c65b7a9fa43f968151a206924a804f0595a7\n"
    },
    {
      "commit": "33253a4baa6279f81a73425b49dfb6abe5f5416e",
      "tree": "c0077bd08ebc6f3c138a3b4ddb54a0ea1108b200",
      "parents": [
        "0451728645d559d904f579894d4b59e971e2369e"
      ],
      "author": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Wed Oct 01 11:55:10 2014 +0100"
      },
      "committer": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Wed Oct 01 14:04:15 2014 +0100"
      },
      "message": "Switch from FloatMath -\u003e Math and Math.hypot where possible\n\nThe motivation is an API change: FloatMath is going to be\ndeprecated and/or removed. Performance is not the goal of\nthis change.\n\nThat said...\n\nMath is faster than FloatMath with AOT compilation.\n\nWhile making the change, occurances of:\n\n{Float}Math.sqrt(x * x + y * y) and\n{Float}Math.sqrt({Float}Math.pow(x, 2) + {Float}Math.pow(y, 2))\n\nhave been replaced with:\n\n{(float)} Math.hypot(x, y)\n\nRight now there is no runtime intrinsic for hypot so is not faster\nin all cases for AOT compilation:\n\nMath.sqrt(x * x + y * y) is faster than Math.hypot(x, y) with\nAOT, but all other combinations of FloatMath, use of pow() etc.\nare slower than hypot().\n\nhypot() has the advantage of being self documenting and\ncould be optimized in future. None of the behavior differences\naround NaN and rounding appear to be important for the cases\nlooked at: they all assume results and arguments are in range\nand usually the results are cast to float.\n\nDifferent implementations measured on hammerhead / L:\n\nAOT compiled:\n\n[FloatMath.hypot(x, y)]\nbenchmark\u003dHypot_FloatMathHypot} 633.85 ns; σ\u003d0.32 ns @ 3 trials\n\n[FloatMath.sqrt(x*x + y*y)]\nbenchmark\u003dHypot_FloatMathSqrtMult} 684.17 ns; σ\u003d4.83 ns @ 3 trials\n\n[FloatMath.sqrt(FloatMath.pow(x, 2) + FloatMath.pow(y, 2))]\nbenchmark\u003dHypot_FloatMathSqrtPow} 1270.65 ns; σ\u003d12.20 ns @ 6 trials\n\n[(float) Math.hypot(x, y)]\nbenchmark\u003dHypot_MathHypot} 96.80 ns; σ\u003d0.05 ns @ 3 trials\n\n[(float) Math.sqrt(x*x + y*y)]\nbenchmark\u003dHypot_MathSqrtMult} 23.97 ns; σ\u003d0.01 ns @ 3 trials\n\n[(float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))]\nbenchmark\u003dHypot_MathSqrtPow} 156.19 ns; σ\u003d0.12 ns @ 3 trials\n\nInterpreter:\n\nbenchmark\u003dHypot_FloatMathHypot} 1180.54 ns; σ\u003d5.13 ns @ 3 trials\nbenchmark\u003dHypot_FloatMathSqrtMult} 1121.05 ns; σ\u003d3.80 ns @ 3 trials\nbenchmark\u003dHypot_FloatMathSqrtPow} 3327.14 ns; σ\u003d7.33 ns @ 3 trials\nbenchmark\u003dHypot_MathHypot} 856.57 ns; σ\u003d1.41 ns @ 3 trials\nbenchmark\u003dHypot_MathSqrtMult} 1028.92 ns; σ\u003d9.11 ns @ 3 trials\nbenchmark\u003dHypot_MathSqrtPow} 2539.47 ns; σ\u003d24.44 ns @ 3 trials\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d36199\nChange-Id: I06c91f682095e627cb547d60d936ef87941be692\n"
    },
    {
      "commit": "de8d78906d584e4ce46da90f0972d28e06bf2870",
      "tree": "ef8b320beeff216f5c306f1fa2c52df650dca1a7",
      "parents": [
        "fdb35f0526e63dc4d6882d86029d9beacc6a2d07"
      ],
      "author": {
        "name": "Yigit Boyar",
        "email": "yboyar@google.com",
        "time": "Mon Sep 22 15:22:45 2014 -0700"
      },
      "committer": {
        "name": "Yigit Boyar",
        "email": "yboyar@google.com",
        "time": "Mon Sep 22 15:22:50 2014 -0700"
      },
      "message": "Remove unnecessary waits in TouchUtil\u0027s drag\n\nTouchUtil\u0027s drag method tries to sync after sending\neach event which is not necessary. Sync are slow so\nremoving them greatly improves test running time.\n\nBug: 17323559\nChange-Id: Ia4ed02b2af44da0d821d93d28f963005d9d7ea79\n"
    },
    {
      "commit": "e107c3eb79be40f1071c4370fd9a3f9e4fd6d6de",
      "tree": "cdf9da94a969dba7ac34ac73cd273dd184b0490d",
      "parents": [
        "0ecb0c4397445984a5c5db4c31f1210fb9b594a1"
      ],
      "author": {
        "name": "Adam Connors",
        "email": "adamconnors@google.com",
        "time": "Tue Sep 09 16:35:29 2014 +0100"
      },
      "committer": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Thu Sep 11 15:42:13 2014 +0100"
      },
      "message": "Remove package level intent forwarding.\n\nClean up unused methods.\n\nBug: 17389110\nChange-Id: I8a80fe3e14219f06572de05c390cdda0efcbf5db\n"
    },
    {
      "commit": "c7d62f02b8acfd0a6b31f8544ec2c07e780fe4bb",
      "tree": "532c46292dac958aed9b688138a828f2e8da58ec",
      "parents": [
        "d3cc74cac29c0534762228accf72ea8c6f5bebde"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Thu Sep 04 15:39:54 2014 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Fri Sep 05 10:07:02 2014 -0700"
      },
      "message": "Addressing API council comments for UserManager.\n\nbug:17390424\n\nChange-Id: I498d2541289915cb7db16e5c3249ccc7a7dc5ee6\n"
    },
    {
      "commit": "9189c4c2f05bc3f044f8a9c78339d0bfedb3dd8b",
      "tree": "5740386ed30380e62f8672c49aba9d9cb624a338",
      "parents": [
        "ae62d71d36022a7a62e00abc447c680f6d3ee83f"
      ],
      "author": {
        "name": "Akos Ludanyi",
        "email": "ludanyi@google.com",
        "time": "Thu Sep 04 14:08:49 2014 +0200"
      },
      "committer": {
        "name": "Akos Ludanyi",
        "email": "ludanyi@google.com",
        "time": "Fri Sep 05 10:17:53 2014 +0200"
      },
      "message": "Fix ProviderTestCase2 broken by ag/519661:\n\nProblem:\n1. ProviderTestCase2 passes a null as a ProviderInfo to the ContentProvider\n2. mAuthority and mAuthorities will be null during the test\n3. ContentProvider.matchesOurAuthorities will throw an NPE.\n\nFix:\nSupply a ProviderInfo with authority.\n\nExample bug:\nb/17379295\n\nChange-Id: Ia533313c0994727ef81f337a4e31a57ae7ec3c15\n"
    }
  ],
  "next": "c6f22499f3046684d7175e10ca42cce1492cd36f"
}
