1 package org.robolectric.shadows; 2 3 import android.webkit.MimeTypeMap; 4 import java.util.HashMap; 5 import java.util.Map; 6 import org.robolectric.Shadows; 7 import org.robolectric.annotation.Implementation; 8 import org.robolectric.annotation.Implements; 9 import org.robolectric.annotation.Resetter; 10 import org.robolectric.shadow.api.Shadow; 11 12 @Implements(MimeTypeMap.class) 13 public class ShadowMimeTypeMap { 14 private final Map<String, String> extensionToMimeTypeMap = new HashMap<>(); 15 private final Map<String, String> mimeTypeToExtensionMap = new HashMap<>(); 16 private static volatile MimeTypeMap singleton = null; 17 private static final Object singletonLock = new Object(); 18 19 @Implementation 20 public static MimeTypeMap getSingleton() { 21 if (singleton == null) { 22 synchronized (singletonLock) { 23 if (singleton == null) { 24 singleton = Shadow.newInstanceOf(MimeTypeMap.class); 25 } 26 } 27 } 28 29 return singleton; 30 } 31 32 @Resetter 33 public static void reset() { 34 if (singleton != null) { 35 Shadows.shadowOf(getSingleton()).clearMappings(); 36 } 37 } 38 39 @Implementation 40 public String getMimeTypeFromExtension(String extension) { 41 if (extensionToMimeTypeMap.containsKey(extension)) 42 return extensionToMimeTypeMap.get(extension); 43 44 return null; 45 } 46 47 @Implementation 48 public String getExtensionFromMimeType(String mimeType) { 49 if (mimeTypeToExtensionMap.containsKey(mimeType)) 50 return mimeTypeToExtensionMap.get(mimeType); 51 52 return null; 53 } 54 55 public void addExtensionMimeTypMapping(String extension, String mimeType) { 56 extensionToMimeTypeMap.put(extension, mimeType); 57 mimeTypeToExtensionMap.put(mimeType, extension); 58 } 59 60 public void clearMappings() { 61 extensionToMimeTypeMap.clear(); 62 mimeTypeToExtensionMap.clear(); 63 } 64 65 @Implementation 66 public boolean hasExtension(String extension) { 67 return extensionToMimeTypeMap.containsKey(extension); 68 } 69 70 @Implementation 71 public boolean hasMimeType(String mimeType) { 72 return mimeTypeToExtensionMap.containsKey(mimeType); 73 } 74 } 75