aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hoisie <hoisie@google.com>2021-11-23 16:10:05 -0500
committerMichael Hoisie <hoisie@google.com>2021-11-23 21:26:37 +0000
commit861464ef018b4abfb554707381172deb9ef9169e (patch)
treecd9118680fe6e1ec7a9e17bbe38a2901bec76ed2
parentc0637382c143788474cce3a502436b26a858f6a6 (diff)
downloadrobolectric-shadows-861464ef018b4abfb554707381172deb9ef9169e.tar.gz
Restore PackageParser.Callback interface methods for SDK < 30
Also, add a ShadowPackageBackwardCompatibility class to handle when multiple APIs are on the classpath. See cl/404887745 for more details about ShadowPackageBackwardCompatibility. Test: m -j Run_robolectric_shadows_androidx_fragment_tests Bug: 205007023 Change-Id: I7db22e0423bfced3d149ba0ab3f54efcc33f6489
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageBackwardCompatibility.java29
-rw-r--r--shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageParser.java10
2 files changed, 39 insertions, 0 deletions
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageBackwardCompatibility.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageBackwardCompatibility.java
new file mode 100644
index 000000000..60a465bae
--- /dev/null
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageBackwardCompatibility.java
@@ -0,0 +1,29 @@
+package org.robolectric.shadows;
+
+import static android.os.Build.VERSION_CODES.P;
+
+import com.android.server.pm.parsing.library.PackageSharedLibraryUpdater;
+import java.util.List;
+import java.util.function.Supplier;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * Shadow of {@link PackageBackwardCompatibility} to handle a scenario that can come up when
+ * multiple Android versions end up on the classpath
+ */
+@Implements(className = "android.content.pm.PackageBackwardCompatibility", maxSdk = P)
+public class ShadowPackageBackwardCompatibility {
+
+ /**
+ * Stubbing this out as if Android S+ is on the classpath, we'll get a ClassCastException instead
+ * of a ClassNotFoundException. Since we don't really need this logic, simpler to just skip it
+ */
+ @Implementation
+ protected static boolean addOptionalUpdater(
+ List<PackageSharedLibraryUpdater> packageUpdaters,
+ String className,
+ Supplier<PackageSharedLibraryUpdater> defaultUpdater) {
+ return false;
+ }
+}
diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageParser.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageParser.java
index 8c2f6e1fa..494079303 100644
--- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageParser.java
+++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPackageParser.java
@@ -72,5 +72,15 @@ public class ShadowPackageParser {
public boolean hasFeature(String feature) {
return false;
}
+
+ // @Override for SDK < 30
+ public String[] getOverlayPaths(String s, String s1) {
+ return null;
+ }
+
+ // @Override for SDK < 30
+ public String[] getOverlayApks(String s) {
+ return null;
+ }
}
}