Skip to content

Commit

Permalink
Fix MediaRailAdapter request counting.
Browse files Browse the repository at this point in the history
  • Loading branch information
clark-signal authored and alex-signal committed Jan 11, 2023
1 parent c53b090 commit f288184
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.FitCenter;
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.RequestOptions;

Expand Down Expand Up @@ -422,7 +423,7 @@ public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRe
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<>();

if (transferControls.isPresent()) getTransferControls().setVisibility(View.GONE);
Expand All @@ -445,7 +446,17 @@ public ListenableFuture<Boolean> setImageResource(@NonNull GlideRequests glideRe
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);

return future;
Expand Down Expand Up @@ -572,6 +583,11 @@ private int getDefaultHeight() {
return 0;
}

public interface ThumbnailRequestListener extends RequestListener<Drawable> {
void onLoadCanceled();
void onLoadScheduled();
}

private class ThumbnailClickDispatcher implements View.OnClickListener {
@Override
public void onClick(View view) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import android.widget.ImageView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.ThumbnailView
Expand Down Expand Up @@ -78,7 +77,6 @@ class MediaRailAdapter(
}

override fun bind(model: MediaRailItem) {
imageLoadingListener.onRequest()
image.setImageResource(glideRequests, model.media.uri, 0, 0, false, imageLoadingListener)
image.setOnClickListener { onRailItemSelected(model.media) }
captionIndicator.visibility = if (model.media.caption.isPresent) View.VISIBLE else View.GONE
Expand All @@ -88,12 +86,16 @@ class MediaRailAdapter(
}
}

abstract class ImageLoadingListener : RequestListener<Drawable?> {
abstract class ImageLoadingListener : ThumbnailView.ThumbnailRequestListener {
private val activeJobs = AtomicInteger()
fun onRequest() {
final override fun onLoadScheduled() {
activeJobs.incrementAndGet()
}

final override fun onLoadCanceled() {
activeJobs.decrementAndGet()
}

final override fun onLoadFailed(e: GlideException?, model: Any, target: Target<Drawable?>, isFirstResource: Boolean): Boolean {
val count = activeJobs.decrementAndGet()
if (count == 0) {
Expand Down

0 comments on commit f288184

Please sign in to comment.