Skip to content

Commit e58322e

Browse files
authored
Fixed commons-app#4908 : Thumbnail image is grey during upload (commons-app#4909)
* Fixed commons-app#4908 : Thumbnail image is grey during upload * Test Added and minor changes
1 parent 4ba463c commit e58322e

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

app/src/main/java/fr/free/nrw/commons/contributions/ContributionViewHolder.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.net.Uri;
44
import android.text.TextUtils;
55
import android.view.View;
6+
import android.webkit.URLUtil;
67
import android.widget.ImageButton;
78
import android.widget.ProgressBar;
89
import android.widget.RelativeLayout;
@@ -23,6 +24,7 @@
2324
import io.reactivex.android.schedulers.AndroidSchedulers;
2425
import io.reactivex.disposables.CompositeDisposable;
2526
import io.reactivex.schedulers.Schedulers;
27+
import java.io.File;
2628

2729
public class ContributionViewHolder extends RecyclerView.ViewHolder {
2830

@@ -58,6 +60,7 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
5860
private boolean isWikipediaButtonDisplayed;
5961
private AlertDialog pausingPopUp;
6062
private View parent;
63+
private ImageRequest imageRequest;
6164

6265
ContributionViewHolder(final View parent, final Callback callback,
6366
final MediaClient mediaClient) {
@@ -96,11 +99,18 @@ public void init(final int position, final Contribution contribution) {
9699
final String imageSource = chooseImageSource(contribution.getMedia().getThumbUrl(),
97100
contribution.getLocalUri());
98101
if (!TextUtils.isEmpty(imageSource)) {
99-
final ImageRequest imageRequest =
100-
ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource))
102+
if (URLUtil.isHttpsUrl(imageSource)) {
103+
imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource))
101104
.setProgressiveRenderingEnabled(true)
102105
.build();
103-
imageView.setImageRequest(imageRequest);
106+
} else if(imageSource != null) {
107+
final File file = new File(imageSource);
108+
imageRequest = ImageRequest.fromFile(file);
109+
}
110+
111+
if(imageRequest != null){
112+
imageView.setImageRequest(imageRequest);
113+
}
104114
}
105115

106116
seqNumView.setText(String.valueOf(position + 1));
@@ -280,4 +290,8 @@ private void setResume() {
280290
pauseResumeButton.setImageResource(R.drawable.play_icon);
281291
pauseResumeButton.setTag(parent.getContext().getString(R.string.resume));
282292
}
293+
294+
public ImageRequest getImageRequest() {
295+
return imageRequest;
296+
}
283297
}

app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionViewHolderUnitTests.kt

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import android.widget.RelativeLayout
1010
import android.widget.TextView
1111
import com.facebook.drawee.backends.pipeline.Fresco
1212
import com.facebook.drawee.view.SimpleDraweeView
13+
import com.facebook.imagepipeline.request.ImageRequest
1314
import com.facebook.soloader.SoLoader
15+
import com.nhaarman.mockitokotlin2.verify
1416
import fr.free.nrw.commons.Media
1517
import fr.free.nrw.commons.R
1618
import fr.free.nrw.commons.TestCommonsApplication
@@ -22,7 +24,8 @@ import org.junit.Before
2224
import org.junit.Test
2325
import org.junit.runner.RunWith
2426
import org.mockito.Mock
25-
import org.mockito.Mockito.`when`
27+
import org.mockito.Mockito
28+
import org.mockito.Mockito.*
2629
import org.mockito.MockitoAnnotations
2730
import org.powermock.reflect.Whitebox
2831
import org.robolectric.Robolectric
@@ -31,6 +34,7 @@ import org.robolectric.RuntimeEnvironment
3134
import org.robolectric.Shadows
3235
import org.robolectric.annotation.Config
3336
import org.robolectric.annotation.LooperMode
37+
import java.io.File
3438
import java.lang.reflect.Method
3539

3640
@RunWith(RobolectricTestRunner::class)
@@ -324,4 +328,36 @@ class ContributionViewHolderUnitTests {
324328
contributionViewHolder.init(0, contribution)
325329
}
326330

331+
@Test
332+
@Throws(Exception::class)
333+
fun testInitCaseImageSource_HttpURL() {
334+
Shadows.shadowOf(Looper.getMainLooper()).idle()
335+
`when`(contribution.media).thenReturn(media)
336+
`when`(contribution.media.thumbUrl).thenReturn("https://demo/sample.png")
337+
`when`(contribution.localUri).thenReturn(null)
338+
contributionViewHolder.init(0, contribution)
339+
Assert.assertNotNull(contributionViewHolder.imageRequest)
340+
}
341+
342+
@Test
343+
@Throws(Exception::class)
344+
fun testInitCaseImageSource_NULL() {
345+
Shadows.shadowOf(Looper.getMainLooper()).idle()
346+
`when`(contribution.media).thenReturn(media)
347+
`when`(contribution.media.thumbUrl).thenReturn(null)
348+
`when`(contribution.localUri).thenReturn(null)
349+
contributionViewHolder.init(0, contribution)
350+
Assert.assertNull(contributionViewHolder.imageRequest)
351+
}
352+
353+
@Test
354+
@Throws(Exception::class)
355+
fun testInitCaseImageSource_LocalUri() {
356+
Shadows.shadowOf(Looper.getMainLooper()).idle()
357+
`when`(contribution.media).thenReturn(media)
358+
`when`(contribution.media.thumbUrl).thenReturn(null)
359+
`when`(contribution.localUri).thenReturn(Uri.parse("/data/android/demo.png"))
360+
contributionViewHolder.init(0, contribution)
361+
Assert.assertNotNull(contributionViewHolder.imageRequest)
362+
}
327363
}

0 commit comments

Comments
 (0)