19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.media; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1968db99ef761456ffaa0c4b918ce75dfc0892784aJames Dongimport android.media.DecoderCapabilities; 2068db99ef761456ffaa0c4b918ce75dfc0892784aJames Dongimport android.media.DecoderCapabilities.VideoDecoder; 2168db99ef761456ffaa0c4b918ce75dfc0892784aJames Dongimport android.media.DecoderCapabilities.AudioDecoder; 220cd0136d440cf6ad9d5fab430269116786e671ecMike Lockwoodimport android.mtp.MtpConstants; 230398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hironoimport com.android.internal.util.Preconditions; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 2568db99ef761456ffaa0c4b918ce75dfc0892784aJames Dongimport java.util.List; 26dcb1a58cf9d66b36de825dae2fa0cb0529e60680Elliott Hughesimport java.util.Locale; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * MediaScanner helper class. 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class MediaFile { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Audio file types 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_MP3 = 1; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_M4A = 2; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_WAV = 3; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_AMR = 4; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_AWB = 5; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_WMA = 6; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_OGG = 7; 43974ff946d114610ec41172fb6076d9d8810c3680Ravi K Yenduri public static final int FILE_TYPE_AAC = 8; 44072f5247ef893e683728263a540bb93daafda376Andreas Huber public static final int FILE_TYPE_MKA = 9; 45f9f223edb408cdc9fd946dc099a86857079a639fGlenn Kasten public static final int FILE_TYPE_FLAC = 10; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3; 47f9f223edb408cdc9fd946dc099a86857079a639fGlenn Kasten private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // MIDI file types 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_MID = 11; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_SMF = 12; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_IMY = 13; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY; 555a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Video file types 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_MP4 = 21; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_M4V = 22; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_3GPP = 23; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_3GPP2 = 24; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_WMV = 25; 62974ff946d114610ec41172fb6076d9d8810c3680Ravi K Yenduri public static final int FILE_TYPE_ASF = 26; 63072f5247ef893e683728263a540bb93daafda376Andreas Huber public static final int FILE_TYPE_MKV = 27; 64a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber public static final int FILE_TYPE_MP2TS = 28; 65cabb7da7125a80c55233bd23959327424e9646ccAndreas Huber public static final int FILE_TYPE_AVI = 29; 66ff535914825f63999648030a02f57767593462f0Mike Lockwood public static final int FILE_TYPE_WEBM = 30; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4; 68ff535914825f63999648030a02f57767593462f0Mike Lockwood private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM; 695a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 70bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber // More video file types 71bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber public static final int FILE_TYPE_MP2PS = 200; 72c9cb80e9e66c334eb82bf94e20a93c5b02719733Bryan Mawhinney public static final int FILE_TYPE_QT = 201; 73bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber private static final int FIRST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS; 74c9cb80e9e66c334eb82bf94e20a93c5b02719733Bryan Mawhinney private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_QT; 75bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Image file types 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_JPEG = 31; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_GIF = 32; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_PNG = 33; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_BMP = 34; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int FILE_TYPE_WBMP = 35; 82d0881d95e2d4eceab37288f88f43f771e08eab65Vikas Arora public static final int FILE_TYPE_WEBP = 36; 836e18ccee2afd30a1b0874c5e26b2c8289309b432Chong Zhang public static final int FILE_TYPE_HEIF = 37; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG; 856e18ccee2afd30a1b0874c5e26b2c8289309b432Chong Zhang private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_HEIF; 865a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 875a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung // Raw image file types 885a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_DNG = 300; 895a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_CR2 = 301; 905a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_NEF = 302; 915a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_NRW = 303; 925a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_ARW = 304; 935a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_RW2 = 305; 945a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_ORF = 306; 955a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static final int FILE_TYPE_RAF = 307; 968409c0691fb128fef6244305977342776bddf919Jaesung Chung public static final int FILE_TYPE_PEF = 308; 978409c0691fb128fef6244305977342776bddf919Jaesung Chung public static final int FILE_TYPE_SRW = 309; 985a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung private static final int FIRST_RAW_IMAGE_FILE_TYPE = FILE_TYPE_DNG; 998409c0691fb128fef6244305977342776bddf919Jaesung Chung private static final int LAST_RAW_IMAGE_FILE_TYPE = FILE_TYPE_SRW; 1005a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Playlist file types 1025dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber public static final int FILE_TYPE_M3U = 41; 1035dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber public static final int FILE_TYPE_PLS = 42; 1045dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber public static final int FILE_TYPE_WPL = 43; 1055dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber public static final int FILE_TYPE_HTTPLIVE = 44; 1065dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U; 1085dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_HTTPLIVE; 109fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood 1105d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang // Drm file types 1115d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang public static final int FILE_TYPE_FL = 51; 1125d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang private static final int FIRST_DRM_FILE_TYPE = FILE_TYPE_FL; 1135d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang private static final int LAST_DRM_FILE_TYPE = FILE_TYPE_FL; 1145d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang 115fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood // Other popular file types 116fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_TEXT = 100; 117fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_HTML = 101; 118fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_PDF = 102; 119fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_XML = 103; 120fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_MS_WORD = 104; 121fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_MS_EXCEL = 105; 122fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood public static final int FILE_TYPE_MS_POWERPOINT = 106; 123f9f223edb408cdc9fd946dc099a86857079a639fGlenn Kasten public static final int FILE_TYPE_ZIP = 107; 1245a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 125bd682b040833fce9e212c00c395b32bec7050f87Mike Lockwood public static class MediaFileType { 126bd682b040833fce9e212c00c395b32bec7050f87Mike Lockwood public final int fileType; 127bd682b040833fce9e212c00c395b32bec7050f87Mike Lockwood public final String mimeType; 1285a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MediaFileType(int fileType, String mimeType) { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.fileType = fileType; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mimeType = mimeType; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1345a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 13530c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten private static final HashMap<String, MediaFileType> sFileTypeMap 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project = new HashMap<String, MediaFileType>(); 13730c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten private static final HashMap<String, Integer> sMimeTypeMap 138d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood = new HashMap<String, Integer>(); 139d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood // maps file extension to MTP format code 14030c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten private static final HashMap<String, Integer> sFileTypeToFormatMap 141d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood = new HashMap<String, Integer>(); 142d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood // maps mime type to MTP format code 14330c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten private static final HashMap<String, Integer> sMimeTypeToFormatMap 144d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood = new HashMap<String, Integer>(); 145d815f79766984fce499e147ecbacc01914683f74Mike Lockwood // maps MTP format code to mime type 14630c918ce7fbe171944b28fc91b3f22b3d631872dGlenn Kasten private static final HashMap<Integer, String> sFormatToMimeTypeMap 147d815f79766984fce499e147ecbacc01914683f74Mike Lockwood = new HashMap<Integer, String>(); 148d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void addFileType(String extension, int fileType, String mimeType) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType)); 151d282ac8610f72d964105efefe41120a5340f1ce0Marco Nelissen sMimeTypeMap.put(mimeType, Integer.valueOf(fileType)); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 15368db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong 1540398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono private static void addFileType(String extension, int fileType, String mimeType, 1550398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono int mtpFormatCode, boolean primaryType) { 156d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood addFileType(extension, fileType, mimeType); 157d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood sFileTypeToFormatMap.put(extension, Integer.valueOf(mtpFormatCode)); 158d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood sMimeTypeToFormatMap.put(mimeType, Integer.valueOf(mtpFormatCode)); 1590398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono if (primaryType) { 1600398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono Preconditions.checkArgument(!sFormatToMimeTypeMap.containsKey(mtpFormatCode)); 1610398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono sFormatToMimeTypeMap.put(mtpFormatCode, mimeType); 1620398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono } 163d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 164d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood 16568db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong private static boolean isWMAEnabled() { 16668db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong List<AudioDecoder> decoders = DecoderCapabilities.getAudioDecoders(); 16716dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood int count = decoders.size(); 16816dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood for (int i = 0; i < count; i++) { 16916dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood AudioDecoder decoder = decoders.get(i); 17068db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong if (decoder == AudioDecoder.AUDIO_DECODER_WMA) { 17168db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong return true; 17268db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong } 17368db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong } 17468db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong return false; 17568db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong } 17668db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong 17716dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood private static boolean isWMVEnabled() { 17816dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood List<VideoDecoder> decoders = DecoderCapabilities.getVideoDecoders(); 17916dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood int count = decoders.size(); 18016dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood for (int i = 0; i < count; i++) { 18116dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood VideoDecoder decoder = decoders.get(i); 18216dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood if (decoder == VideoDecoder.VIDEO_DECODER_WMV) { 18316dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood return true; 18416dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood } 18516dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood } 18616dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood return false; 18716dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood } 18816dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 1900398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg", MtpConstants.FORMAT_MP3, true); 1910398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MPGA", FILE_TYPE_MP3, "audio/mpeg", MtpConstants.FORMAT_MP3, false); 1920398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("M4A", FILE_TYPE_M4A, "audio/mp4", MtpConstants.FORMAT_MPEG, false); 1930398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav", MtpConstants.FORMAT_WAV, true); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("AMR", FILE_TYPE_AMR, "audio/amr"); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb"); 19668db99ef761456ffaa0c4b918ce75dfc0892784aJames Dong if (isWMAEnabled()) { 1970398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma", MtpConstants.FORMAT_WMA, true); 1980ddbc35dc4974fbe18a4191e579b1eda5a7ef2b1Marco Nelissen } 1990398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("OGG", FILE_TYPE_OGG, "audio/ogg", MtpConstants.FORMAT_OGG, false); 2000398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("OGG", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG, true); 2010398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("OGA", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG, false); 2020398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("AAC", FILE_TYPE_AAC, "audio/aac", MtpConstants.FORMAT_AAC, true); 2030398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("AAC", FILE_TYPE_AAC, "audio/aac-adts", MtpConstants.FORMAT_AAC, false); 204072f5247ef893e683728263a540bb93daafda376Andreas Huber addFileType("MKA", FILE_TYPE_MKA, "audio/x-matroska"); 2055a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("MID", FILE_TYPE_MID, "audio/midi"); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("MIDI", FILE_TYPE_MID, "audio/midi"); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("XMF", FILE_TYPE_MID, "audio/midi"); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("RTTTL", FILE_TYPE_MID, "audio/midi"); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi"); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("IMY", FILE_TYPE_IMY, "audio/imelody"); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("RTX", FILE_TYPE_MID, "audio/midi"); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project addFileType("OTA", FILE_TYPE_MID, "audio/midi"); 214eecadb9a84f357fb224592cc77603ff3e7c28f08Andreas Huber addFileType("MXMF", FILE_TYPE_MID, "audio/midi"); 2155a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 2160398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MPEG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG, true); 2170398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MPG", FILE_TYPE_MP4, "video/mpeg", MtpConstants.FORMAT_MPEG, false); 2180398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MP4", FILE_TYPE_MP4, "video/mp4", MtpConstants.FORMAT_MPEG, false); 2190398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("M4V", FILE_TYPE_M4V, "video/mp4", MtpConstants.FORMAT_MPEG, false); 2200398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("MOV", FILE_TYPE_QT, "video/quicktime", MtpConstants.FORMAT_MPEG, false); 221c9cb80e9e66c334eb82bf94e20a93c5b02719733Bryan Mawhinney 2220398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp", MtpConstants.FORMAT_3GP_CONTAINER, true); 2230398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp", MtpConstants.FORMAT_3GP_CONTAINER, false); 2240398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER, false); 2250398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2", MtpConstants.FORMAT_3GP_CONTAINER, false); 226072f5247ef893e683728263a540bb93daafda376Andreas Huber addFileType("MKV", FILE_TYPE_MKV, "video/x-matroska"); 227ff535914825f63999648030a02f57767593462f0Mike Lockwood addFileType("WEBM", FILE_TYPE_WEBM, "video/webm"); 228a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber addFileType("TS", FILE_TYPE_MP2TS, "video/mp2ts"); 229cabb7da7125a80c55233bd23959327424e9646ccAndreas Huber addFileType("AVI", FILE_TYPE_AVI, "video/avi"); 230a557b24ac4dd568d86b08753f7c0361d04f80d46Andreas Huber 23116dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood if (isWMVEnabled()) { 2320398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv", MtpConstants.FORMAT_WMV, true); 23316dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood addFileType("ASF", FILE_TYPE_ASF, "video/x-ms-asf"); 23416dc3073a2f06a77d9873e536f633a4adf575fceMike Lockwood } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2360398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg", MtpConstants.FORMAT_EXIF_JPEG, true); 2370398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg", MtpConstants.FORMAT_EXIF_JPEG, false); 2380398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("GIF", FILE_TYPE_GIF, "image/gif", MtpConstants.FORMAT_GIF, true); 2390398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("PNG", FILE_TYPE_PNG, "image/png", MtpConstants.FORMAT_PNG, true); 2400398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp", MtpConstants.FORMAT_BMP, true); 2410398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp", MtpConstants.FORMAT_DEFINED, false); 2420398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WEBP", FILE_TYPE_WEBP, "image/webp", MtpConstants.FORMAT_DEFINED, false); 2436e18ccee2afd30a1b0874c5e26b2c8289309b432Chong Zhang addFileType("HEIC", FILE_TYPE_HEIF, "image/heif", MtpConstants.FORMAT_HEIF, true); 2446e18ccee2afd30a1b0874c5e26b2c8289309b432Chong Zhang addFileType("HEIF", FILE_TYPE_HEIF, "image/heif", MtpConstants.FORMAT_HEIF, false); 2450398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono 2460398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("DNG", FILE_TYPE_DNG, "image/x-adobe-dng", MtpConstants.FORMAT_DNG, true); 2470398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("CR2", FILE_TYPE_CR2, "image/x-canon-cr2", MtpConstants.FORMAT_TIFF, false); 2480398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("NEF", FILE_TYPE_NEF, "image/x-nikon-nef", MtpConstants.FORMAT_TIFF_EP, false); 2490398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("NRW", FILE_TYPE_NRW, "image/x-nikon-nrw", MtpConstants.FORMAT_TIFF, false); 2500398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("ARW", FILE_TYPE_ARW, "image/x-sony-arw", MtpConstants.FORMAT_TIFF, false); 2510398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("RW2", FILE_TYPE_RW2, "image/x-panasonic-rw2", MtpConstants.FORMAT_TIFF, false); 2520398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("ORF", FILE_TYPE_ORF, "image/x-olympus-orf", MtpConstants.FORMAT_TIFF, false); 2530398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("RAF", FILE_TYPE_RAF, "image/x-fuji-raf", MtpConstants.FORMAT_DEFINED, false); 2540398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("PEF", FILE_TYPE_PEF, "image/x-pentax-pef", MtpConstants.FORMAT_TIFF, false); 2550398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("SRW", FILE_TYPE_SRW, "image/x-samsung-srw", MtpConstants.FORMAT_TIFF, false); 2560398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono 2570398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST, true); 2580398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("M3U", FILE_TYPE_M3U, "application/x-mpegurl", MtpConstants.FORMAT_M3U_PLAYLIST, false); 2590398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls", MtpConstants.FORMAT_PLS_PLAYLIST, true); 2600398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl", MtpConstants.FORMAT_WPL_PLAYLIST, true); 2615dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber addFileType("M3U8", FILE_TYPE_HTTPLIVE, "application/vnd.apple.mpegurl"); 2625dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber addFileType("M3U8", FILE_TYPE_HTTPLIVE, "audio/mpegurl"); 2635dffd0e3af502acdc2e45425139ef8081fa4f0a8Andreas Huber addFileType("M3U8", FILE_TYPE_HTTPLIVE, "audio/x-mpegurl"); 264fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood 2655d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang addFileType("FL", FILE_TYPE_FL, "application/x-android-drm-fl"); 2665d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang 2670398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("TXT", FILE_TYPE_TEXT, "text/plain", MtpConstants.FORMAT_TEXT, true); 2680398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("HTM", FILE_TYPE_HTML, "text/html", MtpConstants.FORMAT_HTML, true); 2690398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("HTML", FILE_TYPE_HTML, "text/html", MtpConstants.FORMAT_HTML, false); 270fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood addFileType("PDF", FILE_TYPE_PDF, "application/pdf"); 2710398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("DOC", FILE_TYPE_MS_WORD, "application/msword", MtpConstants.FORMAT_MS_WORD_DOCUMENT, true); 2720398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("XLS", FILE_TYPE_MS_EXCEL, "application/vnd.ms-excel", MtpConstants.FORMAT_MS_EXCEL_SPREADSHEET, true); 2739806330b521aabfa49d34b6e0bc2409ce36e68bcbokyung.kim addFileType("PPT", FILE_TYPE_MS_POWERPOINT, "application/vnd.ms-powerpoint", MtpConstants.FORMAT_MS_POWERPOINT_PRESENTATION, true); 2740398eb5c1baab82bf6498be74340c7eedee35ea1Daichi Hirono addFileType("FLAC", FILE_TYPE_FLAC, "audio/flac", MtpConstants.FORMAT_FLAC, true); 275fde2ca180ea63ebd314770ec55b97e0a3c5a0788Mike Lockwood addFileType("ZIP", FILE_TYPE_ZIP, "application/zip"); 276bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber addFileType("MPG", FILE_TYPE_MP2PS, "video/mp2p"); 277bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber addFileType("MPEG", FILE_TYPE_MP2PS, "video/mp2p"); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 279c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isAudioFileType(int fileType) { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ((fileType >= FIRST_AUDIO_FILE_TYPE && 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fileType <= LAST_AUDIO_FILE_TYPE) || 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (fileType >= FIRST_MIDI_FILE_TYPE && 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fileType <= LAST_MIDI_FILE_TYPE)); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 286c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isVideoFileType(int fileType) { 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (fileType >= FIRST_VIDEO_FILE_TYPE && 289bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber fileType <= LAST_VIDEO_FILE_TYPE) 290bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber || (fileType >= FIRST_VIDEO_FILE_TYPE2 && 291bc554956128d69d8d2e60365fb6cffe6facf659bAndreas Huber fileType <= LAST_VIDEO_FILE_TYPE2); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 293c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isImageFileType(int fileType) { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (fileType >= FIRST_IMAGE_FILE_TYPE && 2965a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung fileType <= LAST_IMAGE_FILE_TYPE) 2975a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung || (fileType >= FIRST_RAW_IMAGE_FILE_TYPE && 2985a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung fileType <= LAST_RAW_IMAGE_FILE_TYPE); 2995a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung } 3005a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung 3015a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung public static boolean isRawImageFileType(int fileType) { 3025a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung return (fileType >= FIRST_RAW_IMAGE_FILE_TYPE && 3035a8b9627c7fdacc94791fb3024386739f8cf9a56Jaesung Chung fileType <= LAST_RAW_IMAGE_FILE_TYPE); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 305c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean isPlayListFileType(int fileType) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (fileType >= FIRST_PLAYLIST_FILE_TYPE && 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fileType <= LAST_PLAYLIST_FILE_TYPE); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 310c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 3115d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang public static boolean isDrmFileType(int fileType) { 3125d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang return (fileType >= FIRST_DRM_FILE_TYPE && 3135d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang fileType <= LAST_DRM_FILE_TYPE); 3145d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang } 3155d143ad4a8f8c90f44e185a494ff3ff638e6c103Gloria Wang 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static MediaFileType getFileType(String path) { 317dcb1a58cf9d66b36de825dae2fa0cb0529e60680Elliott Hughes int lastDot = path.lastIndexOf('.'); 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (lastDot < 0) 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 320dcb1a58cf9d66b36de825dae2fa0cb0529e60680Elliott Hughes return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase(Locale.ROOT)); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 322c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 32345b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori public static boolean isMimeTypeMedia(String mimeType) { 32445b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori int fileType = getFileTypeForMimeType(mimeType); 32545b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori return isAudioFileType(fileType) || isVideoFileType(fileType) 32645b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori || isImageFileType(fileType) || isPlayListFileType(fileType); 32745b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori } 32845b43622e329c25c6070a3f2f2fc2ba5a14533bbVasu Nori 329c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood // generates a title based on file name 330c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood public static String getFileTitle(String path) { 331c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood // extract file name after last slash 332c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood int lastSlash = path.lastIndexOf('/'); 333c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood if (lastSlash >= 0) { 334c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood lastSlash++; 335c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood if (lastSlash < path.length()) { 336c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood path = path.substring(lastSlash); 337c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood } 338c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood } 339c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood // truncate the file extension (if any) 340c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood int lastDot = path.lastIndexOf('.'); 341c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood if (lastDot > 0) { 342c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood path = path.substring(0, lastDot); 343c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood } 344c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood return path; 345c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood } 346c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static int getFileTypeForMimeType(String mimeType) { 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Integer value = sMimeTypeMap.get(mimeType); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (value == null ? 0 : value.intValue()); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 352c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood public static String getMimeTypeForFile(String path) { 353c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood MediaFileType mediaFileType = getFileType(path); 354c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood return (mediaFileType == null ? null : mediaFileType.mimeType); 355c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood } 356c37255d5d0fd9e0ec02b0d7cb5c4b235e200d367Mike Lockwood 357d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood public static int getFormatCode(String fileName, String mimeType) { 358d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood if (mimeType != null) { 359d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood Integer value = sMimeTypeToFormatMap.get(mimeType); 360d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood if (value != null) { 361d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood return value.intValue(); 362d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 363d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 364d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood int lastDot = fileName.lastIndexOf('.'); 365d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood if (lastDot > 0) { 366dcb1a58cf9d66b36de825dae2fa0cb0529e60680Elliott Hughes String extension = fileName.substring(lastDot + 1).toUpperCase(Locale.ROOT); 367d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood Integer value = sFileTypeToFormatMap.get(extension); 368d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood if (value != null) { 369d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood return value.intValue(); 370d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 371d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 3725367ab6aab2a61aaf534b18576dcdd0bca1b9681Mike Lockwood return MtpConstants.FORMAT_UNDEFINED; 373d21eac9c70940f2c73da5faaf401dbbc44b70a15Mike Lockwood } 374d815f79766984fce499e147ecbacc01914683f74Mike Lockwood 375d815f79766984fce499e147ecbacc01914683f74Mike Lockwood public static String getMimeTypeForFormatCode(int formatCode) { 376d815f79766984fce499e147ecbacc01914683f74Mike Lockwood return sFormatToMimeTypeMap.get(formatCode); 377d815f79766984fce499e147ecbacc01914683f74Mike Lockwood } 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 379