diff --git a/android/gradle.properties b/android/gradle.properties index c138d3c..6175f86 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,6 +1,6 @@ -GWMvc=122 -GWMvn=1.2.2 -GWMpn=com.guidewithme.hawaii -GWMapk=Test GuideWithMe -GWMappName=Test GuideWithMe +GWMvc=123 +GWMvn=1.2.3 +GWMpn=com.guidewithme.germany +GWMapk=GuideWithMe Germany +GWMappName=GuideWithMe Germany GWMndkFlags=propNdkFlags=V=0 NDK_DEBUG=0 \ No newline at end of file diff --git a/android/res/drawable-hdpi/ic_gwm.png b/android/res/drawable-hdpi/ic_gwm.png index 8cf5171..4c0060f 100644 Binary files a/android/res/drawable-hdpi/ic_gwm.png and b/android/res/drawable-hdpi/ic_gwm.png differ diff --git a/android/res/drawable-ldpi/ic_gwm.png b/android/res/drawable-ldpi/ic_gwm.png index 81c8cb8..fa1fbf9 100644 Binary files a/android/res/drawable-ldpi/ic_gwm.png and b/android/res/drawable-ldpi/ic_gwm.png differ diff --git a/android/res/drawable-mdpi/ic_gwm.png b/android/res/drawable-mdpi/ic_gwm.png index f230009..ab50d01 100644 Binary files a/android/res/drawable-mdpi/ic_gwm.png and b/android/res/drawable-mdpi/ic_gwm.png differ diff --git a/android/res/drawable-xhdpi/ic_gwm.png b/android/res/drawable-xhdpi/ic_gwm.png index 15a2779..3c44307 100644 Binary files a/android/res/drawable-xhdpi/ic_gwm.png and b/android/res/drawable-xhdpi/ic_gwm.png differ diff --git a/android/res/drawable-xxhdpi/ic_gwm.png b/android/res/drawable-xxhdpi/ic_gwm.png index 8ee5435..a6ea34f 100644 Binary files a/android/res/drawable-xxhdpi/ic_gwm.png and b/android/res/drawable-xxhdpi/ic_gwm.png differ diff --git a/android/src/com/guidewithme/thumb/ZipThumbnailsProvider.java b/android/src/com/guidewithme/thumb/ZipThumbnailsProvider.java index 8dc4ab1..3a0ecc0 100644 --- a/android/src/com/guidewithme/thumb/ZipThumbnailsProvider.java +++ b/android/src/com/guidewithme/thumb/ZipThumbnailsProvider.java @@ -2,12 +2,17 @@ package com.guidewithme.thumb; import java.io.IOException; import java.io.InputStream; +import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.util.Log; + +import com.guidewithme.util.CollectionUtils; +import com.guidewithme.util.CollectionUtils.Predicate; public class ZipThumbnailsProvider implements ThumbnailsProvider { @@ -27,12 +32,29 @@ public class ZipThumbnailsProvider implements ThumbnailsProvider } } + @SuppressWarnings("unchecked") @Override public Drawable getThumbnailByUrl(String url) { try { - final ZipEntry ze = mZFile.getEntry("data/thumb/" + url); + final String thumbsPrefix = "data/thumb/"; + ZipEntry ze = mZFile.getEntry(thumbsPrefix + url); + if (ze == null) + { + Log.e("GWM " + mContext.getPackageName(), "null entry:" + url); + + // Provide random icon in that case + final Predicate isThumbEntry = new Predicate() + { + @Override + public boolean apply(ZipEntry arg) + { + return arg.getName().startsWith(thumbsPrefix); + } + }; + ze = CollectionUtils.any(CollectionUtils.filter((Enumeration)mZFile.entries(), isThumbEntry)); + } final InputStream is = mZFile.getInputStream(ze); return new BitmapDrawable(mContext.getResources(), is); } diff --git a/android/src/com/guidewithme/util/CollectionUtils.java b/android/src/com/guidewithme/util/CollectionUtils.java new file mode 100644 index 0000000..2cd1638 --- /dev/null +++ b/android/src/com/guidewithme/util/CollectionUtils.java @@ -0,0 +1,40 @@ +package com.guidewithme.util; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.NoSuchElementException; + +public class CollectionUtils +{ + public interface Predicate + { + boolean apply(T arg); + } + + public static List filter(Collection input, Predicate condition) + { + final ArrayList out = new ArrayList(input.size()); + for (final T val : input) + { + if (condition.apply(val)) + out.add(val); + } + return out; + } + + public static List filter(Enumeration input, Predicate condition) + { + return filter(Collections.list(input), condition); + } + + public static T any(List input) + { + if (input.isEmpty()) + throw new NoSuchElementException("Input collection is empty"); + + return input.get(Utils.random(input.size())); + } +} diff --git a/android/src/com/guidewithme/util/Utils.java b/android/src/com/guidewithme/util/Utils.java index dd4b7ec..f738345 100644 --- a/android/src/com/guidewithme/util/Utils.java +++ b/android/src/com/guidewithme/util/Utils.java @@ -4,6 +4,7 @@ import java.io.File; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.util.Random; import android.app.Activity; import android.content.Context; @@ -26,6 +27,11 @@ public class Utils return view; } + public static int random(int max) + { + return new Random().nextInt(max); + } + public static View showView(View view) { view.setVisibility(View.VISIBLE);