Fixed #4908 : Thumbnail image is grey during upload (#4909)

* Fixed #4908 : Thumbnail image is grey during upload

* Test Added and minor changes
This commit is contained in:
Arin Modi 2022-03-21 18:55:20 +05:30 committed by GitHub
parent 4ba463c6b2
commit e58322ed63
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 4 deletions

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.contributions;
import android.net.Uri; import android.net.Uri;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.webkit.URLUtil;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
@ -23,6 +24,7 @@ import fr.free.nrw.commons.media.MediaClient;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable; import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import java.io.File;
public class ContributionViewHolder extends RecyclerView.ViewHolder { public class ContributionViewHolder extends RecyclerView.ViewHolder {
@ -58,6 +60,7 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
private boolean isWikipediaButtonDisplayed; private boolean isWikipediaButtonDisplayed;
private AlertDialog pausingPopUp; private AlertDialog pausingPopUp;
private View parent; private View parent;
private ImageRequest imageRequest;
ContributionViewHolder(final View parent, final Callback callback, ContributionViewHolder(final View parent, final Callback callback,
final MediaClient mediaClient) { final MediaClient mediaClient) {
@ -96,11 +99,18 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
final String imageSource = chooseImageSource(contribution.getMedia().getThumbUrl(), final String imageSource = chooseImageSource(contribution.getMedia().getThumbUrl(),
contribution.getLocalUri()); contribution.getLocalUri());
if (!TextUtils.isEmpty(imageSource)) { if (!TextUtils.isEmpty(imageSource)) {
final ImageRequest imageRequest = if (URLUtil.isHttpsUrl(imageSource)) {
ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource)) imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource))
.setProgressiveRenderingEnabled(true) .setProgressiveRenderingEnabled(true)
.build(); .build();
imageView.setImageRequest(imageRequest); } else if(imageSource != null) {
final File file = new File(imageSource);
imageRequest = ImageRequest.fromFile(file);
}
if(imageRequest != null){
imageView.setImageRequest(imageRequest);
}
} }
seqNumView.setText(String.valueOf(position + 1)); seqNumView.setText(String.valueOf(position + 1));
@ -280,4 +290,8 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
pauseResumeButton.setImageResource(R.drawable.play_icon); pauseResumeButton.setImageResource(R.drawable.play_icon);
pauseResumeButton.setTag(parent.getContext().getString(R.string.resume)); pauseResumeButton.setTag(parent.getContext().getString(R.string.resume));
} }
public ImageRequest getImageRequest() {
return imageRequest;
}
} }

View file

@ -10,7 +10,9 @@ import android.widget.RelativeLayout
import android.widget.TextView import android.widget.TextView
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.view.SimpleDraweeView import com.facebook.drawee.view.SimpleDraweeView
import com.facebook.imagepipeline.request.ImageRequest
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.verify
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
@ -22,7 +24,8 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when` import org.mockito.Mockito
import org.mockito.Mockito.*
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
@ -31,6 +34,7 @@ import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import java.io.File
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -324,4 +328,36 @@ class ContributionViewHolderUnitTests {
contributionViewHolder.init(0, contribution) contributionViewHolder.init(0, contribution)
} }
@Test
@Throws(Exception::class)
fun testInitCaseImageSource_HttpURL() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(contribution.media).thenReturn(media)
`when`(contribution.media.thumbUrl).thenReturn("https://demo/sample.png")
`when`(contribution.localUri).thenReturn(null)
contributionViewHolder.init(0, contribution)
Assert.assertNotNull(contributionViewHolder.imageRequest)
}
@Test
@Throws(Exception::class)
fun testInitCaseImageSource_NULL() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(contribution.media).thenReturn(media)
`when`(contribution.media.thumbUrl).thenReturn(null)
`when`(contribution.localUri).thenReturn(null)
contributionViewHolder.init(0, contribution)
Assert.assertNull(contributionViewHolder.imageRequest)
}
@Test
@Throws(Exception::class)
fun testInitCaseImageSource_LocalUri() {
Shadows.shadowOf(Looper.getMainLooper()).idle()
`when`(contribution.media).thenReturn(media)
`when`(contribution.media.thumbUrl).thenReturn(null)
`when`(contribution.localUri).thenReturn(Uri.parse("/data/android/demo.png"))
contributionViewHolder.init(0, contribution)
Assert.assertNotNull(contributionViewHolder.imageRequest)
}
} }