)]}'
{
  "log": [
    {
      "commit": "1c44ac53fdf4df4fced7c1a644c937d1ff9f8d78",
      "tree": "a6a4e0b13ce952e3553ff404217bd18aa41a182c",
      "parents": [
        "0e41945e3aa639a1b0b3387313f7a7fb4eaba1ce"
      ],
      "author": {
        "name": "Nikita Iashchenko",
        "email": "nikitai@google.com",
        "time": "Fri Apr 30 13:19:24 2021 +0100"
      },
      "committer": {
        "name": "Nikita Iashchenko",
        "email": "nikitai@google.com",
        "time": "Fri Apr 30 13:19:24 2021 +0100"
      },
      "message": "Rename MimeMap.Builder setter methods to match guidelines\n\nBug: 184654804\nTest: m droid\nChange-Id: I9d7062af7430856a213edc4ab98b4506e1106053\n"
    },
    {
      "commit": "de423b7a58080408b57d3e60deef309816fb4d7d",
      "tree": "6aa114d8b9b005df00e88a5f34831c23383ff1c3",
      "parents": [
        "6269d2eb7a2740fc18c95dbba70d6686f178fdad"
      ],
      "author": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Wed Mar 31 19:55:25 2021 -0700"
      },
      "committer": {
        "name": "Bob Badour",
        "email": "bbadour@google.com",
        "time": "Wed Mar 31 19:55:25 2021 -0700"
      },
      "message": "[LSC] Add LOCAL_LICENSE_KINDS to frameworks/base\n\nAdded SPDX-license-identifier-Apache-2.0 to:\n  drm/java/Android.bp\n  graphics/java/Android.bp\n  identity/Android.bp\n  identity/java/Android.bp\n  keystore/java/Android.bp\n  location/java/Android.bp\n  location/tests/Android.bp\n  lowpan/java/Android.bp\n  media/mca/effect/java/Android.bp\n  media/mca/filterfw/java/Android.bp\n  media/mca/filterpacks/java/Android.bp\n  mime/java/Android.bp\n  mms/java/Android.bp\n  opengl/java/Android.bp\n  rs/java/Android.bp\n  sax/java/Android.bp\n  services/tests/servicestests/test-apps/PackageParsingTestManifests/Android.bp\n  telecomm/java/Android.bp\n  telephony/common/Android.bp\n  tests/FlickerTests/test-apps/Android.bp\n\nAdded SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to:\n  telephony/java/Android.bp\n\nBug: 68860345\nBug: 151177513\nBug: 151953481\n\nTest: m all\n\nExempt-From-Owner-Approval: janitorial work\nChange-Id: I2ee0af9ce8f74de2172b359b41d2c52a8b8f7e6c\n"
    },
    {
      "commit": "9b2c4a650b4eec3b091f6621e4c9267e9e062da3",
      "tree": "b924cad763f3fd5348e8a4c36f1666fa7bf27e20",
      "parents": [
        "459d9506eea5087661f905e21632c099250eec65"
      ],
      "author": {
        "name": "Anton Hansson",
        "email": "hansson@google.com",
        "time": "Tue Mar 30 11:30:23 2021 +0100"
      },
      "committer": {
        "name": "Anton Hansson",
        "email": "hansson@google.com",
        "time": "Tue Mar 30 12:26:55 2021 +0100"
      },
      "message": "Move framework java filegroups into subdirectories\n\nAll the java code used to build the framework jar and run metalava\nwas previously defined in the toplevel Android.bp files. Move these\ninto the subdirs where the source actually lives.\n\nThis simplifies the rules themselves (no path and needless prefix) and\ndeclutters the top level Android.bp.\n\nTest: m\nChange-Id: I97086e309eacb879d16facb8497d9940fa5ddaf6\n"
    },
    {
      "commit": "8e1c1f4d9dc93f1d4ca324092462690e27ca13e1",
      "tree": "dcc267d76d10978709782fc4541cc9aac57d6dc4",
      "parents": [
        "04665dbfccd9705172caf2d283651499d6dacd25"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Tue Oct 08 16:27:35 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Tue Oct 08 21:03:44 2019 +0100"
      },
      "message": "Minimize default MIME map and optimize loading.\n\nThis CL topic speeds up DefaultMimeMapFactory.create() from 15.5msec\nto 5.7msec (measured by bundling a copy of the logic and data into\na test app) and saves 5.2 KByte of space (16 KBytes uncompressed) in\nframework.jar. This CL topic does not change the amount of heap memory\nconsumed by the loaded MimeMap.\n\nThis is achieved by moving the following parsing steps from\nDefaultMimeMapFactory into a build-time optimization step:\n\n * strip off comments (starting with \u0027#\u0027)\n * normalize whitespace (trim leading and trailing whitespace;\n   replace remaining whitespace with a single \u0027 \u0027).\n * drop lines that do not contain a \u0027 \u0027 after this step (those\n   only contained comments or only a MIME type without any\n   extension).\n * use String.indexOf(char) in favor of String.contains(String) or\n   Pattern matching.\n\nNoteworthy extra step specific to this CL:\n * specifically for vendor.mime.types (but not android.mime.types),\n   add a prefix \u0027?\u0027 to MIME types and extensions at build time,\n   rather than at runtime.\n\nNote that after this CL, DefaultMimeMapFactory can now *only* parse\nminimized *mime.types files, not the original (non-minimized) file\nformat.\n\nTest: Checked that the mapping didn\u0027t change by checking that\n      a device flashed after this CL passes CtsMimeMapTestCases\n      built before this CL.\nTest: Ran \"make mimemap-res.jar\" and manually verified that files\n      in the resulting jar look as expected.\nTest: Locally added some extra mappings to vendor.mime.types, some\n      of them with a leading \u0027?\u0027, and verified that they all show\n      up with exactly one leading \u0027?\u0027 for the MIME type and each\n      extension within mimemap-res.jar.\nBug: 142267887\n\nChange-Id: Idf1ef945a4ac225476f2036fbc8bb35eb9c090af\n"
    },
    {
      "commit": "8edd837b790fcd098331a4972b38beb5e26f0135",
      "tree": "7ab18ecd147742dd26c7e1330c6789a7ba794dea",
      "parents": [
        "9ff2a6a0980978cf447022c624387d6c9218bab0"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Thu Oct 03 13:43:21 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Oct 04 12:52:38 2019 +0000"
      },
      "message": "Track MimeMap moving to libcore.content.type.\n\nAnother CL in this topic moves libcore.net.MimeMap to package\nlibcore.content.type. This CL updates associated references.\n\nBug: 136256059\nBug: 124232146\nTest: Treehugger\nTest: CtsMimeMapTestCases\nExempt-From-Owner-Approval: move affecting imports only\nChange-Id: I30aac8b28a1740180ea01834a2bb66b61cb255d4\n"
    },
    {
      "commit": "adeea59b4dbdc65ea9b479c3d613a1e933fb9fb0",
      "tree": "39e11a78a27962df3b8c6fe83706963f81672fb1",
      "parents": [
        "324349142cf3dacf5684bc3664b90ee81363dee1"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 20:27:29 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Tue Oct 01 16:26:16 2019 +0100"
      },
      "message": "Make CTS more opinionated about the platform\u0027s default MimeMap.\n\nHistorically, the mapping implemented by MimeMap (formerly MimeUtils)\nwas largely untested and therefore differed between Android devices.\n\nThis CL topic makes CtsMimeMapTestCases a lot more opinionated by\nchecking that:\n\n - MimeMap.getDefault() must respect all of the mappings supplied\n   in stock Android. This is enforced via CTS bundling a copy of:\n   - the {,android.,vendor.}mime.types data files\n   - DefaultMimeMapFactory (rewritten via jarjar to\n     android.content.type.cts.StockAndroidMimeMapFactory)\n   MimeMap.getDefault() is allowed to implement _additional_\n   mappings, but changed or removed mappings are not allowed.\n - Public APIs android.webkit.MimeTypeMap and\n   URLConnection.getFileNameMap() must behave consistently with\n   MimeMap.getDefault() (in stock Android, those APIs are\n   implemented directly on top of MimeMap.getDefault()).\n\nTest: atest CtsMimeMapTestCases\nTest: atest CtsLibcoreTestCases:libcore.libcore.net.MimeMapTest\nTest: The above atest runs pass on a device that contains an\n      additional mapping in vendor.mime.types that is not\n      present in CTS.\nTest: Checked that on a device that changes a mapping in\n      android.mime.types, CtsLibcoreTestCases still passes\n      but CtsMimeMapTestCases fails.\n\nBug: 141842930\nBug: 139895945\n\nChange-Id: I68e0e9c3ce53c1acf2a89f8b80519f4658c07217\n"
    },
    {
      "commit": "324349142cf3dacf5684bc3664b90ee81363dee1",
      "tree": "bb035dc9888b89ff6fa1fd3f011f94cd185f55a0",
      "parents": [
        "e25c54f3282d64e8a139ab8176859d6ab738ef85"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 19:22:39 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Mon Sep 30 17:10:53 2019 +0100"
      },
      "message": "Introduce vendor.mime.types\n\nLike mime.types and android.mime.types, this file specifies mappings\nbetween MIME types and file extensions. Unlike those files, it can\nonly be used to define _additional_ mapping but not modify (change,\nremove) any mappings defined by those files.\n\nThis is done by prepending \u0027?\u0027 to every line element from\nvendor.mime.types that doesn\u0027t already have one; when there is a\nleading \"?\", it is ignored so that it\u0027s okay to move a line from\n{android,vendor}.mime.types without necessarily changing it.\n\nTest: Checked manually that vendor.mime.types works as expected.\n  Specifically, after adding these lines to vendor.mime.type:\n\n    audio/mpeg testmpeg\n    audio/testmpeg mp3\n    ?mime/foo ?fooext\n\n  the following test passes:\n\n    MimeTypeMap map \u003d MimeTypeMap.getSingleton();\n    // Original mapping is unchanged\n    assertEquals(\"mp3\", map.getExtensionFromMimeType(\"audio/mpeg\"));\n    assertEquals(\"audio/mpeg\", map.getMimeTypeFromExtension(\"mp3\"));\n\n    // Map from the key to existing value is added\n    assertEquals(\"audio/mpeg\", map.getMimeTypeFromExtension(\"testmpeg\"));\n    assertEquals(\"mp3\", map.getExtensionFromMimeType(\"audio/testmpeg\"));\n\n    // Completely new mapping is added both ways\n    assertEquals(\"mime/foo\", map.getMimeTypeFromExtension(\"fooext\"));\n    assertEquals(\"fooext\", map.getExtensionFromMimeType(\"mime/foo\"));\n\nBug: 141842825\nChange-Id: Iaf918ce39324709ff58a8e0f9612e4827a673323\n"
    },
    {
      "commit": "af0cef987da359955023fde97f0f4c7444fd5e76",
      "tree": "30db49b5b36201af0be76fb31083ea51405a48db",
      "parents": [
        "fd9657d0320f291fb96b58d7fd5cc46b59d35128"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 17:08:49 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 17:25:13 2019 +0100"
      },
      "message": "MimeMapImpl.createDefaultInstance() -\u003e DefaultMimeMapFactory.create().\n\nThe class no longer implements MimeMap, so the name MimeMapImpl\nno longer made sense.\n\nTest: Treehugger\nBug: 136256059\nChange-Id: I2cbc70a7769232b704a9bdfde2def832c1e292b8\n"
    },
    {
      "commit": "fd9657d0320f291fb96b58d7fd5cc46b59d35128",
      "tree": "f88eaad5100f326fcfc875b6878f268ba140a6d5",
      "parents": [
        "878c77b70478463757b59e7c2719cc62f6604177"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Tue Aug 20 15:23:34 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 17:02:31 2019 +0100"
      },
      "message": "Make MimeMap final and introduce MimeMap.Builder.\n\nThis CL topic introduces a new @CorePlatformApi MimeMap.Builder\nand uses it to make MimeMap a concrete, final, immutable type.\n\nThis has the following advantages:\n\n - Consistency of behavior of MimeMap implementations with regards\n   to lower-casing and treatment of null is trivial to guarantee\n   because there is only one implementation.\n - The @CorePlatformApi surface now makes more sense. The responsibility\n   for lower-casing and treatment of null was previously split between\n   MimeMap in libcore and  MimeMapImpl in frameworks/base, which is why\n   MimeMap.toLowerCase() and MimeMap.isNullOrEmpty() were in the\n   @CorePlatformApi.\n - Most of the logic now lives in libcore / ART module.\n   frameworks/base now has minimal logic. This makes it easier to write\n   (in a follow-up CL) a CTS test that asserts all the default mappings,\n   because that test can now duplicate that small amount of logic in\n   order to read from a copy of the same data files.\n\nNote: The semantics of the @CorePlatformApi Builder.put(String, List\u003cString\u003e)\nare fairly complex, which isn\u0027t great. This was done because:\n - By following the semantics of the *mime.types file format, it allows\n   us to minimize the logic in frameworks/base.\n - It\u0027s simpler than having multiple overloads of put() for\n   mimeType -\u003e file extension mapping and vice versa,\n   and for whether or not any existing mapping should be overwritten.\n   If we had named classes for MimeType and FileExtension with\n   appropriate case-insensitive equals and hashCode semantics, then\n   we could instead have API such as\n      builder.asMimeToExtensionMap().put(...)\n   but existing API (e.g. Intent.getType(), android.webkit.MimeTypeMap)\n   has set precedent for treating these as Strings.\n\nBug: 136256059\nTest: atest CtsLibcoreTestCases\nTest: atest CtsMimeMapTestCases\n\nChange-Id: I9a185a689745726dd79b15117892001461fa4a0d\n"
    },
    {
      "commit": "878c77b70478463757b59e7c2719cc62f6604177",
      "tree": "77fff3dde2dc8d0d7b4d854c5630586e9473bd4e",
      "parents": [
        "52efd46075d7f64da9d46de121a0cf6f93e4a7a1"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Sun Aug 18 15:19:45 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Fri Sep 27 16:53:15 2019 +0100"
      },
      "message": "Move default MimeMap implementation to frameworks.\n\nThis is the second attempt to submit this CL. The first attempt\nregressed on app startup because RuntimeInit installed the\ncustom MimeMap from commonInit() which runs post-fork of the zygote,\nbut that was fixed by installing it pre-fork.\n\nThis CL topic moves the default MimeMap implementation to frameworks.\nLibcore starts with a minimal implementation sufficient to pass\nCtsLibcoreTestCases,  but frameworks can inject the real implementation.\nBefore this CL topic, the data files and logic (MimeMapImpl) were part of\ncore-*.jar on device; after this CL, they instead live in framework.jar.\n\nTests from MimeMapTest that check behavior of that default\nimplementation also move to a non-libcore CTS test.\n\nPlanned work for follow-up CL:\n 1. Make CTS more opinionated, with a plan to assert that all of\n    the default mappings are present. How exactly the expectated\n    mapping will be bundled in CTS is still TBD.\n 2. Add a vendor.mime.types file (defaults to empty) where vendors\n    can add additional mappings; I plan to make it such that mappings\n    in that file are parsed last but never override any earlier\n    mappings, as if each mime type / file extension was prefixed\n    with \u0027?\u0027.\n 3. Perhaps enforce that public APIs android.webkit.MimeTypeMap\n    and java.net.URLConnection.getFileNameMap() behave consistently\n    with MimeMap.getDefault().\n\nTest: atest CtsLibcoreTestCases\nTest: atest CtsMimeMapTestCases\nTest: Checked that CtsLibcoreTestCases still passes on a build that\n      is missing the MimeMap.setDefault() call from RuntimeInit.java.\nTest: Checked that app startup time does not regress as part of this\n      CL topic - see http://b/136256059#comment17\nBug: 136256059\n\nChange-Id: I716914bf1a7e6205e539f0551f010615dacb17a8\n"
    },
    {
      "commit": "f83bd777f33e59e60d46f71c3744369f4c335a0e",
      "tree": "e56720926e3203de95a0833709757841d3935055",
      "parents": [
        "89bcfa5a21d6d4c065b177b889457a97fb033472"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Wed Aug 28 22:42:17 2019 +0000"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Wed Aug 28 22:43:33 2019 +0000"
      },
      "message": "Revert \"Move default MimeMap implementation to frameworks.\"\n\nThis reverts commit 53f15f39f82ef4c4bd99c6d22f3563bae0c35269.\n\nReason for revert: Caused slower app startup (I don\u0027t know why).\n\nChange-Id: Id9e3811078bc435073f42996767589a711172400\n"
    },
    {
      "commit": "53f15f39f82ef4c4bd99c6d22f3563bae0c35269",
      "tree": "f1f711cc5f2bb2e105ab42eadbc22286dd582d21",
      "parents": [
        "4c322503bb6ad612970d64f7d4f29ca6d2d1f1b0"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Sun Aug 18 15:19:45 2019 +0100"
      },
      "committer": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Wed Aug 21 14:46:50 2019 +0100"
      },
      "message": "Move default MimeMap implementation to frameworks.\n\nThis CL topic moves the default MimeMap implementation to frameworks.\nLibcore starts with a minimal implementation sufficient to pass\nCtsLibcoreTestCases,  but frameworks can inject the real implementation.\nBefore this CL topic, the data files and logic (MimeMapImpl) were part of\ncore-*.jar on device; after this CL, they instead live in framework.jar.\n\nTests from MimeMapTest that check behavior of that default\nimplementation also move to a non-libcore CTS test.\n\nSpecifically, the logic and android.mime.types now live in\nframeworks/base/mime. The default implementation is injected\ninto libcore from RuntimeInit. I chose to use a separate directory\n(frameworks/base/mime/) and build java_library target (\"mimemap\")\nin order to keep this as separate as possible from the rest of\nframeworks code, to make it as easy as possible to factor this\nout into a separate APEX module if we ever choose to do so.\n\nPlanned work for follow-up CL:\n 1. Make CTS more opinionated, with a plan to assert that all of\n    the default mappings are present. How exactly the expectated\n    mapping will be bundled in CTS is still TBD.\n 2. Add a vendor.mime.types file (defaults to empty) where vendors\n    can add additional mappings; I plan to make it such that mappings\n    in that file are parsed last but never override any earlier\n    mappings, as if each mime type / file extension was prefixed\n    with \u0027?\u0027.\n 3. Perhaps enforce that public APIs android.webkit.MimeTypeMap\n    and java.net.URLConnection.getFileNameMap() behave consistently\n    with MimeMap.getDefault().\n\nTest: atest CtsLibcoreTestCases\nTest: atest CtsMimeMapTestCases\nBug: 136256059\nChange-Id: Ib955699694d24a25c33ef2445443afb7c35ed9e7\n"
    }
  ]
}
