)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "c6f22499f3046684d7175e10ca42cce1492cd36f",
      "tree": "64ae9686ff5c0a99576d996d90834218558ddcbb",
      "parents": [
        "14690b0aa380697179eb0432939a8ce96e6561f0"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Thu Aug 14 09:54:51 2014 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Thu Aug 14 22:13:24 2014 -0700"
      },
      "message": "Address KeySet API Review\n\nHide KeySet API. Change getKeySetByAlias to not require aliases from the calling\npackage.  Make KeySet parcelable.  Add hashCode method.\n\nBug: 16895228\nBug: 17009318\nChange-Id: I75951947dfc7a3cca9f8873bda72576d11abaaf0\n"
    },
    {
      "commit": "e41ce995a0c2c6b167ed64b51e34865c5d58ea4d",
      "tree": "e3663f79d4d41e849c1842a9673e619a1196b58e",
      "parents": [
        "fc4a648f0eba90108c5e0fc80520ce184c11796a"
      ],
      "author": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Tue Jul 29 15:08:31 2014 +0100"
      },
      "committer": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Wed Aug 06 14:52:50 2014 +0000"
      },
      "message": "Add hidden API for removing cross-profile package filters\n\nBug: 16646591\nChange-Id: Iaf6837fe4390ac1018c49df366ea434776ed7244\n"
    },
    {
      "commit": "976e8bd2017d0263216c62111454438cc0f130e3",
      "tree": "5cf592fb85841f9e41d3bf6b43422641c3609ab2",
      "parents": [
        "c79eabcd3c6306bb2ec75f9584b79e661f265127"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Wed Jul 16 15:12:03 2014 -0700"
      },
      "committer": {
        "name": "Svetoslav Ganov",
        "email": "svetoslavganov@google.com",
        "time": "Tue Aug 05 20:57:20 2014 +0000"
      },
      "message": "Allow adding widgets from user profiles.\n\nThe goal of this change is to enable support for appwidget from\nuser profiles to the user main profile. A user profile is a user\nwhich is associated as a child of the main user profile. For example,\na user may have a personal (parent) and corporate (child) profile.\nThe device policy should be able to control whether adding a widget\nfrom a child profile and given packages is allowed. This change\nassumes that all packages from managed profiles are white listed.\nAnother change will add the device policy changes.\n\nChange-Id: I267260b55d74c48b112a29979a9f59eef7a8194e\n"
    },
    {
      "commit": "16c8e3f49497b6046972ae650772f65768366be8",
      "tree": "56ad5dc58ab923e35029d25430d30bc77b218994",
      "parents": [
        "186655285fb5deafc4d56ca8efad2d115dfd6af3"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Jul 24 17:08:17 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 25 11:59:48 2014 -0700"
      },
      "message": "PackageInstaller changes based on feedback.\n\nMostly cosmetic changes from API council feedback.\n\nBug: 16543552\nChange-Id: Ic926829b3f77c31f50a899c59b779353daf00d59\n"
    },
    {
      "commit": "e5bcff624fb58b6f95be8ddff7f5b6b3bf5d19c7",
      "tree": "0a758d1029f2b8aed41a089330c7fa79564a6a32",
      "parents": [
        "c2ae1a6b455d97c4e89e2bf7b113435dd63bb36f"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Sat Jul 19 15:44:09 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Mon Jul 21 22:18:40 2014 +0000"
      },
      "message": "Rename setApplicationBlocked to setApplicationHidden\n\nThis corrects the expected behavior of the app state. Hidden apps\ncan be installed by the store to be brought out of hidden state.\n\nBug: 16191518\nChange-Id: Id128ce971ceee99ba1dea14ba07ce03bd8d77335\n"
    },
    {
      "commit": "4ed745d359ada6986ac15d8718452e5c55f40170",
      "tree": "fce91cd40193520da8012e839ac3615da51da57f",
      "parents": [
        "78a130144bdd047665f00782c481d31edb3e5fb7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 15 20:39:15 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 15 22:13:26 2014 -0700"
      },
      "message": "Add code cache directory for apps.\n\nThis provides a directory where apps can cache compiled or optimized\ncode generated at runtime.  The platform will delete all files in\nthis location on both app and platform upgrade.\n\nBug: 16187224\nChange-Id: I641b21d841c436247f35ff235317e3a4ba520441\n"
    },
    {
      "commit": "69ea974f1712c83a9ad194187237edf1169f9064",
      "tree": "c8d768527b58502da7b575b86ffa1b343044c9e2",
      "parents": [
        "969167dc05a6485a32d160895871cff46fd81884",
        "6c833e07a05c48ca60ee4d72421bf8b1e78dc710"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 15 06:16:37 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 15 00:41:06 2014 +0000"
      },
      "message": "Merge \"Public API for PackageInstaller!\" into lmp-dev"
    },
    {
      "commit": "6c833e07a05c48ca60ee4d72421bf8b1e78dc710",
      "tree": "f16f3c2a12dea6fd5131d82d007fd75cd61fb915",
      "parents": [
        "5c6a8e322227354acbded5c49f44c0b289021bf5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 14 22:44:30 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jul 14 23:06:52 2014 -0700"
      },
      "message": "Public API for PackageInstaller!\n\nFlesh out documentation and finalize first cut of API.  Also surface\ninstallLocation and splitNames through PackageInfo.\n\nBug: 14975160, 15348430\nChange-Id: Ic27696d20ed06e508aa3526218e9cb20835af6a0\n"
    },
    {
      "commit": "a7835b6b6b00923b608a6bc3194e7840f67de7a8",
      "tree": "17f914d3a2e608714d3833c90d6c0cf2db6ffc7b",
      "parents": [
        "4ad58a4738048ade35f4bee91554dd84aeab3f88"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jul 11 17:25:57 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@android.com",
        "time": "Mon Jul 14 22:56:04 2014 +0000"
      },
      "message": "Add Context.getNoBackupFilesDir()\n\nThis is an app-private filesystem space exactly like the one\nreported by Context.getFilesDir(), with one exception:  files\nplaced here are never backed up by the full-backup infrastructure.\nIf an app attempts to back up any of its contents via the normal\nAPI it\u0027s immediately ignored with a logged warning.\n\nThe restriction is also enforced on the restore side, because\napps using support libraries might wind up creating full backup\narchives containing no_backup subdirs on pre-L devices (via\nadb backup, Helium, \u0026c.).  We check for this before passing the\nrestore data to the app, and drop it if we detect the situation\nso that the app never sees the bits.\n\nBug 16240573\n\nChange-Id: I11216a391f1d32117ec7ce15aafc9cd93d0337de\n"
    },
    {
      "commit": "9d2f441f9bb2c8dcac1150e2cba1d15a86a4efb1",
      "tree": "7ddba4a062aac803b3329dfc311b8f474ea5d677",
      "parents": [
        "a4ab780877808dbee334f7c7cc4acefa0aa313b2"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Mon Jun 09 09:27:54 2014 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Mon Jul 14 12:50:51 2014 -0700"
      },
      "message": "Initial KeySet API.\n\nPreviously submitted but reverted due to doc-compilation bug.\n\nBug: 6967056\nChange-Id: I9bd7ef299a4c92c4b327f5b5d7e951f0753b4c8a\n"
    },
    {
      "commit": "5de7377feca5242fe7127e2d4dc7792d4886d365",
      "tree": "c7ac7801388c9572702b3c2440f0efc60ccc17b3",
      "parents": [
        "405912bce074e9e59a246e2357a108e50dffabf8"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Sat Jul 12 13:04:20 2014 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Sat Jul 12 13:04:20 2014 -0700"
      },
      "message": "Revert \"Initial KeySet API.\"\n\nThis reverts commit 9a643fe02bc960e266484547dda5572b094a4c72.\n"
    },
    {
      "commit": "405912bce074e9e59a246e2357a108e50dffabf8",
      "tree": "23e28254e4dd33b2cf6181e8136b3644f6ba3179",
      "parents": [
        "325503caef80ebce0da3e4d5fa2ac3f917dd1b1d"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Mon Jun 09 09:27:54 2014 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Sat Jul 12 12:09:40 2014 -0700"
      },
      "message": "Initial KeySet API.\n\nBug: 6967056\nChange-Id: I47a01bd5dc25591cc70f58f38920ad0a021094ae\n"
    },
    {
      "commit": "7f7b0c759e2970178ef68805b21f06a26e24eb76",
      "tree": "ed54685cced5cf9f6495ca9194595eb6edc8ff8d",
      "parents": [
        "160a6e5b99de15ce755e2e5521dce32d81ab180a"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Mon Jun 23 15:59:38 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Wed Jul 02 12:09:51 2014 +0100"
      },
      "message": "Returning badged icons for components of corporate apps.\n\nSo, corporate apps in disambiguation dialogs are badged.\nAnd updating the way we show the icon of the personal space to this new design.\n\nBUG: 14377051\n\nChange-Id: Idc707773a64a8feb2d9d4df88c425d5100542636\n"
    },
    {
      "commit": "0363c3eb089afd4474bfd6ae6ee8a500d6e97614",
      "tree": "6a9679a41b57601da0f518f0a308c46b07dc7fb4",
      "parents": [
        "13a11d8ead63763dd6dab04b4d20932c798ea7f6"
      ],
      "author": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Mon Jun 23 13:34:59 2014 +0100"
      },
      "committer": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Thu Jun 26 10:47:19 2014 +0100"
      },
      "message": "Expose per-user APIs for content services.\n\nBug: 15466880\nChange-Id: Ib5a030e78559307627fe0d2e80ce6f1a7825109d\n"
    },
    {
      "commit": "88cc346d0602e0b173b5076cd0051120682da601",
      "tree": "bbd06698583a7b2d617651a01bd61c372c1ddf31",
      "parents": [
        "aeb0ed74670e0502a04b689fe1b4fe0f537f4a91"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Wed May 14 14:51:48 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Mon Jun 23 12:25:07 2014 +0100"
      },
      "message": "Show the icon of the personal space.\n\nIn an intent disambiguation dialog from a managed profile,\nwhen the intent can be forwarded to the personal space:\nshow the icon of the parent next to \"Personal apps\".\nAnd put it at the bottom of the dialog.\n\nChange-Id: I523222aac5dde9653e784eb26cf23cdaf018b86c\n"
    },
    {
      "commit": "6e2ae2590ded39f04f76d5ddca0f06fe01586e26",
      "tree": "3e0835d70c79b4f083a54e4e874c52045fb1d33f",
      "parents": [
        "aab72f3b0ab740e12b4a2576a99852081529feb5"
      ],
      "author": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Thu Jun 12 16:03:58 2014 +0100"
      },
      "committer": {
        "name": "Alexandra Gherghina",
        "email": "alexgherghina@google.com",
        "time": "Thu Jun 19 18:04:45 2014 +0100"
      },
      "message": "Adds cross-profile intent filters for the Settings app\n\nBug: 15466742\nChange-Id: Id9af588f2f3d51a562ef2a06fe7404c96123cc2e\n"
    },
    {
      "commit": "dbcae5ceb766b0bc65fa819841f9bfab9ae11c2f",
      "tree": "20541e221c50f7d50713a2780242f8c63ecc93e2",
      "parents": [
        "88b37edaeab7b31cab0f5115e5c9f63a49991408"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 18 15:11:01 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 18 17:43:27 2014 -0700"
      },
      "message": "Switch from core to core-libart\n\nBug: 14298175\nChange-Id: I89db18bf3d88f9511cb2ad943c64ecdbaf09d96f\n"
    },
    {
      "commit": "e7cd37e6138c5e769cc6cb398e632bca24d2d1ab",
      "tree": "4b3bc0c1337023e7e5ca9940ab2b840e7ddf772d",
      "parents": [
        "f7ecf7c80520c017255cb350d183f0b62022349b",
        "63798c596dc757135950313eb4bb44ca58696c68"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Thu Jun 19 13:03:56 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 17 21:55:55 2014 +0000"
      },
      "message": "Merge \"Introducing crossProfileIntentFilters that skip the current profile.\""
    },
    {
      "commit": "7f047f02ad713305acf1de5db7d07792318d69c2",
      "tree": "f3e32b95a7b27a5c5b9c4090515a7e9ed0964379",
      "parents": [
        "5376c00db3b34f59c679911a950574ce87c822f6",
        "80f1fe5f7cc80b6f1da142c782ccbbad45d878a8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jun 19 02:16:34 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 19 02:16:34 2014 +0000"
      },
      "message": "am 80f1fe5f: am f8077cf2: am 8e21e215: Merge \"Switch from core to core-libart\"\n\n* commit \u002780f1fe5f7cc80b6f1da142c782ccbbad45d878a8\u0027:\n  Switch from core to core-libart\n"
    },
    {
      "commit": "80f1fe5f7cc80b6f1da142c782ccbbad45d878a8",
      "tree": "995aab8fd3567fb9b83b1309d23f78be918f1912",
      "parents": [
        "3aa4de11b05599d75af92a15820731144941c38f",
        "f8077cf2d7ee55dbf02ec0c65a05db7e5c2fabfc"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jun 19 02:08:10 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 19 02:08:10 2014 +0000"
      },
      "message": "am f8077cf2: am 8e21e215: Merge \"Switch from core to core-libart\"\n\n* commit \u0027f8077cf2d7ee55dbf02ec0c65a05db7e5c2fabfc\u0027:\n  Switch from core to core-libart\n"
    },
    {
      "commit": "63798c596dc757135950313eb4bb44ca58696c68",
      "tree": "1ec2df79484e6b73c354ef082c2c9511d247c310",
      "parents": [
        "a062a9339add79a84862a34e363e3e454a6ec435"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Tue May 27 13:22:38 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Wed Jun 18 14:13:19 2014 +0100"
      },
      "message": "Introducing crossProfileIntentFilters that skip the current profile.\n\nFor these crossProfileIntentFilters, the activities in the current profile cannot\nrespond to the intent.\nOnly activities in the target profile can respond to the intent.\n\nBUG: 14936725\n\nChange-Id: I5e2704c2b56ff50a8339dd49284956391d7fad7e\n"
    },
    {
      "commit": "559321abbfd2e66763accc172f3596e4cf7f9172",
      "tree": "e94adc95c49eb3cb672f2e17f68e7ae729039d40",
      "parents": [
        "24bec88db04f17fbaa0022f215efe6931b9bf5c1",
        "874d0d4032dc940327a81359f144d38d3cb580a3"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Mon Jun 02 17:34:08 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 02 17:34:09 2014 +0000"
      },
      "message": "Merge \"Add ArrayUtils methods and tests for consumption by KeySet code.\""
    },
    {
      "commit": "874d0d4032dc940327a81359f144d38d3cb580a3",
      "tree": "a47894c0f48e52290a1a80ec6dd3dc3a6bbb8a89",
      "parents": [
        "8756a9897a9b94c1abaabd69945e5b0a36b7fa86"
      ],
      "author": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Fri May 30 09:34:04 2014 -0700"
      },
      "committer": {
        "name": "dcashman",
        "email": "dcashman@google.com",
        "time": "Mon Jun 02 10:29:40 2014 -0700"
      },
      "message": "Add ArrayUtils methods and tests for consumption by KeySet code.\n\nAdds methods for dealing specifically with long data types.  Used by\nPackageKeySetData as part of the KeySet work.  Add appropriate test methods\nto MoreAsserts as well.\n\nBug: 6967056\nChange-Id: I1e263301b353e0cd1b45126be6ef5ec310f311a8\n"
    },
    {
      "commit": "43e15653706d667a722a3b813ea89917d00ed42a",
      "tree": "a00ae4a85c8d04bb94d935d366ad70456c795d66",
      "parents": [
        "92bcf31f541ceb4e5af031d249370c32c5cd4713",
        "05dc18d69ad64254f2bcdd9c1e208ab54ee664fe"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 30 23:51:46 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 30 23:51:46 2014 +0000"
      },
      "message": "am 9a78d4de: Merge \"Per-app media directories on external storage.\" into lmp-preview-dev\n\n* commit \u00279a78d4deb2d00dc67b2c11daf76b389e0712b535\u0027:\n  Per-app media directories on external storage.\n"
    },
    {
      "commit": "2ee3c1e189819cc6efb4d7de24f1438bdb824087",
      "tree": "720b998ef3649c638848bfad692689dbabef4a7f",
      "parents": [
        "b2f4bc8727f1df9d88f56a15c08cbf2cb8e2993c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 30 15:38:35 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri May 30 16:26:45 2014 -0700"
      },
      "message": "Per-app media directories on external storage.\n\nThis change defines per-app directories on external storage that\nwill be scanned and included in MediaStore.  This gives apps a way\nto write content to secondary shared storage in a way that can\neasily be surfaced to other apps.\n\nBug: 14382377\nChange-Id: I4cb367c870509e76f0c2c598f01e2f699780030a\n"
    },
    {
      "commit": "8194899071e0a84c95ef10614bd1b9485b48f589",
      "tree": "738be39b34e5ea6e64b9d7ac2de1aed18802bfe4",
      "parents": [
        "94d76b3ba962d10bb5c7e45d3dce4355359b999e"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Fri May 16 18:25:26 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Fri May 23 13:16:01 2014 +0100"
      },
      "message": "Rename code related to cross-profile intents.\n\nFor example, replace ForwardingIntentFilter by CrossProfileIntentFilter\n\nBug: 15023443\n\nChange-Id: Iee8cdf578817ef9956bcdece803a49b0d07b67f7\n"
    },
    {
      "commit": "3cf75729d5a27b8ddd1ea174626dbcf0349a1d07",
      "tree": "b98f3379f0bab5c2d1484e8f38434e3240851796",
      "parents": [
        "c9ee304c91b5572f0c1cd95e9bd1e4a84e28587d"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 16 12:37:29 2014 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Fri May 16 12:37:29 2014 -0700"
      },
      "message": "Variant of sendBroadcast with appOp flag for cross-user.\n\nNeeded for delivering SMS notifications to multiple users.\n\nChange-Id: Ib772292699aba37144621742e6f0ee5c68aadd78\n"
    },
    {
      "commit": "3a44f3f1b446315ef894e01d2ab9b5388c2bd8c4",
      "tree": "2d640524ab41be6368e3a5e911efc1bc0cd1255a",
      "parents": [
        "89b77cded638cab56a002c28da4d09f144f7c6cb"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 28 17:36:31 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed May 14 18:12:24 2014 -0700"
      },
      "message": "Initial support for split APKs, PackageInstaller.\n\nDefines a new PackageInstaller class that will be used for installing\nand upgrading packages.  An application desiring to install an\napplication creates a session, stages one or more package files in\nthat session, and then kicks off the install.\n\nPreviously, PackageManager would always make its own copy of a package\nbefore inspecting it, to ensure the data could be trusted.  This new\nsession concept allows the installer to write package data directly to\nits final resting place on disk, reducing disk I/O and footprint\nrequirements.  Writes are directed through an intermediate pipe\nto ensure we can prevent mutations once an install has been initiated.\nAlso uses fallocate() internally to support optimal ext4 block\nallocation using extents to reduce fragmentation.\n\nSessions are also the way we support installing multiple \"split\" APKs\nin a single atomic operation.  For a set of packages to form a valid\napplication, they must have exactly the same package name, version\ncode, and certificates.  A session can also be used to add a small\nhandful of splits to an application by inheriting existing packages\nwhen not performing a full install.\n\nAdd PackageParser support for extracting split names and certificates.\n\nBug: 14975160\nChange-Id: I23d1bf4fbeb9f99a8c83be0c458900a0f0d1bccc\n"
    },
    {
      "commit": "eeeacab5d52dea25adcc5d3e40b5afe7dfa105de",
      "tree": "50e798b7d589521a1e54d468f59313b779e7fdfb",
      "parents": [
        "17c5e990379baf887221c0776b4152613c2a8a2d"
      ],
      "author": {
        "name": "Tim Kilbourn",
        "email": "tkilbourn@google.com",
        "time": "Tue May 06 14:33:02 2014 -0700"
      },
      "committer": {
        "name": "Tim Kilbourn",
        "email": "tkilbourn@google.com",
        "time": "Tue May 06 14:33:02 2014 -0700"
      },
      "message": "DO NOT MERGE Hide leanback packagemanager apis.\n\nBug: 14116162\nChange-Id: I410d720013ba4e2bc1b0f8a6973daba5ca9008c6\n"
    },
    {
      "commit": "c79586ede6dcd6a167bc8360f058cb5cc655b33d",
      "tree": "06b4111aa0d02dabb8f4ee6e738ae4e17ee2a2fc",
      "parents": [
        "6fee7d4cf991a8d39bdefb782937250c87f60f25"
      ],
      "author": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Tue May 06 12:47:57 2014 +0100"
      },
      "committer": {
        "name": "Nicolas Prevot",
        "email": "nprevot@google.com",
        "time": "Tue May 06 13:54:48 2014 +0100"
      },
      "message": "Cleaning code related to the forwarding intent filters.\n\nChecking for INTERACT_ACROSS_USERS_FULL\nAdding equivalent methods in the PackageManager\n\nChange-Id: Iaa1328fa666613a78e67ca669ea045144275e895\n"
    },
    {
      "commit": "68b9d97593d2ec79892813ab06f1b89c41de64b0",
      "tree": "90d86ee22188e6d44850508eecd1f6fdd940f9ba",
      "parents": [
        "ae3f7cca5235b9c3da080e7f8210a21ecf48285b",
        "9e99cab7d9a0ec2315140c21bb1958eb7ff76a09"
      ],
      "author": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Fri Apr 11 19:01:21 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 11 19:01:21 2014 +0000"
      },
      "message": "am 9e99cab7: am 970417c7: Added getLeanbackLaunchIntentForPackage()\n\n* commit \u00279e99cab7d9a0ec2315140c21bb1958eb7ff76a09\u0027:\n  Added getLeanbackLaunchIntentForPackage()\n"
    },
    {
      "commit": "970417c7d3e33ccbd6918e28d9bc5da24651f5b3",
      "tree": "749f3b107192ceec97ac39d534138f4298303928",
      "parents": [
        "3d9a3b589af661f980a7c03f208915b54521639f"
      ],
      "author": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Thu Apr 10 10:42:19 2014 -0700"
      },
      "committer": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Fri Apr 11 10:54:39 2014 -0700"
      },
      "message": "Added getLeanbackLaunchIntentForPackage()\n\nChange-Id: I23be3bfa59be812a915adc37e08fdf59be8ad90f\n"
    },
    {
      "commit": "f1977b4500e82b72ea6aa5c46d97406a20017caf",
      "tree": "9d6b4e63bc4b4c70eb9fbd5eb2cff9587ba45485",
      "parents": [
        "9ad8a5331ca5eb6390c702ec57952043b56170bf"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Mar 24 16:25:51 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Mar 27 12:37:47 2014 -0700"
      },
      "message": "Expand install observer semantics\n\n...and now fail conservatively when two apps both attempt to define\nthe same permission.  Apps signed with the same certificate are\npermitted to redefine permissions.\n\nWe also finally have a (hidden) interface class for observing package\ninstallation so that we can now rev the interface without breaking\nexisting callers.\n\nBug 13551375\n\nChange-Id: Ifa4e59154dcccbb286ee46a35a6f25e4ad0f0f01\n"
    },
    {
      "commit": "7629a18a3f190368e6268d3f2827824905683268",
      "tree": "392b2bde32c959d39d7a37bc0f3c46d7fbe3a55b",
      "parents": [
        "ab8a501f255b272af887acb0e66eb71cdf24c755"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 19:59:48 2014 +0000"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Mar 26 19:59:48 2014 +0000"
      },
      "message": "Revert \"Expand install observer semantics\"\n\nThis reverts commit ab8a501f255b272af887acb0e66eb71cdf24c755.\n\nChange-Id: I4ab4ae1a96efa2adf9d5a513793d8b84eef38b4e\n"
    },
    {
      "commit": "ab8a501f255b272af887acb0e66eb71cdf24c755",
      "tree": "4428aa0f60d4a2a309e8882d27fab9c5b20ad5c3",
      "parents": [
        "48a5dbd3cc5dd8a919983455757dc4c7b82500ab"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Mar 24 16:25:51 2014 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Mar 25 19:28:54 2014 -0700"
      },
      "message": "Expand install observer semantics\n\n...and now fail conservatively when two apps both attempt to define\nthe same permission.\n\nWe also finally have a (hidden) interface class for observing package\ninstallation so that we can now rev the interface without breaking\nexisting callers.\n\nBug 13551375\n\nChange-Id: I3a286d024a30e812ee4b098f345401df3c00e178\n"
    },
    {
      "commit": "92703e62c1dc88a410a32b05c2d44f391c193140",
      "tree": "c9f7cebda5c808598132dd832dbd91706f18e4dc",
      "parents": [
        "87dbf308fcde409a73921a6da95d93bcb5e8c106",
        "4882ddfae2301f53f0bb1478d2e6d5ddefd66848"
      ],
      "author": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Thu Mar 13 21:26:48 2014 -0700"
      },
      "committer": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Thu Mar 13 21:26:48 2014 -0700"
      },
      "message": "resolved conflicts for merge of 4882ddfa to master\n\nChange-Id: I179899697c148ac34a67b195e2dbd3df2f9138de\n"
    },
    {
      "commit": "f78e312db2aa7653ddc021e7dc58ce48f95ba047",
      "tree": "07941001d36f2239dc9e283c1eeec126282ab64f",
      "parents": [
        "d23d916e0fc573ccde8a622aaa42ccfae9d31f82"
      ],
      "author": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Thu Mar 06 12:13:15 2014 -0800"
      },
      "committer": {
        "name": "Jose Lima",
        "email": "joselima@google.com",
        "time": "Wed Mar 12 18:07:38 2014 -0700"
      },
      "message": "Add banner attribute to app manifest\n\nChange-Id: I28b0dc6dee9623ec7534bb0e741b88f439b48c9f\n"
    },
    {
      "commit": "8a985d24ce9a38f40ed88fecbdcd0e75e3a68f44",
      "tree": "a71a241bf554a157a25d54dce66364d7881c3579",
      "parents": [
        "875e2101d71afe7e4acf10b061c942fbf7294775"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Feb 25 09:40:05 2014 -0500"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Feb 25 09:49:29 2014 -0500"
      },
      "message": "Tabs -\u003e spaces in frameworks/base.\n\nChange-Id: I5a84e8e93ac99b5ed0212b37bf66efa5e53864be\n"
    },
    {
      "commit": "ac6b332764264b1a940a3037434934582b9a9f68",
      "tree": "2060521aa89b5c38a0aab2dd4dd3e2c45f98ff37",
      "parents": [
        "f5749ac4efd154ff8cf4c8a7fdbb2c361e753edb",
        "e014eb6368f380545113fc115a6002da2d124726"
      ],
      "author": {
        "name": "quddusc",
        "email": "quddusc@google.com",
        "time": "Thu Jan 16 00:47:37 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jan 16 00:47:37 2014 +0000"
      },
      "message": "am e014eb63: am fc6b772f: am bf6d0797: am 2f1c2e32: am 3126ce6e: Merge \"docs: Fixed typo in InstrumentationTestRunner page. Bug: 11386360\" into klp-docs\n\n* commit \u0027e014eb6368f380545113fc115a6002da2d124726\u0027:\n  docs: Fixed typo in InstrumentationTestRunner page. Bug: 11386360\n"
    },
    {
      "commit": "e8df6f4d53f150edca32bd8fcb7d576f837fe9e0",
      "tree": "50ed906a02c10663890825ae35034243f80abbaa",
      "parents": [
        "cbc5f5410ff7c2b91e13f80a930f22944ce2ed88"
      ],
      "author": {
        "name": "quddusc",
        "email": "quddusc@google.com",
        "time": "Mon Jan 06 16:28:03 2014 -0800"
      },
      "committer": {
        "name": "quddusc",
        "email": "quddusc@google.com",
        "time": "Tue Jan 14 12:47:34 2014 -0800"
      },
      "message": "docs: Fixed typo in InstrumentationTestRunner page.\nBug: 11386360\n\nChange-Id: I7626fe6fe1a22e223a8929ed3e5178c8df8966c9\n"
    },
    {
      "commit": "6090995951c6e2e4dcf38102f01793f8a94166e1",
      "tree": "37f32f4b269fc26a18e3249a18459a476c473266",
      "parents": [
        "266f48cc042dda828109eb135088cdb6f0f7c1d5"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Nov 19 16:54:46 2013 -0500"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Wed Nov 20 11:31:47 2013 -0500"
      },
      "message": "Remove unused imports from frameworks/base.\n\nChange-Id: Ia1f99bd2c1105b0b0f70aa614f1f4a67b2840906\n"
    },
    {
      "commit": "1804e258fa8f8eb3d5d04e6e773c2f7cb026d9e0",
      "tree": "61f5f56c7a0506ea32280102defaf13c8fe9959e",
      "parents": [
        "e9293c1a1f9ac72b1ff1c47d41465eee39d44c1b"
      ],
      "author": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Tue Oct 22 17:39:37 2013 +0100"
      },
      "committer": {
        "name": "Mathew Inwood",
        "email": "mathewi@google.com",
        "time": "Tue Oct 22 17:39:37 2013 +0100"
      },
      "message": "Set mServiceCreated to false when onDestroy().\n\nIf tests call shutdownService() themselves, we should not call onDestroy()\nagain from tearDown(). Set mServiceCreated to false when we call onDestroy\nto prevent this.\n\nChange-Id: I618cb770cb43072273abdd2fdffd3390911203a1\n"
    },
    {
      "commit": "85f5f8132015d8a5043ea4413702420d0d157c9f",
      "tree": "08493f51fca4a3ebd4eaf584e8c0fa03b373be9c",
      "parents": [
        "ca25db0cb3d6b9686a42c9cb99d90dc095f20cd8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 07 10:16:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Oct 07 14:19:13 2013 -0700"
      },
      "message": "Add \u003cintent-filter\u003e support to \u003cprovider\u003e.\n\nFor the new documents work, we\u0027re only interested in the subset of\nContentProviders that actually implement DocumentsContract.  Instead\nof returning all providers, add \u003cintent-filter\u003e support to make it\neasier to limit the set of returned ProviderInfo.\n\nDefine a well-known action for DocumentsProviders, and start using it\nwhen querying for roots.  Continue supporting the old \u003cmeta-data\u003e\napproach until all apps have been updated.\n\nBug: 8599233\nChange-Id: I05f049bba21311f5421738002f99ee214447c909\n"
    },
    {
      "commit": "a2a0850de8e7324db37e0595d5374bb9c9903461",
      "tree": "2c772f6c774385b6f254885ccb2c38dc3b7a23d4",
      "parents": [
        "9210bc85545f31973c957b5179e6a82d05f473c6"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Sep 05 16:38:58 2013 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Sep 13 12:16:00 2013 -0700"
      },
      "message": "Add hidden API for querying available \u0027home\u0027 activities\n\nTo support improved home-app selection UX in Settings.\n\nBug 9958444\n\nChange-Id: I106090784618bf7bea6fce28f4f9b9fb8480d310\n"
    },
    {
      "commit": "95d785346b4dae808a2d8f77356175e55a572d96",
      "tree": "821f4566c90d25c624d6c85539bfbb6a0142754c",
      "parents": [
        "ec7a6ea84578be91e04a54331ea4ca63e7fb69e1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 11 09:51:14 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 11 09:59:47 2013 -0700"
      },
      "message": "Fix issue #10688644: Java crash in com.android.phone:\n\njava.lang.SecurityException: Operation not allowed\n\nThere was a situation I wasn\u0027t taking into account -- components\ndeclared by the system has a special ability to run in the processes\nof other uids.  This means that if that code loaded into another\nprocess tries to do anything needing an app op verification, it will\nfail, because it will say it is calling as the system package name but\nit is not actually coming from the system uid.\n\nTo fix this, we add a new Context.getOpPackageName() to go along-side\ngetBasePackageName().  This is a special call for use by all app ops\nverification, which will be initialized with either the base package\nname, the actual package name, or now the default package name of the\nprocess if we are creating a context for system code being loaded into\na non-system process.\n\nI had to update all of the code doing app ops checks to switch to this\nmethod to get the calling package name.\n\nAlso improve the security exception throw to have a more descriptive\nerror message.\n\nChange-Id: Ic04f77b3938585b02fccabbc12d2f0dc62b9ef25\n"
    },
    {
      "commit": "38ed2a471a2291383821fb187bfa18450f0581c2",
      "tree": "31a7ac96e520056689aa78c91c2bb244233305a8",
      "parents": [
        "c8fb093a8970b78084f2b4505fc283ac9e24317b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 06 16:17:22 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 06 16:39:59 2013 -0700"
      },
      "message": "Work on issue #10130785: Restore silence and vibrate settings...\n\n...in settings \u003e sound\n\nAdd a new ContentProvider API to canonicalize URIs, so they can\nbe transported across backup/restore.\n\nChange-Id: Ie5af3662f6822a32310e49c7f1e1ff084986c56e\n"
    },
    {
      "commit": "bd3b902567b09379e1b62c60b3319ad82102efad",
      "tree": "c179f95abfe89e2029e099c1dba50dcefc6dfe7b",
      "parents": [
        "b4f6a01d51612b9e50dffd95905e9c9add79b5d8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 20 15:20:04 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 23 11:27:25 2013 -0700"
      },
      "message": "Add CancellationSignal support to file operations.\n\nSince ContentProvider file operations can end up doing substantial\nnetwork I/O before returning the file, allow clients to cancel their\nfile requests with CancellationSignal.\n\nIdeally this would only be needed for openFile(), but ContentResolver\nheavily relies on openAssetFile() and openTypedAssetFile() for common\ncases.\n\nAlso improve documentation to mention reliable ParcelFileDescriptors\nand encourage developers to move away from \"rw\" combination modes,\nsince they restrict provider flexibility.  Mention more about places\nwhere pipes or socket pairs could be returned.\n\nImprove DocumentsContract documentation.\n\nBug: 10329944\nChange-Id: I49b2825ea433eb051624c4da3b77612fe3ffc99c\n"
    },
    {
      "commit": "7f392defccfae54dc8169e5ad82c2616e0713c8e",
      "tree": "3d647e7c869d6cb60f08c3ddaabff33aa12d4906",
      "parents": [
        "1abdb7123025e52512b2ed7a518f8c754c35f50a"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 11 17:42:17 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Aug 11 17:42:17 2013 -0700"
      },
      "message": "Catch a few extra users of UserEnvironment.\n\nChange-Id: I3112773b72c329893e4118ef1c4f4087d899139e\n"
    },
    {
      "commit": "655d0e2029e6ae77a47e922dce4c4989818b8dd1",
      "tree": "67a9e2261c5e61f5a1b8f7f4f8cfcca5b433046c",
      "parents": [
        "bf991a8f426921c26e21e54e493781e1d5eb39ff"
      ],
      "author": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Wed Jun 12 14:19:10 2013 -0700"
      },
      "committer": {
        "name": "Amith Yamasani",
        "email": "yamasani@google.com",
        "time": "Tue Jun 25 16:03:55 2013 -0700"
      },
      "message": "Single-user restrictions\n\nIntroduces a new \"blocked\" state for each package. This is used to temporarily\ndisable an app via Settings-\u003eRestrictions.\n\nPIN creation and challenge activities for use by Settings and other apps. PIN\nis stored by the User Manager and it manages the interval for retry attempts\nacross reboots.\n\nChange-Id: I4915329d1f72399bbcaf93a9ca9c0d2e69d098dd\n"
    },
    {
      "commit": "48d0d1886731ff19ed3fb47a5997be5df0d1bba8",
      "tree": "5e0b5e9bc6899bf5c772a4ebab5b8df4015411cd",
      "parents": [
        "b1c5945a5598263fe63f3d665f575ba736eb26d2"
      ],
      "author": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Tue Jun 11 07:53:06 2013 -0700"
      },
      "committer": {
        "name": "Craig Mautner",
        "email": "cmautner@google.com",
        "time": "Sat Jun 22 15:30:13 2013 -0700"
      },
      "message": "Add activity token to display system.\n\nFirst step in adding activity specific information to displays.\nReplace CompatibilityInfoHolder with DisplayAdjustmentsHolder that\nholds an activity token in addition to the CompatibilityInfo.\n\nChange-Id: Ie113cd8dd9c62e0b5311204e039a4829096bea68\n"
    }
  ],
  "next": "c87c92e079b9aff771ac0810fc86def81654dbda"
}
