diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 70b6f326c..e9eb44f9a 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -11,6 +11,7 @@ import android.content.pm.PackageManager; import android.os.Build; import android.database.sqlite.SQLiteDatabase; import android.preference.PreferenceManager; +import android.support.v4.util.LruCache; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.stetho.Stetho; @@ -84,6 +85,7 @@ public class CommonsApplication extends Application { private static CommonsApplication instance = null; private AbstractHttpClient httpClient = null; private MWApi api = null; + LruCache thumbnailUrlCache = new LruCache<>(1024); private CacheController cacheData = null; private DBOpenHelper dbOpenHelper = null; private NearbyPlaces nearbyPlaces = null; @@ -139,6 +141,10 @@ public class CommonsApplication extends Application { return cacheData; } + public LruCache getThumbnailUrlCache() { + return thumbnailUrlCache; + } + public synchronized DBOpenHelper getDBOpenHelper() { if (dbOpenHelper == null) { dbOpenHelper = new DBOpenHelper(this); diff --git a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java index b7a3be903..027ae61e2 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaWikiImageView.java @@ -3,14 +3,12 @@ package fr.free.nrw.commons; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v4.util.LruCache; import android.util.AttributeSet; import com.facebook.drawee.view.SimpleDraweeView; public class MediaWikiImageView extends SimpleDraweeView { private ThumbnailFetchTask currentThumbnailTask; - LruCache thumbnailUrlCache = new LruCache<>(1024); public MediaWikiImageView(Context context) { this(context, null); @@ -29,14 +27,13 @@ public class MediaWikiImageView extends SimpleDraweeView { currentThumbnailTask.cancel(true); } if(media == null) { - setImageURI((String) null); return; } - if (thumbnailUrlCache.get(media.getFilename()) != null) { - setImageUrl(thumbnailUrlCache.get(media.getFilename())); + if (CommonsApplication.getInstance().getThumbnailUrlCache().get(media.getFilename()) != null) { + setImageUrl(CommonsApplication.getInstance().getThumbnailUrlCache().get(media.getFilename())); } else { - setImageURI((String) null); + setImageUrl(null); currentThumbnailTask = new ThumbnailFetchTask(media); currentThumbnailTask.execute(media.getFilename()); } @@ -64,7 +61,7 @@ public class MediaWikiImageView extends SimpleDraweeView { if (isCancelled()) { return; } - thumbnailUrlCache.put(media.getFilename(), result); + CommonsApplication.getInstance().getThumbnailUrlCache().put(media.getFilename(), result); setImageUrl(result); } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index cff5a8971..69b8ac3ad 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -10,9 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; -import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.TextView; @@ -50,10 +48,7 @@ public class MediaDetailFragment extends Fragment { return mf; } - private ImageView image; - //private EditText title; - private ProgressBar loadingProgress; - private ImageView loadingFailed; + private MediaWikiImageView image; private MediaDetailSpacer spacer; private int initialListTop = 0; @@ -105,9 +100,7 @@ public class MediaDetailFragment extends Fragment { final View view = inflater.inflate(R.layout.fragment_media_detail, container, false); - image = (ImageView) view.findViewById(R.id.mediaDetailImage); - loadingProgress = (ProgressBar) view.findViewById(R.id.mediaDetailImageLoading); - loadingFailed = (ImageView) view.findViewById(R.id.mediaDetailImageFailed); + image = (MediaWikiImageView) view.findViewById(R.id.mediaDetailImage); scrollView = (ScrollView) view.findViewById(R.id.mediaDetailScrollView); // Detail consists of a list view with main pane in header view, plus category list. @@ -178,8 +171,7 @@ public class MediaDetailFragment extends Fragment { private void displayMediaDetails(final Media media) { //Always load image from Internet to allow viewing the desc, license, and cats - MediaWikiImageView mwImage = (MediaWikiImageView) image; - mwImage.setMedia(media); + image.setMedia(media); // FIXME: For transparent images // FIXME: keep the spinner going while we load data diff --git a/app/src/main/res/drawable/ic_error_outline_black_24dp.xml b/app/src/main/res/drawable/ic_error_outline_black_24dp.xml new file mode 100644 index 000000000..850263ee7 --- /dev/null +++ b/app/src/main/res/drawable/ic_error_outline_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_image_black_24dp.xml b/app/src/main/res/drawable/ic_image_black_24dp.xml new file mode 100644 index 000000000..63aa7d33b --- /dev/null +++ b/app/src/main/res/drawable/ic_image_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index 6287cbc91..5bd94e015 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -25,7 +25,9 @@ android:id="@+id/backgroundImage" android:layout_width="match_parent" android:layout_height="match_parent" - app:actualImageScaleType="centerCrop" /> + app:actualImageScaleType="centerCrop" + app:placeholderImage="@drawable/ic_image_black_24dp" + app:failureImage="@drawable/ic_error_outline_black_24dp" /> - - + app:placeholderImage="@drawable/ic_image_black_24dp" + app:failureImage="@drawable/ic_error_outline_black_24dp" />