Fix MediaRailAdapter request counting.
This commit is contained in:
parent
c53b090b76
commit
f2881843db
2 changed files with 24 additions and 6 deletions
|
@ -26,6 +26,7 @@ import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
|
||||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||||
import com.bumptech.glide.load.resource.bitmap.FitCenter;
|
import com.bumptech.glide.load.resource.bitmap.FitCenter;
|
||||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||||
|
import com.bumptech.glide.request.Request;
|
||||||
import com.bumptech.glide.request.RequestListener;
|
import com.bumptech.glide.request.RequestListener;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
|
|
||||||
|
@ -422,7 +423,7 @@ public class ThumbnailView extends FrameLayout {
|
||||||
return setImageResource(glideRequests, uri, width, height, true, null);
|
return setImageResource(glideRequests, uri, width, height, true, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Uri uri, int width, int height, boolean animate, @Nullable RequestListener<Drawable> listener) {
|
public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRequests, @NonNull Uri uri, int width, int height, boolean animate, @Nullable ThumbnailRequestListener listener) {
|
||||||
SettableFuture<Boolean> future = new SettableFuture<>();
|
SettableFuture<Boolean> future = new SettableFuture<>();
|
||||||
|
|
||||||
if (transferControls.isPresent()) getTransferControls().setVisibility(View.GONE);
|
if (transferControls.isPresent()) getTransferControls().setVisibility(View.GONE);
|
||||||
|
@ -445,7 +446,17 @@ public class ThumbnailView extends FrameLayout {
|
||||||
request = request.transforms(new CenterCrop());
|
request = request.transforms(new CenterCrop());
|
||||||
}
|
}
|
||||||
|
|
||||||
request.into(new GlideDrawableListeningTarget(image, future));
|
GlideDrawableListeningTarget target = new GlideDrawableListeningTarget(image, future);
|
||||||
|
Request previousRequest = target.getRequest();
|
||||||
|
boolean previousRequestRunning = previousRequest != null && previousRequest.isRunning();
|
||||||
|
request.into(target);
|
||||||
|
if (listener != null) {
|
||||||
|
listener.onLoadScheduled();
|
||||||
|
if (previousRequestRunning) {
|
||||||
|
listener.onLoadCanceled();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
blurhash.setImageDrawable(null);
|
blurhash.setImageDrawable(null);
|
||||||
|
|
||||||
return future;
|
return future;
|
||||||
|
@ -572,6 +583,11 @@ public class ThumbnailView extends FrameLayout {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface ThumbnailRequestListener extends RequestListener<Drawable> {
|
||||||
|
void onLoadCanceled();
|
||||||
|
void onLoadScheduled();
|
||||||
|
}
|
||||||
|
|
||||||
private class ThumbnailClickDispatcher implements View.OnClickListener {
|
private class ThumbnailClickDispatcher implements View.OnClickListener {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import android.widget.ImageView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.bumptech.glide.load.DataSource
|
import com.bumptech.glide.load.DataSource
|
||||||
import com.bumptech.glide.load.engine.GlideException
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.request.RequestListener
|
|
||||||
import com.bumptech.glide.request.target.Target
|
import com.bumptech.glide.request.target.Target
|
||||||
import org.thoughtcrime.securesms.R
|
import org.thoughtcrime.securesms.R
|
||||||
import org.thoughtcrime.securesms.components.ThumbnailView
|
import org.thoughtcrime.securesms.components.ThumbnailView
|
||||||
|
@ -78,7 +77,6 @@ class MediaRailAdapter(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun bind(model: MediaRailItem) {
|
override fun bind(model: MediaRailItem) {
|
||||||
imageLoadingListener.onRequest()
|
|
||||||
image.setImageResource(glideRequests, model.media.uri, 0, 0, false, imageLoadingListener)
|
image.setImageResource(glideRequests, model.media.uri, 0, 0, false, imageLoadingListener)
|
||||||
image.setOnClickListener { onRailItemSelected(model.media) }
|
image.setOnClickListener { onRailItemSelected(model.media) }
|
||||||
captionIndicator.visibility = if (model.media.caption.isPresent) View.VISIBLE else View.GONE
|
captionIndicator.visibility = if (model.media.caption.isPresent) View.VISIBLE else View.GONE
|
||||||
|
@ -88,12 +86,16 @@ class MediaRailAdapter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class ImageLoadingListener : RequestListener<Drawable?> {
|
abstract class ImageLoadingListener : ThumbnailView.ThumbnailRequestListener {
|
||||||
private val activeJobs = AtomicInteger()
|
private val activeJobs = AtomicInteger()
|
||||||
fun onRequest() {
|
final override fun onLoadScheduled() {
|
||||||
activeJobs.incrementAndGet()
|
activeJobs.incrementAndGet()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun onLoadCanceled() {
|
||||||
|
activeJobs.decrementAndGet()
|
||||||
|
}
|
||||||
|
|
||||||
final override fun onLoadFailed(e: GlideException?, model: Any, target: Target<Drawable?>, isFirstResource: Boolean): Boolean {
|
final override fun onLoadFailed(e: GlideException?, model: Any, target: Target<Drawable?>, isFirstResource: Boolean): Boolean {
|
||||||
val count = activeJobs.decrementAndGet()
|
val count = activeJobs.decrementAndGet()
|
||||||
if (count == 0) {
|
if (count == 0) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue