From 81e79cf0968640cc837d45a2d83cd9f9df4c3dd7 Mon Sep 17 00:00:00 2001 From: YuviPanda Date: Wed, 10 Jul 2013 20:44:59 +0000 Subject: [PATCH] Make thumbnails load faster by loading smaller Thumbnails GitHub: https://github.com/wikimedia/apps-android-commons/pull/25 Change-Id: I0af540a1d84348a7a3e67c6037cd509b88b84b21 --- commons/res/layout/layout_contribution.xml | 2 ++ commons/res/values/views.xml | 6 ++++++ .../org/wikimedia/commons/MediaWikiImageView.java | 14 ++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 commons/res/values/views.xml diff --git a/commons/res/layout/layout_contribution.xml b/commons/res/layout/layout_contribution.xml index 7ca86a542..fdfe42f35 100644 --- a/commons/res/layout/layout_contribution.xml +++ b/commons/res/layout/layout_contribution.xml @@ -1,6 +1,7 @@ + + + + + \ No newline at end of file diff --git a/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java b/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java index fac11f467..356694c5e 100644 --- a/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java +++ b/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java @@ -16,6 +16,7 @@ package org.wikimedia.commons; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.drawable.BitmapDrawable; import android.text.TextUtils; import android.util.AttributeSet; @@ -41,12 +42,16 @@ public class MediaWikiImageView extends ImageView { private View loadingView; + private boolean isThumbnail; + public MediaWikiImageView(Context context) { this(context, null); } public MediaWikiImageView(Context context, AttributeSet attrs) { this(context, attrs, 0); + TypedArray actualAttrs = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MediaWikiImageView, 0, 0); + isThumbnail = actualAttrs.getBoolean(0, false); } public MediaWikiImageView(Context context, AttributeSet attrs, int defStyle) { @@ -84,6 +89,15 @@ public class MediaWikiImageView extends ImageView { return; } + + // Do not count for density when loading thumbnails. + // FIXME: Use another 'algorithm' that doesn't punish low res devices + if(isThumbnail) { + float dpFactor = Math.max(getResources().getDisplayMetrics().density, 1.0f); + width = (int) (width / dpFactor); + height = (int) (height / dpFactor); + } + final String mUrl; if(tryOriginal) { mUrl = mMedia.getImageUrl();