Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2efe92bd authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes Iaf918ce3,I60032b97

* changes:
  Introduce vendor.mime.types
  android.mime.types: Fix typo.
parents 15da7c17 32434914
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ java_library {
    java_resources: [
        ":debian.mime.types",
        ":android.mime.types",
        ":vendor.mime.types",
    ],

    sdk_version: "core_platform",
@@ -41,3 +42,14 @@ filegroup {
        "java-res/android.mime.types",
    ],
}

filegroup {
    name: "vendor.mime.types",
    visibility: [
        "//visibility:private",
    ],
    path: "java-res/",
    srcs: [
        "java-res/vendor.mime.types",
    ],
}
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
#
# Android-specific MIME type <-> extension mappings
#
# Each line below defines an mapping from one MIME type to the first of the
# Each line below defines a mapping from one MIME type to the first of the
# listed extensions, and from listed extension back to the MIME type.
# A mapping overrides any previous mapping _from_ that same MIME type or
# extension (put() semantics), unless that MIME type / extension is prefixed with '?'
+41 −0
Original line number Diff line number Diff line
###############################################################################
#
# Vendor-specific MIME type <-> extension mappings
#
# Each line below defines a mapping from one MIME type to the first of the
# listed extensions, and from listed extension back to the MIME type.
#
# This file can _add_ additional mappings that are not in the default set,
# but it it cannot _modify_ (replace or remove) any platform default mapping
# (defined in files mime.types and android.mime.types).
#
###############################################################################
#
# EXAMPLES
#
# A line of the form (without the leading '#''):
#
#    mime ext1 ext2 ext3
#
# affects the current mappings along the lines of the following pseudo code:
#
#    mimeToExt.putIfAbsent("mime", "ext1");
#    extToMime.putIfAbsent("ext1", "mime");
#    extToMime.putIfAbsent("ext2", "mime");
#    extToMime.putIfAbsent("ext3", "mime");
#
# Optionally, MIME types or extensions may be prefixed by a single '?', which
# will be ignored. I.e., the following example lines all have the same semantics:
#
#    mime ext1 ext2 ext3
#    ?mime ext1 ext2 ext3
#    mime ?ext1 ext2 ?ext3
#    ?mime ?ext1 ?ext2 ?ext3
#
# By default, this file contains no mappings (which means that the platform
# default mapping is used unmodified).
#
###############################################################################
#
# Add your custom mappings below this line (with no "#" at the start of the line):
+25 −10
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import libcore.net.MimeMap;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
@@ -44,20 +45,17 @@ public class DefaultMimeMapFactory {
     * Android's default mapping between MIME types and extensions.
     */
    public static MimeMap create() {
        return parseFromResources("/mime.types", "/android.mime.types");
    }

    private static final Pattern SPLIT_PATTERN = Pattern.compile("\\s+");

    static MimeMap parseFromResources(String... resourceNames) {
        MimeMap.Builder builder = MimeMap.builder();
        for (String resourceName : resourceNames) {
            parseTypes(builder, resourceName);
        }
        parseTypes(builder, true, "/mime.types");
        parseTypes(builder, true, "/android.mime.types");
        parseTypes(builder, false, "/vendor.mime.types");
        return builder.build();
    }

    private static void parseTypes(MimeMap.Builder builder, String resource) {
    private static final Pattern SPLIT_PATTERN = Pattern.compile("\\s+");

    private static void parseTypes(MimeMap.Builder builder, boolean allowOverwrite,
            String resource) {
        try (BufferedReader r = new BufferedReader(
                new InputStreamReader(DefaultMimeMapFactory.class.getResourceAsStream(resource)))) {
            String line;
@@ -71,6 +69,12 @@ public class DefaultMimeMapFactory {
                    continue;
                }
                List<String> specs = Arrays.asList(SPLIT_PATTERN.split(line));
                if (!allowOverwrite) {
                    // Pretend that the mimeType and each file extension listed in the line
                    // carries a "?" prefix, which means that it can add new mappings but
                    // not modify existing mappings (putIfAbsent() semantics).
                    specs = ensurePrefix("?", specs);
                }
                builder.put(specs.get(0), specs.subList(1, specs.size()));
            }
        } catch (IOException | RuntimeException e) {
@@ -78,4 +82,15 @@ public class DefaultMimeMapFactory {
        }
    }

    private static List<String> ensurePrefix(String prefix, List<String> strings) {
        List<String> result = new ArrayList<>(strings.size());
        for (String s : strings) {
            if (!s.startsWith(prefix)) {
                s = prefix + s;
            }
            result.add(s);
        }
        return result;
    }

}