diff --git a/src/api-impl/android/content/Context.java b/src/api-impl/android/content/Context.java index 206200c9..9c727af7 100644 --- a/src/api-impl/android/content/Context.java +++ b/src/api-impl/android/content/Context.java @@ -125,6 +125,8 @@ public class Context extends Object { application_info.nativeLibraryDir = (new File(Environment.getExternalStorageDirectory(), "lib")).getAbsolutePath(); application_info.sourceDir = native_get_apk_path(); package_manager = new PackageManager(); + + r.applyPackageQuirks(application_info.packageName); } private static native String native_get_apk_path(); diff --git a/src/api-impl/android/content/res/Resources.java b/src/api-impl/android/content/res/Resources.java index c29bbca9..9175645b 100644 --- a/src/api-impl/android/content/res/Resources.java +++ b/src/api-impl/android/content/res/Resources.java @@ -109,7 +109,7 @@ public class Resources { /*package*/ final Object mAccessLock = new Object(); /*package*/ final Configuration mTmpConfig = new Configuration(); /*package*/ TypedValue mTmpValue = new TypedValue(); - /*package*/ final Map> mDrawableCache = new HashMap>(0); + /*package*/ Object mDrawableCache = new HashMap>(0); private final ConfigurationBoundResourceCache mComplexColorCache = new ConfigurationBoundResourceCache<>(this); /*package*/ final LongSparseArray> mColorDrawableCache = new LongSparseArray>(0); /*package*/ boolean mPreloading; @@ -213,6 +213,19 @@ public class Resources { // assets.ensureStringBlocks(); } + public void applyPackageQuirks(String packageName) { + // F-Droid expects mDrawableCache to be a ThemedResourceCache while most other apps expect a Map + if ("org.fdroid.fdroid".equals(packageName)) { + mDrawableCache = new ThemedResourceCache() { + @Override + protected boolean shouldInvalidateEntry(Drawable entry, int configChanges) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'shouldInvalidateEntry'"); + } + }; + } + } + /** * Return a global shared Resources object that provides access to only * system resources (no application resources), and is not configured for