From b6df25fa714371c3e1a183eba52ebff6b4001f81 Mon Sep 17 00:00:00 2001 From: Floens Date: Tue, 23 Jan 2018 20:14:14 +0100 Subject: [PATCH] imageviewer: cancel preloading images when exiting the viewer. --- .../core/presenter/ImageViewerPresenter.java | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java b/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java index 353e7348..cce80af5 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java +++ b/Clover/app/src/main/java/org/floens/chan/core/presenter/ImageViewerPresenter.java @@ -28,7 +28,9 @@ import org.floens.chan.ui.view.MultiImageView; import java.io.File; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.inject.Inject; @@ -50,6 +52,8 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager. private int selectedPosition; private Loadable loadable; + private Set preloadingImages = new HashSet<>(); + // Disables swiping until the view pager is visible private boolean viewPagerVisible = false; private boolean changeViewsOnInTransitionEnd = false; @@ -106,6 +110,8 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager. callback.setPreviewVisibility(true); callback.startPreviewOutTransition(postImage); callback.showProgress(false); + + cancelPreloadingImages(); } public void onVolumeClicked() { @@ -233,7 +239,14 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager. } if (load) { - final FileCache.DownloadedCallback emptyCallback = + final String fileUrl = next.imageUrl.toString(); + + // If downloading, remove from preloadingImages if it finished. + // Array to allow access from within the callback (the callback should really + // pass the filecachedownloader itself). + final FileCache.FileCacheDownloader[] preloadDownload = + new FileCache.FileCacheDownloader[1]; + preloadDownload[0] = fileCache.downloadFile(fileUrl, new FileCache.DownloadedCallback() { @Override public void onProgress(long downloaded, long total, boolean done) { @@ -241,19 +254,33 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager. @Override public void onSuccess(File file) { + if (preloadDownload[0] != null) { + preloadingImages.remove(preloadDownload[0]); + } } @Override public void onFail(boolean notFound) { + if (preloadDownload[0] != null) { + preloadingImages.remove(preloadDownload[0]); + } } - }; + }); - final String fileUrl = next.imageUrl.toString(); - fileCache.downloadFile(fileUrl, emptyCallback); + if (preloadDownload[0] != null) { + preloadingImages.add(preloadDownload[0]); + } } } } + private void cancelPreloadingImages() { + for (FileCache.FileCacheDownloader preloadingImage : preloadingImages) { + preloadingImage.cancel(); + } + preloadingImages.clear(); + } + @Override public void onTap(MultiImageView multiImageView) { // Don't mistake a swipe when the pager is disabled as a tap