Merge changes Iaf918ce3,I60032b97
am: 2efe92bdbe
Change-Id: I076249c9ccf563905c52b272a8c25c14da8e5711
This commit is contained in:
@@ -26,6 +26,7 @@ java_library {
|
|||||||
java_resources: [
|
java_resources: [
|
||||||
":debian.mime.types",
|
":debian.mime.types",
|
||||||
":android.mime.types",
|
":android.mime.types",
|
||||||
|
":vendor.mime.types",
|
||||||
],
|
],
|
||||||
|
|
||||||
sdk_version: "core_platform",
|
sdk_version: "core_platform",
|
||||||
@@ -41,3 +42,14 @@ filegroup {
|
|||||||
"java-res/android.mime.types",
|
"java-res/android.mime.types",
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filegroup {
|
||||||
|
name: "vendor.mime.types",
|
||||||
|
visibility: [
|
||||||
|
"//visibility:private",
|
||||||
|
],
|
||||||
|
path: "java-res/",
|
||||||
|
srcs: [
|
||||||
|
"java-res/vendor.mime.types",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# Android-specific MIME type <-> extension mappings
|
# 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.
|
# listed extensions, and from listed extension back to the MIME type.
|
||||||
# A mapping overrides any previous mapping _from_ that same MIME type or
|
# A mapping overrides any previous mapping _from_ that same MIME type or
|
||||||
# extension (put() semantics), unless that MIME type / extension is prefixed with '?'
|
# extension (put() semantics), unless that MIME type / extension is prefixed with '?'
|
||||||
|
|||||||
41
mime/java-res/vendor.mime.types
Normal file
41
mime/java-res/vendor.mime.types
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# 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):
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@ import libcore.net.MimeMap;
|
|||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -44,20 +45,17 @@ public class DefaultMimeMapFactory {
|
|||||||
* Android's default mapping between MIME types and extensions.
|
* Android's default mapping between MIME types and extensions.
|
||||||
*/
|
*/
|
||||||
public static MimeMap create() {
|
public static MimeMap create() {
|
||||||
return parseFromResources("/mime.types", "/android.mime.types");
|
MimeMap.Builder builder = MimeMap.builder();
|
||||||
|
parseTypes(builder, true, "/mime.types");
|
||||||
|
parseTypes(builder, true, "/android.mime.types");
|
||||||
|
parseTypes(builder, false, "/vendor.mime.types");
|
||||||
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Pattern SPLIT_PATTERN = Pattern.compile("\\s+");
|
private static final Pattern SPLIT_PATTERN = Pattern.compile("\\s+");
|
||||||
|
|
||||||
static MimeMap parseFromResources(String... resourceNames) {
|
private static void parseTypes(MimeMap.Builder builder, boolean allowOverwrite,
|
||||||
MimeMap.Builder builder = MimeMap.builder();
|
String resource) {
|
||||||
for (String resourceName : resourceNames) {
|
|
||||||
parseTypes(builder, resourceName);
|
|
||||||
}
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void parseTypes(MimeMap.Builder builder, String resource) {
|
|
||||||
try (BufferedReader r = new BufferedReader(
|
try (BufferedReader r = new BufferedReader(
|
||||||
new InputStreamReader(DefaultMimeMapFactory.class.getResourceAsStream(resource)))) {
|
new InputStreamReader(DefaultMimeMapFactory.class.getResourceAsStream(resource)))) {
|
||||||
String line;
|
String line;
|
||||||
@@ -71,6 +69,12 @@ public class DefaultMimeMapFactory {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<String> specs = Arrays.asList(SPLIT_PATTERN.split(line));
|
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()));
|
builder.put(specs.get(0), specs.subList(1, specs.size()));
|
||||||
}
|
}
|
||||||
} catch (IOException | RuntimeException e) {
|
} 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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user