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;
}
}