diff --git a/forge-gui-mobile/src/forge/assets/ImageCache.java b/forge-gui-mobile/src/forge/assets/ImageCache.java
index 84ed7e6dad8..1e0d25eace3 100644
--- a/forge-gui-mobile/src/forge/assets/ImageCache.java
+++ b/forge-gui-mobile/src/forge/assets/ImageCache.java
@@ -83,7 +83,7 @@ public class ImageCache {
}
})
.build(new ImageLoader());
- private static final LoadingCache otherCache = CacheBuilder.newBuilder().build(new ImageLoader());
+ private static final LoadingCache otherCache = CacheBuilder.newBuilder().build(new OtherImageLoader());
public static final Texture defaultImage;
public static FImage BlackBorder = FSkinImage.IMG_BORDER_BLACK;
public static FImage WhiteBorder = FSkinImage.IMG_BORDER_WHITE;
@@ -119,10 +119,11 @@ public class ImageCache {
public static Texture getImage(InventoryItem ii) {
String imageKey = ii.getImageKey(false);
- boolean isCardImage = imageKey.startsWith(ImageKeys.CARD_PREFIX) || imageKey.startsWith(ImageKeys.TOKEN_PREFIX);
- if (isCardImage)
- getImage(ii.getImageKey(false), true);
- return getOtherImages(ii.getImageKey(false));
+ if (imageKey != null) {
+ if(imageKey.startsWith(ImageKeys.CARD_PREFIX) || imageKey.startsWith(ImageKeys.TOKEN_PREFIX))
+ return getImage(ii.getImageKey(false), true, false);
+ }
+ return getImage(ii.getImageKey(false), true, true);
}
/**
@@ -132,7 +133,7 @@ public class ImageCache {
public static FImage getIcon(IHasIcon ihi) {
String imageKey = ihi.getIconImageKey();
final Texture icon;
- if (missingIconKeys.contains(imageKey) || (icon = getOtherImages(ihi.getIconImageKey())) == null) {
+ if (missingIconKeys.contains(imageKey) || (icon = getImage(ihi.getIconImageKey(), false, true)) == null) {
missingIconKeys.add(imageKey);
return FSkinImage.UNKNOWN;
}
@@ -181,6 +182,9 @@ public class ImageCache {
*
*/
public static Texture getImage(String imageKey, boolean useDefaultIfNotFound) {
+ return getImage(imageKey, useDefaultIfNotFound, false);
+ }
+ public static Texture getImage(String imageKey, boolean useDefaultIfNotFound, boolean useOtherCache) {
if (StringUtils.isEmpty(imageKey)) {
return null;
}
@@ -199,7 +203,7 @@ public class ImageCache {
Texture image;
if (useDefaultIfNotFound) {
// Load from file and add to cache if not found in cache initially.
- image = cache.getIfPresent(imageKey);
+ image = useOtherCache ? otherCache.getIfPresent(imageKey) : cache.getIfPresent(imageKey);
if (image != null) { return image; }
@@ -214,7 +218,7 @@ public class ImageCache {
imageLoaded = true;
}
- try { image = cache.get(imageKey); }
+ try { image = useOtherCache ? otherCache.get(imageKey) : cache.get(imageKey); }
catch (final Exception ex) {
image = null;
}
@@ -224,25 +228,16 @@ public class ImageCache {
if (image == null) {
if (useDefaultIfNotFound) {
image = defaultImage;
- cache.put(imageKey, defaultImage);
+ if (useOtherCache)
+ otherCache.put(imageKey, defaultImage);
+ else
+ cache.put(imageKey, defaultImage);
if (imageBorder.get(image.toString()) == null)
imageBorder.put(image.toString(), Pair.of(Color.valueOf("#171717").toString(), false)); //black border
}
}
return image;
}
- public static Texture getOtherImages(String imageKey) {
- if (StringUtils.isEmpty(imageKey)) {
- return null;
- }
- Texture image;
-
- try { image = otherCache.get(imageKey); }
- catch (final Exception ex) {
- image = null;
- }
- return image;
- }
public static void preloadCache(Iterable keys) {
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_DISABLE_CARD_IMAGES))
return;
diff --git a/forge-gui-mobile/src/forge/assets/OtherImageLoader.java b/forge-gui-mobile/src/forge/assets/OtherImageLoader.java
new file mode 100644
index 00000000000..13bf1477c29
--- /dev/null
+++ b/forge-gui-mobile/src/forge/assets/OtherImageLoader.java
@@ -0,0 +1,35 @@
+package forge.assets;
+
+import java.io.File;
+
+import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.graphics.Texture;
+import com.google.common.cache.CacheLoader;
+
+import forge.Forge;
+import forge.ImageKeys;
+
+final class OtherImageLoader extends CacheLoader {
+ @Override
+ public Texture load(String key) {
+ File file = ImageKeys.getImageFile(key);
+ if (file != null) {
+ FileHandle fh = new FileHandle(file);
+ try {
+ if (Forge.isTextureFilteringEnabled()) {
+ Texture t = new Texture(fh, true);
+ t.setFilter(Texture.TextureFilter.MipMapLinearLinear, Texture.TextureFilter.Linear);
+ return t;
+ } else {
+ return new Texture(fh);
+ }
+ }
+ catch (Exception ex) {
+ Forge.log("Could not read image file " + fh.path() + "\n\nException:\n" + ex.toString());
+ return null;
+ }
+ }
+ return null;
+ }
+}
+