)]}'
{
  "log": [
    {
      "commit": "88d2a3c0e1b4a8c53a489db5d627beb80b1b9957",
      "tree": "18761183dea3ba5e0c63283feb938934a3454294",
      "parents": [
        "4dfce43e976a294b3b575564c855214a8e5cef58"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Nov 22 16:49:34 2014 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Nov 24 12:13:11 2014 -0800"
      },
      "message": "Introduce revision codes for split APKs.\n\nApps delivered as multiple split APKs must have identical package\nnames, version code, and signatures.  However, developers may want\nto iterate quickly on a subset of splits without having to increment\nthe version code, which would require delivery of the entire app.\n\nThis change introduces \"revision codes\" which can vary between\nsplit APKs belonging to the same app.  An install is valid as long\nas the normal version code is identical across all splits.  Splits\ncan be added/removed to an app over time, but if a split is present\nacross an upgrade the revision code must not decrease.\n\nSince system apps could have been updated with splits, only revert\nto the built-in APKs if the version code is strictly greater than the\ndata version.  Also fix bug to enable inheriting from system apps\nwhen adding splits.\n\nBug: 18481866\nChange-Id: I34d8e14c141a8eb95c33ffe24b4e52d6af5c8260\n"
    },
    {
      "commit": "941a8ba1a6043cf84a7bf622e44a0b4f7abd0178",
      "tree": "c783987f68caaa4cc827b3c720f269bcc9d34667",
      "parents": [
        "7653a30ea0232ab8323ec51ddcba8d8054ca8a2f"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 20 16:26:32 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Aug 22 16:25:04 2014 -0700"
      },
      "message": "Installing splits into ASECs!\n\nSessions can now zero-copy data directly into pre-allocated ASEC\ncontainers.  Then at commit time, we compute the total size of the\nfinal app, including any inherited APKs and unpacked libraries, and\nresize the container in one step.\n\nThis supports both brand new ASEC installs and inheriting from\nexisting ASEC installs.  To keep things simple, it currently requires\ncopying any inherited ASEC contents, but this could be optimized in\nthe future.\n\nExpose new vold resize command, and allow read-write mounting of ASEC\ncontainers.  Move native library extraction into the installer flow,\nsince it needs to happen before ASEC is sealed.  Move multiArch flag\ninto NativeLibraryHelper, instead of making everyone pass it\naround.  Migrate size calculation to shared location.\n\nSeparate \"other\" package name in public API, provide a path to a\nstorage device when relevant, and add more docs.\n\nBug: 16514385\nChange-Id: I06c6ce588d312ee7e64cce02733895d640b88456\n"
    },
    {
      "commit": "bb7b7bea19223c1eba74f525c7fe87ca3911813b",
      "tree": "9477730dcb2db25d345a9845188b48a01647446c",
      "parents": [
        "80030f90b61cc5479382264966bf1b7bf66f10c8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Aug 19 16:18:28 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Aug 20 12:47:27 2014 -0700"
      },
      "message": "More progress towards split APKs in ASECs.\n\nTeach DefaultContainerService to install split APKs, which will be\nneeded when moving to/from ASECs.  Also support forward locking for\ntesting purposes, even though its deprecated.\n\nMove native library unpacking code to NativeLibraryHelper location\nwhere it can be shared by both DCS and PMS.  Also update footprint\ncalculation logic to mirror the later unpack codepaths.\n\nImmediately persist sealed sessions.  When resolving install\nlocations, prefer location of any existing install of that\npackage.  Lightweight parse requesting certificates now always\nverifies that all contents are signed correctly.\n\nBug: 16514385\nChange-Id: Ida1c4eb0f95b065104dd971e19126d4085ebf1f0\n"
    },
    {
      "commit": "742e790294b3441b79f715fe447069b63c6065db",
      "tree": "68ac792721f920e154e26f56c1d14b3ee01ba18d",
      "parents": [
        "2aaed141fa22b235ecbd009b11c426abfa5b847c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 16 19:09:13 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 18 15:52:24 2014 -0700"
      },
      "message": "Progress towards staging ASECs.\n\nMove location selection logic into shared PackageHelper location,\nand share it between DCS and PackageInstaller.  Fix bugs related to\ninstalled footprint calculation; always count unpacked native libs.\n\nHave PMS do its own threshold checking, since it\u0027s fine to stat\ndevices.  PMS only ever deleted staging ASECs, so move that logic\ninto installer and nuke unclaimed staging ASECs.  Allocate legacy\nASEC names using PackageInstaller to make sure they don\u0027t conflict\nwith sessions.\n\nStart wiring up session to allocate ASEC and pass through staged\ncontainer for installation.\n\nFix bug to actually delete invalid cluster-style installs.\n\nBug: 16514385\nChange-Id: I325e0c4422fc128398c921ba45fd73ecf05fc2a9\n"
    },
    {
      "commit": "ff110bd61a69f7ed8602ae14b27f7befec76b2e7",
      "tree": "952fc963ae155edfc6f781611ee3dd1b68d3a071",
      "parents": [
        "3e9090524a9a2ba686d2c115ee8c65a8d379be12"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Jul 04 18:30:45 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jul 10 17:16:14 2014 +0100"
      },
      "message": "Multi-arch application installs.\n\nEach application now has two ABIs, the primary\nand the secondary. The app is always launched with\nthe primary, but the secondary might be used by other apps\nthat load the given applications code. This implies we\nmust:\n\n- dex2oat the app both ways.\n- extract shared libraries for both abis.\n\nThe former is relatively straightforward but the latter\nrequires us to change the layout for shared libs that we\nunpack from applications. The bulk of this change deals\nwith the latter.\n\nThis change continues to fill in nativeLibraryPath during\nscans for backwards compatibility. This will be removed in\na future patch.\n\nChange-Id: Ia943dd11ef815c5cbfc60f17929eaa2a652a385a\n"
    },
    {
      "commit": "d746057f2414cba2bdc69257cc5be8cb681bb592",
      "tree": "d25c88f1e3e5406bdb3fa149df0cb596602a302f",
      "parents": [
        "255edb556e289a53d1c62a700028c25dab90010e"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Jul 06 20:44:55 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jul 08 00:38:57 2014 -0700"
      },
      "message": "Change new file installs to be cluster-based!\n\nNow that all the other pieces are in place, we\u0027re ready to start\ninstalling new file-based packages as a cluster (the new unified\ndirectory-based layout).  This greatly simplifies the renaming\nprocess.\n\nAlso add helper methods to ApplicationInfo to give a much clearer\nmapping between it and internal field names, since we can\u0027t change\nthe public API.\n\nAdd recursive restorecon().\n\nBug: 14975160\nChange-Id: I72a63c5ddbc594c2fec4a91dd59f73ef253fbfd7\n"
    },
    {
      "commit": "be520fba1e45c77ca20eb66005a0cf19e10939a1",
      "tree": "d08aaf3c60d405b46502b60af9ecc169c20ff415",
      "parents": [
        "0c54798aac8a86fed24b14a66f09797d58ad0399"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 18:23:17 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 19:16:53 2014 -0700"
      },
      "message": "Teach DCS about cluster packages.\n\nFor the time being, DCS is going to still be doing heavy lifting for\nsome install tasks, so it need to know how to handle both monolithic\nand cluster packages.  This change is mostly plumbing work to\neventually handle any various splits APKs that we may encounter.\n\nBug: 14975160\nChange-Id: I39848d5666f9083cb4eca493e5cdaa868f3f99fb\n"
    },
    {
      "commit": "0c54798aac8a86fed24b14a66f09797d58ad0399",
      "tree": "087a4fa0fc86f65a26d72adcb3b8de2ad5cd765f",
      "parents": [
        "73767b9d607d99b3a027619b5c6b7f1a09b7673d"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 15:46:38 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Jul 05 15:49:07 2014 -0700"
      },
      "message": "Start removing ContainerEncryptionParams.\n\nThe new PackageInstallerSession APIs will allow installers to deliver\nbits directly into system protected storage, so we no longer need\nencrypted containers.\n\nChange-Id: I8b598cb149b7dfd1d41e6626c1359610a573edf1\n"
    },
    {
      "commit": "73767b9d607d99b3a027619b5c6b7f1a09b7673d",
      "tree": "4906ccdb54022a1a0b47950c5cb0546c585c75c0",
      "parents": [
        "9810f39717f3625222af9d710f7d8f5acca28449"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 20:18:13 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Jul 04 21:00:33 2014 -0700"
      },
      "message": "Extract native code from split APKs.\n\nIn the new split APK world, multiple APKs work together to define a\nsingle package.  This means that native code may be split among those\nAPKs.  To handle this, extend NativeLibraryHelper to examine all\nAPKs in a package ordered by splitName.\n\nA package has valid native code as long as one matching ABI is found\ninside.  The \"best\" ABI found across all APKs is picked for the\nentire package.  No attempt is made to ensure that every native\nlibrary defined is available for the picked ABI; that\u0027s the\nresponsibility of the installer.\n\nRe-introduce PackageLite to represent a lightweight parsing of an\nentire package, which may be a single monolithic APK or a cluster\nof one or more APKs.\n\nRemove native code extraction from InstallerSession, since it\u0027ll be\nhandled inside PMS for this release.\n\nBug: 14975160\nChange-Id: I4f4db0f82e88a46101c7777499ebc0a11fd911f9\n"
    },
    {
      "commit": "57dcf5b177b56195421535938544f32d8b591b42",
      "tree": "602931c441094568468a898c6209ce457f9ae53b",
      "parents": [
        "6ee242a58c659738a58986a1c7573eb019a42ad5"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 18 17:46:05 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jul 02 19:03:54 2014 -0700"
      },
      "message": "Slow progress towards APK clusters.\n\nDifferentiate between \"split APKs\" and \"cluster packages\".  A cluster\npackage is a directory containing zero or more APKs (base+splits),\nand a monolithic package is a single APK (base).\n\nPackageSetting will use the directory name as its codePath, so track\nthe baseCodePath separately.  Clarify documentation in several\nplaces.\n\nRequire that all installers provide file:// URIs through existing\nhidden APIs; PackageInstaller hasn\u0027t been able to read content://\nURIs for a long time.\n\nBug: 14975160\nChange-Id: I1c6fed1b55205c2474b09871161a98a26669d22e\n"
    },
    {
      "commit": "cef0b39b9211882f59b6bfe1148e2cd247056693",
      "tree": "03394664c25a7981063b558a76936278f8f4ea4f",
      "parents": [
        "160a6e5b99de15ce755e2e5521dce32d81ab180a"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jun 12 17:19:43 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jul 02 12:43:52 2014 +0100"
      },
      "message": "Fix native crashes when APKs can\u0027t be opened.\n\nThere was lax / incomplete error checking around the\nconstruction of Apk handles. This change changes the ApkHandle\nAPI and makes it throw IOException if the zipfile couldn\u0027t\nbe opened.\n\nAdditionally :\n- Fix a resource leak in DefaultContainerService\n- Report errors correctly during package moves.\n\nbug: 15563874\n(cherry picked from commit ec4516470d7ce6e47769591d678c838bd3f6f388)\n\nChange-Id: Ia35b464355467d0d36faf34fae85acbbab3f2896\n"
    },
    {
      "commit": "275e085d5a42ced54bb79e40ff76c77539e7d82d",
      "tree": "4de6a262ffb6132f0387b44c582e26dfea02e6b7",
      "parents": [
        "b593539faf6b27c7c631c9286a442b01c25848ab"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Tue Jun 17 18:18:49 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Jun 18 16:04:13 2014 -0700"
      },
      "message": "Stronger PackageParser contract, more split work.\n\nRequire that method callers always provide relevant paths, instead of\nrelying on constructor.  Move DisplayMetrics to be an overall parser\nparameter, and move PARSE_TRUSTED_OVERLAY to flags.\n\nParse split APKs and apply deterministic ordering based on split\nnames.  Assert consistent package name and version code across all\nsplit APKs in a package, and enforce unique split names and required\nbase APK.\n\nCollect certificates for split APKs, enforcing they\u0027re all signed\nconsistently.  Better flow control and resource cleanup when\ncollecting certs.  Refactor validation code so it\u0027s easier to reason\nabout.  Cleaner maintenance of read buffer when draining stream\ncontents.\n\nChange-Id: I8bc8c62095fbb933227b9e76ad8771f4b1246fe8\n"
    },
    {
      "commit": "c4858a2ba972e86436d629c4d3f18eb49116de14",
      "tree": "39a0881ce85d09ddd277f050c28f0d3cba07df7d",
      "parents": [
        "b87de28f50e9f02a365f35348f8da6cc2629bc1c"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 16 10:51:20 2014 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Jun 16 13:20:18 2014 -0700"
      },
      "message": "Switch PackageParser to reference single path.\n\nIt previously kept mPath separate from mScanPath for some very odd\nedge cases around moving apps-on-SD.  This changes it to always use\na single path, refactors moving to keep separate paths.\n\nRefactors method names in PackageParser to be clearer about their\nAPK-versus-package relationship.\n\nBeginnings of a split package parser.  Instead of requiring that\ncallers check error codes when null, switch to always throwing on\nparse errors, to require that callers deal with the error.  Longer\nterm the entire parser should switch to this style, but its too\npervasive for a simple refactoring.\n\nChange-Id: If071d8e55e46e56cc201fadfb51cb471713ae973\n"
    },
    {
      "commit": "26c6c03196be0248f3cf3e71383d89268f645bf5",
      "tree": "5966c3cbdced5a093094ef469a142f88778d15b3",
      "parents": [
        "7cb13f8a0a40f3d971a953b330f38bfcfb001c5e"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 14:54:36 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 14:54:52 2014 +0100"
      },
      "message": "Fix build.\n\nBad resolution of a manual rebase.\n\nChange-Id: I56d4c7a343c8fd7a715f983b2db15767849f9af7\n"
    },
    {
      "commit": "d47e38b6342fea93b007319431634a4bcfee452c",
      "tree": "4f6365ddf8421fbe2c4238d26ab53d005cc0976e",
      "parents": [
        "7ed98c43f8cbcfbb4862205a72455ab39359a011"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri May 16 16:45:56 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 12:58:35 2014 +0100"
      },
      "message": "Scan for renderscript files before deciding ABIs.\n\nThe presence of \".bc\" files in an APK implies\nincompatibility with any of the 64 bit ABIs.\n\nbug: 14900093\n\nChange-Id: I66ca339a9a149cb3b7e7b349033d80acdeb4140a\n"
    },
    {
      "commit": "6431d11cd420536aaa9d93ae510a3151ccc4df1d",
      "tree": "880f75d4410e2a8cd8c1edf29297b8b14b561669",
      "parents": [
        "032c5c054c331b63f2d45ee9c497ac852faec633"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu May 29 11:51:59 2014 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jun 03 11:11:47 2014 +0100"
      },
      "message": "Add an --abi argument to \"pm install\"\n\nThis allows callers to force an install to a particular\nABI. This is intended only for testing (and CTS) and is\nnot meant for usage by the installer package.\n\nChange-Id: Icb1528c0cd35b1aa9323386cb35ff4aaba374fcb\n"
    },
    {
      "commit": "34385d352da19805ae948215e2edbeedd16b7941",
      "tree": "5295ae3854135ea3cb0c57698971ee17f47ea46c",
      "parents": [
        "3f4867f49d6c1932117e3519ce10d11f37829f19"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 11:11:32 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 28 11:11:32 2014 -0700"
      },
      "message": "Track libcore.os\u0027 move to android.system.\n\n(This is partial, but should cover everything in AOSP master except\nfor the zygote.)\n\nChange-Id: I1042c99245765746a744c44e714095cb2c6cb75d\n"
    },
    {
      "commit": "1378aba7aeeb7f6dd6cc2503968ba7b0e58d9333",
      "tree": "7c69781ce86ea7fcf88775cb514a49a7824898f9",
      "parents": [
        "a6f5e79dd182b05909fa53109e74638afcd7ee12"
      ],
      "author": {
        "name": "Ramin Zaghi",
        "email": "ramin.zaghi@arm.com",
        "time": "Fri Feb 28 15:03:19 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Apr 09 17:16:40 2014 +0100"
      },
      "message": "Re-implement native library search and copies.\n\nWe now use a two step approach :\n\n- First we look through the list of shared libraries in an\n  APK, and choose an ABI based on the (priority)  list of ABIs\n  a given device supports.\n- Then we look through the list of shared libraries and copy\n  all shared libraries that match the ABI we\u0027ve selected.\n\nThis fixes a long-standing bug where we would sometimes copy\na mixture of different ABIs to the device, and also allows us\nto clearly pick an ABI to run an app with.\n\nThe code in NativeLibraryHelper has been refactored so that all\nfile name validation \u0026 matching logic is done in a single place\n(NativeLibrariesIterator). This allows us to avoid a lot of\nredundant logic and straightens out a few corner cases (for eg.\nwhere the abi determination \u0026 copying logic do not agree on\nwhat files to skip).\n\nbug: https://code.google.com/p/android/issues/detail?id\u003d65053\nbug: 13647418\n\nChange-Id: I34d08353f24115b0f6b800a7eda3ac427fa25fef\nCo-Authored-By: Zhenghua Wang \u003czhenghua.wang0923@gmail.com\u003e\nCo-Authored-By: Ramin Zaghi \u003cramin.zaghi@arm.com\u003e\nCo-Authored-By: Narayan Kamath \u003cnarayan@google.com\u003e\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": "a7ac8be1f564ad27c0b1f4796b60f3eaaa8dc611",
      "tree": "dacda19d3869843eba29e24e7f07a1b3f8c2918e",
      "parents": [
        "11396cfd6fd03a72569046b02715455ea0bb186d",
        "dff4ec87e7b942b7b4410f639fc74c2cffb386d6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 11 10:16:46 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jul 11 10:16:46 2013 -0700"
      },
      "message": "am dff4ec87: am e16a21c6: resolved conflicts for merge of 4a59376d to stage-aosp-master\n\n* commit \u0027dff4ec87e7b942b7b4410f639fc74c2cffb386d6\u0027:\n  Track libcore API change.\n"
    },
    {
      "commit": "e16a21c6b4f108813e5f5e00f30e0ff075de504c",
      "tree": "97f03d1ca4030d0925ba82fd41398cf428aef0f8",
      "parents": [
        "fb231fea6cd4dac7323b1df74006b294c3c9bfef",
        "4a59376d5ee031e930e61292ed9e92e96e956724"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 15:24:13 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 15:25:23 2013 -0700"
      },
      "message": "resolved conflicts for merge of 4a59376d to stage-aosp-master\n\nChange-Id: I0e40180b46dc58781c218b8d382299dab73d49cc\n"
    },
    {
      "commit": "befd0b1bdfb4492425944a1b7fcf6d10eaed9b4c",
      "tree": "b0e6320cc4cfef37271bffea6b859ac3139e3757",
      "parents": [
        "fa42e774bc48c3172023c8c49610baa469c19e39"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 14:46:18 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 09 14:46:18 2013 -0700"
      },
      "message": "Track libcore API change.\n\nChange-Id: Ib818a7f21325c5f918bf497033a90d76b25ec9e7\n"
    },
    {
      "commit": "5adb34f022bdc856e98483579a299f89a3c28d5c",
      "tree": "e771432ae36eaf84e97fe64c73e4bc146a0b919a",
      "parents": [
        "007d4d7040c9b41de584e79ba7dbd15d25f54971"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 25 11:35:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Apr 25 11:35:12 2013 -0700"
      },
      "message": "Always close incoming PFD to avoid leaking.\n\nChange-Id: I9559bb1e83c9bf2f9fd2af9c7b0d8b9e3aadc4ae\n"
    },
    {
      "commit": "63d0a067997cecf9c6e97a17852f9b657bbba48e",
      "tree": "f0adf8683e433a706074a5390292fce6df56928e",
      "parents": [
        "02a4cec107f1f07409fd03106b1cde56043894fa"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 01 16:12:55 2013 -0800"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Fri Mar 01 16:36:52 2013 -0800"
      },
      "message": "Improve performance of storage measurement.\n\nWhen calculating directory sizes of data living on emulated external\nstorage, translate the path to use the internal backing data, which\navoids going through the emulation layer.  It carefully retreats to\nthe original path when it runs into trouble.\n\nTesting with a hierarchy of 10 directories deep and 2 directories\nand 10 files wide at each level, this change improves performance\nfrom 5900ms before to 250ms after; over 20 times faster (!).\n\nBug: 8172425\nChange-Id: Ia7365416f091e102bf7345a49f7d7209a22580a9\n"
    },
    {
      "commit": "40e9f2922cae76ffcbc521481e5be8e80e8744ef",
      "tree": "8eb1822dd2832b729d4b262b616ecc050d9cf266",
      "parents": [
        "ba4ac51823c59152e2167365b81ac56857b6b4d0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 27 19:12:23 2012 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Nov 27 19:12:23 2012 -0800"
      },
      "message": "Quiet down a lot of logging.\n\nAlso fix a little problem where the USER_STARTED broadcasts\nwere not being sent as ordered broadcasts(!).\n\nChange-Id: I3aa3e0a9b3900967cdd2d115ee103371b0a50c41\n"
    },
    {
      "commit": "cea3743499f4bb8e5f28a2e57686d7af313169c5",
      "tree": "f762b85645c8e05ab1ad5f322e9f45daa7cffc26",
      "parents": [
        "a3e90798b7ad3ed62e5b31842c699b2f98bd457b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 14:57:33 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 18 17:21:59 2012 -0700"
      },
      "message": "Try to free cache before giving up on install\n\nTry to get installd to free up cache before giving up when there is too\nlittle space free.\n\nBug: 7232123\nChange-Id: Ie3c8ca8dfc190abbb9a29a7baee31f32e9de7d69\n"
    },
    {
      "commit": "625239a05401bbf18b04d9874cea3f82da7c29a1",
      "tree": "b7d6cdc6c51342262763ad251870350759800ed3",
      "parents": [
        "e00d33cf05a111c9be605d3d59db911cd983fcb9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Wed Sep 26 22:03:49 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Thu Sep 27 16:22:53 2012 -0700"
      },
      "message": "Migrate more Secure settings to Global.\n\nMigrate networking, storage, battery, DropBox, and PackageManager\nrelated Secure settings to Global table.\n\nBug: 7232014, 7231331, 7231198\nChange-Id: I772c2a9586a2f708c9db95622477f235064b8f4d\n"
    },
    {
      "commit": "752cd922f7091dfd5401faf70dc248934a9dbb6d",
      "tree": "687e7c87a3fa71ac84c3fc5db8327d452a7cddc3",
      "parents": [
        "5a370882f87321629f98f6149ac946a57e25dfa8"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 23 16:25:12 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Sep 23 16:44:34 2012 -0700"
      },
      "message": "Always bind to DefaultContainerService as OWNER.\n\nWhen PackageManagerService deals with external storage, always bind\nto DefaultContainerService as USER_OWNER.  This avoids binding to a\nstopped user, which would fail.\n\nBug: 7203111\nChange-Id: I8e303c7558e8b5cbe4fea0acc9a472b598df0caa\n"
    },
    {
      "commit": "7767eac3232ba2fb9828766813cdb481d6a97584",
      "tree": "41cc717fb9f11190e9da3dc12d61faf23a22861d",
      "parents": [
        "1552586283f329253edc4786a6cf40c5bb69ea36"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Aug 23 18:25:40 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Aug 24 13:53:13 2012 -0700"
      },
      "message": "Keep track of whether an app is installed for each user.\n\nThis add a new per-user state for an app, indicating whether\nit is installed for that user.\n\nAll system apps are always installed for all users (we still\nuse disable to \"uninstall\" them).\n\nNow when you call into the package manager to install an app,\nit will only install the app for that user unless you supply\na flag saying to install for all users.  Only being installed\nfor the user is just the normal install state, but all other\nusers have marked in their state for that app that it is not\ninstalled.\n\nWhen you call the package manager APIs for information about\napps, uninstalled apps are treated as really being not visible\n(somewhat more-so than disabled apps), unless you use the\nGET_UNINSTALLED_PACKAGES flag.\n\nIf another user calls to install an app that is already installed,\njust not for them, then the normal install process takes place\nbut in addition that user\u0027s installed state is toggled on.\n\nThe package manager will not send PACKAGE_ADDED, PACKAGE_REMOVED,\nPACKAGE_REPLACED etc broadcasts to users who don\u0027t have a package\ninstalled or not being involved in a change in the install state.\nThere are a few things that are not quite right with this -- for\nexample if you go through a full install (with a new apk) of an\napp for one user who doesn\u0027t have it already installed, you will\nstill get the PACKAGED_REPLACED messages even though this is\ntechnically the first install for your user.  I\u0027m not sure how\nmuch of an issue this is.\n\nWhen you call the existing API to uninstall an app, this toggles\nthe installed state of the app for that user to be off.  Only if\nthat is the last user user that has the app uinstalled will it\nactually be removed from the device.  Again there is a new flag\nyou can pass in to force the app to be uninstalled for all users.\n\nAlso fixed issues with cleaning external storage of apps, which\nwas not dealing with multiple users.  We now keep track of cleaning\neach user for each package.\n\nChange-Id: I00e66452b149defc08c5e0183fa673f532465ed5\n"
    },
    {
      "commit": "183ce028f10442dd6ada59de8fa531d690134663",
      "tree": "bb826af501467e58f564c7bf0675fa4868aba77d",
      "parents": [
        "074b54fbc0b6254c0ba308e0cf2e86c1cc929348"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 15:00:21 2012 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 29 15:00:21 2012 -0700"
      },
      "message": "Fix issue #6761130: Clearing app data in settings does not clear app\u0027s USB storage\n\nThe package manager calls to clear data / clear cache were not also\nhaving default container service clear the data on external storage.  Now\nthey do.\n\nChange-Id: Ib5e5eb6adf2cac5a4cc094cc1a02ac8cfb6a2edf\n"
    },
    {
      "commit": "a69b7eb1fc6ab6f47411493a17463fe7a43b8b3f",
      "tree": "d62579288a0c7b6575999070a86c2308023fd884",
      "parents": [
        "728e43948c9b4d18a900fa50acad8d2734947b21"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 14 14:47:06 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 14 15:02:19 2012 -0700"
      },
      "message": "Change thread priority for disk measurement to bg\n\nChange the thread priority for all disk measurement and statfs calls to\nbackground priority.\n\nAlso move the measurement fully into the measurement task since it makes\nmore sense.\n\nBug: 6332097\nChange-Id: Iafc2151313ad9b14117daf67e933dccd32f68d54\n"
    },
    {
      "commit": "103d53005e7a3c2735f4ac76fa9b795a7e7e39d7",
      "tree": "da5b4a423467f932654ca2db1494bd9e34210f58",
      "parents": [
        "a25079e6bafcfd77135a852f0e838738d80606ef"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu May 10 10:21:06 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu May 10 11:48:21 2012 -0700"
      },
      "message": "Use long instead of int for file offsets\n\nUse long instead of int so we don\u0027t run into a 2GB file limit.\n\nFix possible overflows in offset and length.\n\nChange-Id: Idb3a34f5600f9c2372b9c89256f21757049fa43b\n"
    },
    {
      "commit": "ceb1b0bfaea56251796b08c07b963de7403d84eb",
      "tree": "fea73b05f6b4d47da174eca362693958cf5d785a",
      "parents": [
        "476b03b0c0d5cae4d1b114c6f80858d59ba36cad"
      ],
      "author": {
        "name": "Anonymous Coward",
        "email": "nobody@android.com",
        "time": "Tue Apr 24 10:35:16 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 07 16:34:49 2012 -0700"
      },
      "message": "Add encryption parameters to package installation\n\nChange-Id: Ic9f8ab9f8110f08bb3c00725cfce5b8ee7b766f3\n"
    },
    {
      "commit": "bf023589b3d9994f43823c7cb0450d278b084f9b",
      "tree": "6ed973d10a584b68efd2efd6654953ab158538c4",
      "parents": [
        "e849230f444653e692024b4321044cb9f6188919"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 02 16:56:15 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 02 17:09:57 2012 -0700"
      },
      "message": "Fix some problems with ASECs\n\nOn devices that had external storage, permissions weren\u0027t set correctly\non non-forward-locked applications. Also, moving forward locked\napplications didn\u0027t work since DefaultContainerService wasn\u0027t able to\nread it.\n\nFixed some faulty unit tests as well.\n\nBug: 6427212\nChange-Id: I5c1f0bf5278549069c78939f0708c4c43a7d4006\n"
    },
    {
      "commit": "6dceb88f1c7c42c6ab43834af2c993d599895d82",
      "tree": "cbdc33b4dd84f7ad388a4f331c0e7a3056e142e5",
      "parents": [
        "7725180c646d1976a2a2097735862a75ec47c544"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 12 14:23:49 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 25 14:17:02 2012 -0700"
      },
      "message": "Allow forward locked apps to be in ASECs\n\nWe couldn\u0027t put forward-locked apps in ASEC containers before since we\ndidn\u0027t have any permissioned filesystems. This adds the ability for\nforward-locked applications to be in ASEC containers.\n\nThis means that forward locked applications will be able to be on the SD\ncard now.\n\nThis change also removes the old type of forward-locking that placed\nparts of apps in /data/app-private.  Now all forward-locked applications\nwill be in ASEC containers.\n\nChange-Id: I17ae0b0d65a4a965ef33c0ac2c47e990e55707ad\n"
    },
    {
      "commit": "9cbe986a446dffea2e9f59b86800f834b02d766a",
      "tree": "63725587ac50668011a054f82c69f6ddf25b9248",
      "parents": [
        "816e4f758302aaf3b115b5914d48732ed78af946"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 22 18:56:43 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sun Apr 22 18:56:43 2012 -0700"
      },
      "message": "Expose statfs() through IMediaContainerService.\n\nBug: 6346248\nChange-Id: I03ae02578f546fc9f19652cbdece56e2e0ab6a1c\n"
    },
    {
      "commit": "05ca4c90644921df9193d92b2abdc81ef77e4a62",
      "tree": "94c9e61b0c3d364f68a194c0a65199451410fc35",
      "parents": [
        "15bbaeb0753f5336a5e8ee07e6f796657ecefb73"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 15 10:36:25 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 23 16:03:03 2011 -0700"
      },
      "message": "Allow non-required package verifiers\n\n* Verifiers can be specified in the AndroidManifest.xml\n\n* Those verifiers can respond to the new Intent action\n\n* PackageManager API for those verifiers: verifyPendingInstall\n\nChange-Id: I4892bce2e6984871e6e93c60a1ca0dae145f5df5\n"
    },
    {
      "commit": "61942c579dd8d30f77a9a501b31bd7a485b0d4bc",
      "tree": "0ae70b82b2f15a3c7789c9318640c17fcc8b766a",
      "parents": [
        "186c1683ce6a6c7e845b06b8c0706ef7950c6608"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 15 12:46:04 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 15 12:46:35 2011 -0700"
      },
      "message": "Fix external size calculations\n\nUnfortunately fixed internal size calculations for HC, but never the\nexternal size calculations.\n\nBug: 5113898\nChange-Id: Idfe8af0ba74a20aa767eb9abac431ee1c74dcf8e\n"
    },
    {
      "commit": "f5121a9b802c6ddd3661ed5cae602380dbe67090",
      "tree": "a1a10eddf61e5e159f0d71a17e2cc47a09856752",
      "parents": [
        "260e9105d7fc7b11c26a6843658df89b98d65971"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 10 16:23:32 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 10 17:00:30 2011 -0700"
      },
      "message": "Better errors from copyResource\n\nCopy resource would fail without a good error code when the file\ncouldn\u0027t be found during copy.\n\nAlso destroy the target container ID during move operations since it\nmight exist. If the copy failed due to it existing, it would get\ndestroyed anyway. This way the user has a chance to have a good outcome\nthe first time.\n\nBug: 3375299\nBug: 5113898\nChange-Id: I00559833f0801bc50e7cc031b462495e37a6b4ab\n"
    },
    {
      "commit": "1ebd74acf9977daa42133507e970dab88e08f0ef",
      "tree": "c95bde1090f19e78201f15b54866ada88ab7cbf2",
      "parents": [
        "62c7b37590b1a692384a55949d3b9eba221a3652"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 03 15:09:44 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 03 16:03:42 2011 -0700"
      },
      "message": "Better error codes for missing files\n\nMake sure that files that don\u0027t exist aren\u0027t returning bogus \u0027out of\nspace\u0027 error codes.\n\nAdd some Javadoc so I can remember what each thing does in an IDE.\n\nAdd copyright header to NativeLibraryHelper\n\nBug: 3375299\nChange-Id: Iac46019160921daca65b21d38897e5165063316e\n"
    },
    {
      "commit": "66269ea6f68f2f25888ce1080c94ac782742fafc",
      "tree": "0ecbefcdbecf98cbacd428a422e6a2a846ac726e",
      "parents": [
        "e432a0005180ba9ac2c1d7822c4761b475fddc51"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 26 10:14:58 2011 -0700"
      },
      "message": "Move extract native libraries to JNI code\n\nThe built-in ZipFile class was quite a long time to find an unpack\nlibraries. Move everything to using the libutils ZipFileRO class that\ngoes quite a bit faster. Initial measurements are 6 times faster than\nthe Java code.\n\nAlso, read files off the disk and compare their CRC against the APK\u0027s\nCRC to see if we need to write the new file to disk. This also cuts down\nthe bootup time by up to a second per APK that has native files.\n\nChange-Id: Ic464a7969a17368fb6a6b81d026888c4136c7603\n"
    },
    {
      "commit": "62e1b4e9d41a01db423b5e4684ecf529ed46106d",
      "tree": "661d7d6a17fade942bcfb6ff2e3b03292c3e698e",
      "parents": [
        "6f3a75e13b86a3f40fe34e3ebd17b118791a73a4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 14 17:13:39 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 14 17:18:24 2011 -0700"
      },
      "message": "Revise free space checks for package installs\n\nChange-Id: Ie72bbab77aa89a50ec096edc1f471eab74829e67\n"
    },
    {
      "commit": "300c13a48132f03d48462b9cd3ec41331a71a411",
      "tree": "b784943ca9d8e6988d9e0db62da448b8e9d10441",
      "parents": [
        "26c1ab2e58f47ac94e638f69b9b626cc6b1925b6"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 18 13:04:40 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 18 13:55:42 2011 -0800"
      },
      "message": "Erase OBB files when removing packages\n\nOBB files on USB storage or SD card should be removed when an\napplication is removed.\n\nBug: 3356804\nChange-Id: Ifbbf043368b125fcd47fd74e5cd2e5167a8deb00\n"
    },
    {
      "commit": "366949c2d934435ff9ef8082408ca36ff14a2241",
      "tree": "5821f9a8976fa55430d071850242604a51259ae9",
      "parents": [
        "3c372789ea0b7836c6a9fe4852fac0de3f29fbbf"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jan 14 17:18:14 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sun Jan 16 16:21:15 2011 -0800"
      },
      "message": "Put externalSize measurements in PackageStats\n\nWhen measuring a package\u0027s usage, put the external size in the\nPackageStats as well. This will allow programs using a lot of space on\nthe external card to be held accountable.\n\nBug: 3308791\nChange-Id: If2df07bdbf6ffb31577074fad8f4a87ca4e89086\n"
    },
    {
      "commit": "aa183e2c9a279cb6aef7dc77855facfae795b6f8",
      "tree": "9f0a53f90dcfb2e720a5e62e38e357cc98fdabd9",
      "parents": [
        "d8b3f2e8eee5f24de6653a918613674e9495f751"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Dec 02 18:00:38 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sat Dec 04 08:29:23 2010 -0800"
      },
      "message": "Add measurement API to DefaultContainerService\n\nSystem applications that don\u0027t have \"media_rw\" access need some way to\nmeasure the size of directories on the SD card and other internal media.\nAdd this API to DefaultContainerService so they can simply bind to the\nservice and make an RPC.\n\nBug: 3203974\nChange-Id: I4e1bcd7a1b702b156c011ecc04f6915022cb258a\n"
    },
    {
      "commit": "e1ff214e32ed5c546a7603b07b054908c4d93312",
      "tree": "d61485a78a33eaedf4494cbdf21e48225d49b4e7",
      "parents": [
        "84e8827a477cdf3d8c2b67e370395b22ec1963ad"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 12 11:20:01 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Oct 12 11:30:56 2010 -0700"
      },
      "message": "Add API to check for emulated external storage\n\nWhen the storage is emulated, we don\u0027t want to install ASEC containers\nto it. This adds the API to check when the external storage is emulated\nand uses it to check whether or not to install packages to the external\nstorage in an ASEC container.\n\nBug: 3024387\nChange-Id: Ia0318aca9e4938a4897deaada5603a4c7c1d0f48\n"
    },
    {
      "commit": "735de3b38abbd6564082a819377673ee593744a6",
      "tree": "ec309587616c5abbc49df83d7d21b6a3b3e9dfbd",
      "parents": [
        "27358a69b33eaa268ee75ef778ec824c8085adcc"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 30 14:11:39 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 30 17:25:05 2010 -0700"
      },
      "message": "Hash keys with MD5; track IBinders not IInterface\n\nUsing a plaintext password doesn\u0027t work unless it\u0027s a certain length, so\njust hash the plaintext password with MD5 to make it the right length\nfor the twofish encryption.\n\nTracking the IInterface doesn\u0027t make much sense since it\u0027s different\neach time, so track the IBinder instead. That way we can unlinkToDeath\nthe binder when the last thing it\u0027s holding onto goes away.\n\nChange-Id: Id828d25b4d74f27e9d8b4bfb3909c964469cc473\n"
    },
    {
      "commit": "05105f7abe02b2dff91d6260b3628c8b97816bab",
      "tree": "f42676d818548d76b2c55045a1bcc4866d6feec1",
      "parents": [
        "ea2cf2f936b03f1720bc43863e41c89ea2a7903a"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Sep 22 17:29:43 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 28 17:23:26 2010 -0700"
      },
      "message": "Update OBB API to include callbacks\n\nAdd a callback for users of the StorageManager API to be able to receive\nnotifications when the requested operation completes for mountObb and\nunmountObb.\n\nAdd NDK API to get to ObbInfo like the Java API has.\n\nAlso update the docs for the API and remove the \"STOPSHIP\" comments.\n\nChange-Id: I23a4409c7f8b74d3169614beba920b4d667990a4\n"
    },
    {
      "commit": "85387d7ba36e56b291cbde87acb5a5b2200fe01c",
      "tree": "adea29b181a25c2ffd8ecaebded62fb4d2dc1a93",
      "parents": [
        "4f8c2f26bfd9de8c8a31369dbedd415c7d6d9699"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Aug 26 10:13:11 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 27 16:40:06 2010 -0700"
      },
      "message": "Allow native shared libraries in ASEC containers\n\nThis change moves the native library handling earlier in the package\ninstallation process so that it may be inserted into ASEC containers\nbefore they are finalized in the DefaultContainerService.\n\nNote that native libraries on SD card requires that vold mount ASEC\ncontainers without the \"noexec\" flag on the mount point.\n\nChange-Id: Ib34b1886bf6f94b99bb7b3781db6e9b5a58807ba\n"
    },
    {
      "commit": "a02b8b05dd1e8b8cf169e1f89542ef835b11fc13",
      "tree": "aa1b5fb6b900c064d9914f51c9c3817a2c46f9df",
      "parents": [
        "9902196f9885d369e37cf44084e3f04513511ab0"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Aug 05 16:14:17 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 11 11:20:53 2010 -0700"
      },
      "message": "Move OBB file reading to DefaultContainerService\n\nThe system_server shouldn\u0027t touch files on the SD card. This change\nmoves the things that touch the SD card out to the\nDefaultContainerService so that it will get killed if the SD card goes\naway instead of the system_server.\n\nChange-Id: I0aefa085be4b194768527195532ee6dddc801cfc\n"
    },
    {
      "commit": "930d3af75f9e9663222f4c4a1d75b326cf811e35",
      "tree": "30950867a1eec93131934190d0faae893cacd4e3",
      "parents": [
        "7c600369c9695de73ca37db552eb81b8b89d5e76"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jul 30 16:52:29 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 02 07:52:56 2010 -0700"
      },
      "message": "Do not deference before null check\n\nThe return of parsePackageLite wasn\u0027t checked until after it was\ndeferenced. Move the deference below the null check and remove redundant\nset.\n\nBug: 2852726\nChange-Id: I3eaaea5050948145eed44b64507dc846993d98eb\n"
    },
    {
      "commit": "d345bb6e5b42ff644ce224fe57e4d7b4e546a48d",
      "tree": "e6af91677bacbcc1b040af1863a9506760046117",
      "parents": [
        "05fa2144e458dc8f024235ea01b8682055d828bf"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Apr 22 13:22:17 2010 -0700"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Apr 22 13:43:20 2010 -0700"
      },
      "message": "Fix error code when media is filled up.\n\nChange-Id: Id8dae2e7c967e3f103aecd2f31abb7e292af8f1d\n"
    },
    {
      "commit": "315a5fb91dbafe6073435a13d937cee9d26877f6",
      "tree": "3e5bdebfa89ae4e997a726e5e600751823cca580",
      "parents": [
        "40b6996a8fb7da131e8b91453b08e292723662be"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Apr 13 14:32:16 2010 -0700"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Apr 14 18:24:06 2010 -0700"
      },
      "message": "Dont fall back to installing on sdcard when internal storage is filled up\nwhen the install location is set to internal only. Similary if install\nlocation is set to external only(via adb), dont fall back to installing on\ninternal storage if sdcard is filled up.\nIf nothing is specified ie install location is set to let system decide,\nwe just check on internal storage.\nFix tests\n\nChange-Id: I7400ccc131782d9c45284bd9ebd0dee43a3b412b\n"
    },
    {
      "commit": "40e472521a544f26cb6956995788f7c36fff1404",
      "tree": "b579a480e80d8ac15128c31c142b22d0938a44f8",
      "parents": [
        "4b18ced6b5409bb9dd4013c06b9562b76a062939"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Apr 07 16:15:50 2010 -0700"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Apr 07 20:43:54 2010 -0700"
      },
      "message": "Fix 2579461\nMove install location values to secure settings.\nDiable attribute for UI. Set default value to auto.\nAdd command line interface to set install location via pm.\n\nChange-Id: I80e97b3d24845adad7102f40dcbe238f00efa406\n"
    },
    {
      "commit": "14b6abda1309631d49d4bebbb0317a7e1dfc0a50",
      "tree": "bee361e635743a09bb7253fef333d6fb94df6322",
      "parents": [
        "d246ca811575eee9122070648e93b7484f6edd81"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 17 08:37:04 2010 -0700"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 17 18:43:31 2010 -0700"
      },
      "message": "Add new install flag to install on internal flash only\nChange default install location policy for new flag.\nNew error code for media unavailable.\n\nChange-Id: I5a5d0828b067692b2b94a15a2bcc7534f796c1a2\n"
    },
    {
      "commit": "8a9ab24a5c9b595ac0268fcade4b5bbfe7c45c2d",
      "tree": "f445dbf1504f02783b550a80a01ee06d45fbcb4a",
      "parents": [
        "50fdbef2fbcd390035517090bc54220c265f5c75"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Mar 11 16:49:16 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Mar 16 16:36:26 2010 -0700"
      },
      "message": "Do storage checks before initiating a move.\nAdd new remote method to check for insufficient error conditions.\nSome fixes in MountService when updating media status on PackageManagerService\nFix size calculation condition in installd.\n\nAdd new error code if media is unavailable.\nNew tests for testing error codes.\nSome additional debugging statements in MountService.\n\nChange-Id: Ibfe90d5ed6c71d57f9c1c67806f38b5ae9ecdfbf\n"
    },
    {
      "commit": "15a4d2ffd04dc6c70f2cd17dae12ac6bc14c69ab",
      "tree": "2dbbf0c31082373354fb17308de3681e22c66169",
      "parents": [
        "8abb26ee6c77e01a23d26c305a65b25a33710024"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 11 18:20:12 2010 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 11 18:22:10 2010 -0800"
      },
      "message": "Add correct copyright headers to multiple files\n\nFormat for the list of changes shows the origin commit reference followed\nby the file name.\n\n33931-p9 awt/org/apache/harmony/awt/gl/font/AndroidGlyphVector.java\n33931-p9 awt/org/apache/harmony/awt/gl/image/PngDecoderJava.java\n133776-p9 core/java/android/app/IntentService.java\n127013-p9 core/java/android/appwidget/AppWidgetHost.java\n27863-p9 core/java/android/bluetooth/BluetoothAudioGateway.java\n60765-p9 core/java/android/content/SyncResult.java\n43920-p9 core/java/android/content/pm/ActivityInfo.java\n43920-p9 core/java/android/content/pm/ApplicationInfo.java\n43920-p9 core/java/android/content/pm/InstrumentationInfo.java\n43920-p9 core/java/android/content/pm/PackageInfo.java\n44103-p9 core/java/android/content/pm/PackageItemInfo.java\n68960-p9 core/java/android/content/pm/PackageStats.java\n43920-p9 core/java/android/content/pm/ResolveInfo.java\n43920-p9 core/java/android/content/pm/ServiceInfo.java\n60641-p9 core/java/android/content/res/Configuration.java\n60734-p9 core/java/android/content/res/TypedArray.java\n137672-p9 core/java/android/inputmethodservice/ExtractButton.java\n123112-p9 core/java/android/inputmethodservice/ExtractEditText.java\n119291-p9 core/java/android/inputmethodservice/IInputMethodSessionWrapper.java\n112946-p9 core/java/android/inputmethodservice/IInputMethodWrapper.java\n115078-p9 core/java/android/os/BatteryStats.java\n124790-p9 core/java/android/text/style/UpdateAppearance.java\n45083-p9 core/java/android/view/RawInputEvent.java\n101491-p9 core/java/android/view/inputmethod/EditorInfo.java\n114701-p9 core/java/android/view/inputmethod/ExtractedText.java\n123112-p9 core/java/android/view/inputmethod/ExtractedTextRequest.java\n119291-p9 core/java/com/android/internal/os/HandlerCaller.java\n129279-p9 core/java/com/android/internal/os/PkgUsageStats.java\n114701-p9 core/java/com/android/internal/view/IInputConnectionWrapper.java\n114701-p9 core/java/com/android/internal/view/InputConnectionWrapper.java\n84364-p9 opengl/java/android/opengl/EGLLogWrapper.java\n11355-p9 opengl/tools/glgen/src/CFunc.java\n11355-p9 opengl/tools/glgen/src/CType.java\n11355-p9 opengl/tools/glgen/src/CodeEmitter.java\n11355-p9 opengl/tools/glgen/src/GenerateGL.java\n11355-p9 opengl/tools/glgen/src/JFunc.java\n11355-p9 opengl/tools/glgen/src/JType.java\n11355-p9 opengl/tools/glgen/src/JniCodeEmitter.java\n11355-p9 opengl/tools/glgen/src/ParameterChecker.java\n57236-p9 services/java/com/android/server/status/AnimatedImageView.java\n66754-p9 services/java/com/android/server/status/CloseDragHandle.java\n57188-p9 services/java/com/android/server/status/DateView.java\n46928-p9 services/java/com/android/server/status/ExpandedView.java\n70590-p9 services/java/com/android/server/status/FixedSizeDrawable.java\n45968-p9 services/java/com/android/server/status/IconData.java\n57470-p9 services/java/com/android/server/status/IconMerger.java\n82719-p9 services/java/com/android/server/status/LatestItemView.java\n45968-p9 services/java/com/android/server/status/NotificationData.java\n66754-p9 services/java/com/android/server/status/NotificationLinearLayout.java\n57458-p9 services/java/com/android/server/status/NotificationViewList.java\n45968-p9 services/java/com/android/server/status/StatusBarException.java\n45968-p9 services/java/com/android/server/status/StatusBarIcon.java\n46130-p9 services/java/com/android/server/status/StatusBarNotification.java\n45968-p9 services/java/com/android/server/status/StatusBarView.java\n46199-p9 services/java/com/android/server/status/Ticker.java\n62286-p9 services/java/com/android/server/status/TickerView.java\n57188-p9 services/java/com/android/server/status/TrackingView.java\n86041-p9 telephony/java/android/telephony/PhoneStateListener.java\n87020-p9 telephony/java/com/android/internal/telephony/TelephonyIntents.java\n136269-p9 telephony/java/com/android/internal/telephony/gsm/SpnOverride.java\n34409-p9 tests/FrameworkTest/src/com/android/frameworktest/FrameworkTestApplication.java\n55717-p9 tests/FrameworkTest/src/com/android/frameworktest/performance/InvalidateCycle.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityLandscape.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/AutoCompleteTextViewActivityPortrait.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScan.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResize.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScan.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/BigEditTextActivityScrollableResize.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/BottomEditTextActivityResize.java\n127341-p9 tests/ImfTest/src/com/android/imftest/samples/ButtonActivity.java\n129347-p9 tests/ImfTest/src/com/android/imftest/samples/DialogActivity.java\n129372-p9 tests/ImfTest/src/com/android/imftest/samples/EditTextActivityDialog.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityNoScrollPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollPanScan.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/ManyEditTextActivityScrollResize.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivityNotSelected.java\n128994-p9 tests/ImfTest/src/com/android/imftest/samples/OneEditTextActivitySelected.java\n25959-p9 tests/framework-tests/src/android/test/FrameworkTests.java\n46162-p9 tests/framework-tests/src/com/android/internal/http/multipart/MultipartTest.java\n77101-p9 tools/layoutlib/bridge/tests/com/android/layoutlib/bridge/NinePatchTest.java\n9788976b1465ce982b5ae7c741345edd0ecd9322 core/java/android/accounts/AuthenticatorDescription.java\n53332883543868fb83e111a07306368b7772b340 core/java/android/app/UiModeManager.java\n93e7e22ec91dbc641d10ca6d70423e1357a95bba core/java/android/app/FullBackupAgent.java\n328c0e7986aa6bb7752ec6de3da9c999920bb55f core/java/android/content/CursorEntityIterator.java\n307da1a46b4c9b711bafe8fbaaa6b98e8868c18e core/java/android/content/SyncQueue.java\n307da1a46b4c9b711bafe8fbaaa6b98e8868c18e core/java/android/content/SyncOperation.java\neb034652c2037a47ebfd99779e8383bb8bb528af core/java/android/content/pm/LabeledIntent.java\n49237345d83e62fdb9eb8d50b13ad086636a04fa core/java/android/content/pm/FeatureInfo.java\na2b6c3775ed6b8924232d6a01bae4a19740a15f8 core/java/android/content/pm/PackageInfoLite.java\n3ecd5f437580e49d80beecd29489d5fb1f7a7db0 core/java/android/content/pm/RegisteredServicesCacheListener.java\n5ebbb4a6b3e16f711735ae0615b9a9ea64faad38 core/java/android/content/pm/XmlSerializerAndParser.java\nc4516a7b62de525e3d6d5e76851bdfaf12c11f05 core/java/android/database/sqlite/SQLiteTransactionListener.java\n9bbc21a773cbdfbef2876a75c32bda5839647751 core/java/com/android/internal/backup/LocalTransport.java\n21f1bd17b2dfe361acbb28453b3f3b1a110932fa core/java/com/android/internal/content/PackageMonitor.java\n4c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3 core/java/com/android/internal/view/BaseSurfaceHolder.java\n4c62fc0e1e5ea9c69a12a7d1cf8b3ec8b2d114a3 core/java/com/android/internal/view/BaseIWindow.java\ne540833fdff4d58e37c9ba859388e24e2945ed45 core/java/com/android/internal/os/SamplingProfilerIntegration.java\n192ab903887bbb8e7c7b6da5c581573850e30f46 core/tests/coretests/src/android/widget/expandablelistview/PositionTesterContextMenuListener.java\n1619367ab823150fa8856d419abe02ceb75886f1 media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java\n27f8002e591b5c579f75b2580183b5d1c4219cd4 opengl/tools/glgen/stubs/gles11/glGetString.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glGetProgramInfoLog.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glGetShaderInfoLog.java\n560814f6b11abe83ff0c4ed18cac015c276b3181 opengl/tools/glgen/stubs/gles11/glShaderSource.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/GenerateGLES.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/Jsr239CodeEmitter.java\n1c4907ee77392afb768c2f088e0dedbe4239f6fb opengl/tools/glgen/src/GLESCodeEmitter.java\n69e21f5f6e0d04539cd92848ea009dd615d88c2c opengl/tests/gldual/src/com/android/gldual/TriangleRenderer.java\nc028be4f3b8c7476b46859f66c3f33d528adf181 packages/DefaultContainerService/src/com/android/defcontainer/DefaultContainerService.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerMeasurement.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestActivity.java\n7c6efa13f129dbae5319f0981a430d4662f43354 tests/BrowserPowerTest/src/com/android/browserpowertest/PowerTestRunner.java\ndf8a3f31d871db25e952972c2eb346a71186e9e3 tests/BrowserTestPlugin/src/com/android/testplugin/TestPlugin.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java\ncfaef699e1dfb3a75d5b51f3b15816f13670fd51 tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java\n\nCopyright header moved to top in following file:\n\ncore/tests/coretests/src/android/widget/ListViewTest.java\n\nChange-Id: I3c3198be5a0ba36e18679ed834170432bf0b8418\n"
    },
    {
      "commit": "089262dc022d87e31eefc536025be6c015c7ebde",
      "tree": "2c4706dc952c2c3a4407427579a01057564fab52",
      "parents": [
        "e182a92ae408f27f46d15de01c8a263cfe6f9246"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 10 14:19:21 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 10 16:08:51 2010 -0800"
      },
      "message": "Dont include code size for apps on sdcard.\nUse constants defined in PackageHelper for user preferences\nto install auto, internal, external.\nSet default install location to external.\nUpdate settings db version number\n\nChange-Id: Ib5110c9377990e20a48cee923e55898dfddfd1e6\n"
    },
    {
      "commit": "a2b6c3775ed6b8924232d6a01bae4a19740a15f8",
      "tree": "f78953add86351bd04f2788c712b1285497e2016",
      "parents": [
        "a9fb0a2497e563c2066e10a816ff1f7baaf8aa9b"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Fri Mar 05 17:40:11 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Mar 09 09:24:35 2010 -0800"
      },
      "message": "Add conditions to check for updated system applications. Restrict them\nto internal flash only even before we copy.\n\nReturn error codes when install flag options mismatch.\nSome conditions for existings apps\n - install flags override existing location\n - explicity manifest option install location overrides previous location\n - if upgraded package\u0027s install location is unspecified or auto, fall\n   back to recommended install policy which considers user setting as well.\n\nCheck for sdcard status before finding available size on sdcard\nAdd light weight parsing for manifest attributes including package name and\ninstall location only\n\nChange-Id: I5143dda87c88c595f564b317326c926d0ec3ceb8\n"
    },
    {
      "commit": "3602f76d417b0940a26f28b7ad892abcfe03ef7c",
      "tree": "07859c25cd8a91092da0fa3d023f90795501af3d",
      "parents": [
        "01f4385d86537cf656cfc70ea075177d50619206"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 03 17:29:33 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 03 18:21:07 2010 -0800"
      },
      "message": "Null check for scheme.\nIf scheme is unspecified let package parse continue. We will return\nerrors if parsing fails anyway.\nIf scheme is not null, restrict it to being a file uri.\n"
    },
    {
      "commit": "9b10ef5fe85e9d29721ff0cd15161f960d38a8db",
      "tree": "a6830aad34d62273b02f0e3dbaa054dd7ec7c270",
      "parents": [
        "a034cd3e15b6626be03e60f2d6a0f929dcb950d9"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 03 09:45:24 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Mar 03 14:06:10 2010 -0800"
      },
      "message": "Rework the way PackageManager binds to default container service.\n\nClean up stale containers when enabling/disabling packages on sdcard.\nCheck the path of packages which are being enabled.\nMake sure gc\u0027s are done prior to destroying containers when moving applicati\nas well as enabling/disabling packages for sdcard mount status changes.\n\nSome miscellaneous issues\n   Remove hack to avoid renaming containers.\n   Fix test with forward locked apps\n   Remove adding container id to asec list when renaming\n   Some cosmetic changes to DefaultContainerService\n"
    },
    {
      "commit": "cf6eaeaae9e6745dd6e07540812c79821d7043c2",
      "tree": "fe1224c5b492a8ad09d00e167b66a45413fb3d73",
      "parents": [
        "2a399f066d4f3870385002cdcda8082a0eeeb770"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Feb 23 19:37:45 2010 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Feb 24 11:31:36 2010 -0800"
      },
      "message": "Some framework fixes for apps on sd\nchange hard coded path in installd\nfix tests\nWork around for renaming containers.\nDo forced unmount when destroying containers.\nForce a gc in default container service to release handle to parsed package\nand thus avoid getting killed by vold\nSome cosmetic changes to PackageManager api.\nUnit tests for renaming container for MountService\nRemove internal size limit on app to be installed.\n"
    },
    {
      "commit": "8946dd3355fc1dcbad872c0546e356474d4cc5de",
      "tree": "8b614c938152df8ad809fd9bf03c6876c8a7a58e",
      "parents": [
        "eac461cf7c246df737d2b0e7bd30be176a34c36e"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Fri Feb 19 09:19:34 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Fri Feb 19 14:20:54 2010 -0800"
      },
      "message": "Move package from internal to external and vice versa.\n"
    },
    {
      "commit": "679bba339ef6948091180c776d6a284cddd812f5",
      "tree": "03c629b1f8bd427a3917efd3fa9a61c6ee9930e7",
      "parents": [
        "642b7c0f1964389ed0b049df275c7b4daaf35b7a"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Feb 16 11:52:44 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Feb 16 15:11:04 2010 -0800"
      },
      "message": "Move mount service wrapper calls to PackageHelper\n\nFix bug related to forward locked apps.\n"
    },
    {
      "commit": "5b993ce7bc29e43a3215a50ce6ce5d6550d4e5e2",
      "tree": "fc25f9f6adee005c287454a74837f6cbc1a072a0",
      "parents": [
        "70251b1704b9bb81443e7533d365400645dd5eaa"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Fri Feb 12 09:43:29 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Fri Feb 12 18:50:47 2010 -0800"
      },
      "message": "Include install location preference when installing packages.\nChanges include\nAdd new remote call in default container service to determine\ninstall location.\nRename INSTALL_ON_SDCARD\nRemove recommentAppInstall method\nAdd some additional flags used in remote stubs.\nMove check for protected apps prior to copy.\nUnit tests\n\nDefaultContainerService first parses the file uri(if content uri is specified\nit returns a default install internal only value) and returns\na recommended location. Based on which the temporary id is determined\neither a file name or a container id and the file is copied there.\nThis is then later renamed during install.\nTodo\u0027s light weight parsing of package when determining location since we\njust need the install location attribute only when finding out\nrecomended location. This will also enable to move the check for\nupdated system apps(cannot be on sdcard) prior to copying.\n"
    },
    {
      "commit": "e83cefcef07f9ac025642c1ffec76b4c7ab39cf2",
      "tree": "130696ee2a90150129c3ee98544c5814528c90f9",
      "parents": [
        "72e5a8820a996c547eacea534b11b6b8f6eca83b"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Feb 04 17:38:14 2010 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Feb 09 14:20:55 2010 -0800"
      },
      "message": "New external storage APIs.\n\nThis implements the spec for external storage organization, and\nproperly reflects how the media scanner organizes the files it finds.\n\nAlso includes package manager support for removing app private\nfiles from external storage when the application is uninstalled.\n\nFor the new APIs and paths, the main place to look is Environment\nand Context.\n"
    },
    {
      "commit": "b104340496e3a531e26c8f428c808eca0e039f50",
      "tree": "11247cb68359d43ca4871c0cb0165c9bec339a6f",
      "parents": [
        "3ee1317173260252d475772fec09d492f8fcfd33"
      ],
      "author": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Fri Feb 05 08:26:50 2010 -0800"
      },
      "committer": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Tue Feb 09 11:03:16 2010 -0800"
      },
      "message": "Framework: Clean up / Refactor Mount APIs\n\n - Move android.storage.* -\u003e android.os.storage.* and refactor users\n - Refactor generic shares back to explicit ums enable/disable/isEnabled\n - Remove media insert/removed event callbacks (not ready for Froyo)\n - Remove \u0027label\u0027 from volume state change callbacks\n - Add public API functions for enabling/disabling USB mass storage (permissions enforced\n   in MountSevice)\n - Remove some stray un-needed import lines\n - Move android.os.IMountService / android.os.IMountServiceListener -\u003e android.os.storage\n - Improve code comments\n\nUpdated:\n  MountService: Add dup state check and move debugging behind a conditional\n  UsbStorageActivity: Fix review comments + a TODO\n  StorageNotification: Add @Override tags\n  StorageManager: Don\u0027t use a static Listener list\n  MountService: Reduce bloat and fix \u003d\u003d where I meant .equals()\n  PackageManagerTests: Update for new API\n\nSigned-off-by: San Mehat \u003csan@google.com\u003e\n"
    },
    {
      "commit": "08675a3376819a82aa5ab344bc3e7b1635c30b05",
      "tree": "9a16e6be377fe367639ef9e02c5421e0ce9b9044",
      "parents": [
        "57405b93f194851eb2187a8ed3362be18a483a17"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Thu Jan 28 09:57:30 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Tue Feb 02 18:33:29 2010 -0800"
      },
      "message": "Apps on sdcard: Add new broadcasts\n\nAdd new broadcasts ACTION_MEDIA_RESOURCES_AVAILABLE and\nACTION_MEDIA_RESOURCES_UNAVAILABLE that get broadcast by\nPackageManagerService when sdcard gets mounted/unmounted\nby MountService so that packages on sdcard get recognized by\nvarious system services as being installed/available or\nremoved/unavailable by the system.\nThe broadcasts are sent before the actual package cleanup which includes\nmounting/unmounting the packages and we force a gc right after so\nthat any lingering file references to resources on sdcard get\nreleased.\n"
    },
    {
      "commit": "63d15ee6ae4ff5079c7551ca4131c6d7f23ad91c",
      "tree": "4adae3b65891dc1455a6be9539d60c265e99300b",
      "parents": [
        "be16cb15b39f5140b764854bc78c139bfa9fbe8b"
      ],
      "author": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Fri Jan 29 05:35:53 2010 -0800"
      },
      "committer": {
        "name": "San Mehat",
        "email": "san@google.com",
        "time": "Tue Feb 02 11:17:47 2010 -0800"
      },
      "message": "DefaultContainerService: Refactor MountService calls (new api)\n\nSigned-off-by: San Mehat \u003csan@google.com\u003e\n"
    },
    {
      "commit": "c028be4f3b8c7476b46859f66c3f33d528adf181",
      "tree": "8a740e6207e958572706a636fcb92425dbf13a6e",
      "parents": [
        "aeb4126736c1b93abe5252e1723c568a13da7c81"
      ],
      "author": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Mon Jan 25 12:19:12 2010 -0800"
      },
      "committer": {
        "name": "Suchi Amalapurapu",
        "email": "asuchitra@google.com",
        "time": "Wed Jan 27 10:26:43 2010 -0800"
      },
      "message": "AppsOnSd feature - Add default container\n\nAdd new remote interface to do temporary copies. The new\nremote stub handling is done on mHandler thread and doesn\u0027t need locking\nfor now.\nAdd new InstallArgs class and subclasses to isolate cases for installation.\nMove resource deletion for failed installs/upgrades to later on in installation\ncycle.\nFix code path for forward locked apps when using scanPackageLI\n\nTODO\u0027s\nFix installation paths to completely use InstallArgs based design later on.\nGet rid of using flags in various install/uninstall code paths.\nIdeally InstallArgs should be created using these flags and used in the\nrest of the code.\nFunction renames.\nRevisit mount api\u0027s.\n"
    }
  ]
}
