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.text.TextUtils;
import android.view.View;
import android.webkit.URLUtil;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
@ -23,6 +24,7 @@ import fr.free.nrw.commons.media.MediaClient;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import java.io.File;
public class ContributionViewHolder extends RecyclerView.ViewHolder {
@ -58,6 +60,7 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
private boolean isWikipediaButtonDisplayed;
private AlertDialog pausingPopUp;
private View parent;
private ImageRequest imageRequest;
ContributionViewHolder(final View parent, final Callback callback,
final MediaClient mediaClient) {
@ -96,12 +99,19 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
final String imageSource = chooseImageSource(contribution.getMedia().getThumbUrl(),
contribution.getLocalUri());
if (!TextUtils.isEmpty(imageSource)) {
final ImageRequest imageRequest =
ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource))
if (URLUtil.isHttpsUrl(imageSource)) {
imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(imageSource))
.setProgressiveRenderingEnabled(true)
.build();
} 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.setVisibility(View.VISIBLE);
@ -280,4 +290,8 @@ public class ContributionViewHolder extends RecyclerView.ViewHolder {
pauseResumeButton.setImageResource(R.drawable.play_icon);
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 com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.view.SimpleDraweeView
import com.facebook.imagepipeline.request.ImageRequest
import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.verify
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestCommonsApplication
@ -22,7 +24,8 @@ import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito
import org.mockito.Mockito.*
import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric
@ -31,6 +34,7 @@ import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import java.io.File
import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class)
@ -324,4 +328,36 @@ class ContributionViewHolderUnitTests {
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)
}
}