Support xml mipmaps.

Fix NPE in ShadowApplicationPackageManager
diff --git a/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java b/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java
index 0701895..26150eb 100644
--- a/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java
+++ b/resources/src/main/java/org/robolectric/res/ResourceTableFactory.java
@@ -142,6 +142,7 @@
       loadOpaque(resourcePath, resourceTable, "layout", ResType.LAYOUT);
       loadOpaque(resourcePath, resourceTable, "menu", ResType.LAYOUT);
       loadOpaque(resourcePath, resourceTable, "drawable", ResType.DRAWABLE);
+      loadOpaque(resourcePath, resourceTable, "mipmap", ResType.DRAWABLE);
       loadOpaque(resourcePath, resourceTable, "anim", ResType.LAYOUT);
       loadOpaque(resourcePath, resourceTable, "animator", ResType.LAYOUT);
       loadOpaque(resourcePath, resourceTable, "color", ResType.COLOR_STATE_LIST);
diff --git a/robolectric/src/test/java/org/robolectric/R.java b/robolectric/src/test/java/org/robolectric/R.java
index ed80c75..dcbecb3 100644
--- a/robolectric/src/test/java/org/robolectric/R.java
+++ b/robolectric/src/test/java/org/robolectric/R.java
@@ -425,5 +425,7 @@
   public static final class mipmap {
     public static final int robolectric = 0x7f140000;
     public static final int mipmap_reference = 0x7f140001;
+    public static final int robolectric_xml = 0x7f140002;
+    public static final int mipmap_reference_xml = 0x7f140003;
   }
 }
diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java
index c83a1e5..2fc5d04 100644
--- a/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java
+++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowResourcesTest.java
@@ -898,6 +898,16 @@
     assertThat(reference.getMinimumWidth()).isEqualTo(original.getMinimumWidth());
   }
 
+  @Test
+  @Config(minSdk = Build.VERSION_CODES.O)
+  public void getDrawable_mipmapReferencesResolveXml() {
+    Drawable reference = resources.getDrawable(R.mipmap.robolectric_xml);
+    Drawable original = resources.getDrawable(R.mipmap.mipmap_reference_xml);
+
+    assertThat(reference.getMinimumHeight()).isEqualTo(original.getMinimumHeight());
+    assertThat(reference.getMinimumWidth()).isEqualTo(original.getMinimumWidth());
+  }
+
   private static String findRootTag(XmlResourceParser parser) throws Exception {
     int event;
     do {
diff --git a/robolectric/src/test/resources/res/mipmap/robolectric_xml.xml b/robolectric/src/test/resources/res/mipmap/robolectric_xml.xml
new file mode 100644
index 0000000..7d0b17e
--- /dev/null
+++ b/robolectric/src/test/resources/res/mipmap/robolectric_xml.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+  <background>
+    <bitmap android:src="@mipmap/robolectric"/>
+  </background>
+  <foreground>
+    <bitmap android:src="@mipmap/robolectric"/>
+  </foreground>
+</adaptive-icon>
diff --git a/robolectric/src/test/resources/res/values/mipmaps.xml b/robolectric/src/test/resources/res/values/mipmaps.xml
index 41999cc..f1289d1 100644
--- a/robolectric/src/test/resources/res/values/mipmaps.xml
+++ b/robolectric/src/test/resources/res/values/mipmaps.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
   <item name="mipmap_reference" type="mipmap">@mipmap/robolectric</item>
+  <item name="mipmap_reference_xml" type="mipmap">@mipmap/robolectric_xml</item>
 </resources>
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
index c71a3bd..2229352 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowApplicationPackageManager.java
@@ -218,11 +218,14 @@
 
   @Implementation
   public ProviderInfo resolveContentProvider(String name, int flags) {
+    if (name == null) {
+      return null;
+    }
     for (PackageInfo packageInfo : packageInfos.values()) {
       if (packageInfo.providers == null) continue;
 
       for (ProviderInfo providerInfo : packageInfo.providers) {
-        if (name.equals(providerInfo.authority)) { // todo: support multiple authorities
+        if (name != null && name.equals(providerInfo.authority)) { // todo: support multiple authorities
           return providerInfo;
         }
       }