imageviewer: cancel preloading images when exiting the viewer.

refactor-toolbar
Floens 8 years ago
parent 25c1048628
commit b6df25fa71
  1. 35
      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.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.inject.Inject; import javax.inject.Inject;
@ -50,6 +52,8 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
private int selectedPosition; private int selectedPosition;
private Loadable loadable; private Loadable loadable;
private Set<FileCache.FileCacheDownloader> preloadingImages = new HashSet<>();
// Disables swiping until the view pager is visible // Disables swiping until the view pager is visible
private boolean viewPagerVisible = false; private boolean viewPagerVisible = false;
private boolean changeViewsOnInTransitionEnd = false; private boolean changeViewsOnInTransitionEnd = false;
@ -106,6 +110,8 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
callback.setPreviewVisibility(true); callback.setPreviewVisibility(true);
callback.startPreviewOutTransition(postImage); callback.startPreviewOutTransition(postImage);
callback.showProgress(false); callback.showProgress(false);
cancelPreloadingImages();
} }
public void onVolumeClicked() { public void onVolumeClicked() {
@ -233,7 +239,14 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
} }
if (load) { 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() { new FileCache.DownloadedCallback() {
@Override @Override
public void onProgress(long downloaded, long total, boolean done) { public void onProgress(long downloaded, long total, boolean done) {
@ -241,19 +254,33 @@ public class ImageViewerPresenter implements MultiImageView.Callback, ViewPager.
@Override @Override
public void onSuccess(File file) { public void onSuccess(File file) {
if (preloadDownload[0] != null) {
preloadingImages.remove(preloadDownload[0]);
}
} }
@Override @Override
public void onFail(boolean notFound) { public void onFail(boolean notFound) {
if (preloadDownload[0] != null) {
preloadingImages.remove(preloadDownload[0]);
}
} }
}; });
final String fileUrl = next.imageUrl.toString(); if (preloadDownload[0] != null) {
fileCache.downloadFile(fileUrl, emptyCallback); preloadingImages.add(preloadDownload[0]);
}
} }
} }
} }
private void cancelPreloadingImages() {
for (FileCache.FileCacheDownloader preloadingImage : preloadingImages) {
preloadingImage.cancel();
}
preloadingImages.clear();
}
@Override @Override
public void onTap(MultiImageView multiImageView) { public void onTap(MultiImageView multiImageView) {
// Don't mistake a swipe when the pager is disabled as a tap // Don't mistake a swipe when the pager is disabled as a tap

Loading…
Cancel
Save