From 1b8d2bc81c6d9641bc7d3750ad173bc3958d3bae Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 26 Feb 2015 18:30:02 -0500 Subject: [PATCH] Cancel asset fetching when the app view is paused --- app/src/main/java/com/limelight/AppView.java | 4 +++ .../com/limelight/grid/AppGridAdapter.java | 28 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index 05dcfddc..6e263d4c 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -174,6 +174,10 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { if (managerBinder != null) { managerBinder.stopPolling(); } + + if (appGridAdapter != null) { + appGridAdapter.cancelQueuedOperations(); + } } @Override diff --git a/app/src/main/java/com/limelight/grid/AppGridAdapter.java b/app/src/main/java/com/limelight/grid/AppGridAdapter.java index 31ca74fb..668e9b30 100644 --- a/app/src/main/java/com/limelight/grid/AppGridAdapter.java +++ b/app/src/main/java/com/limelight/grid/AppGridAdapter.java @@ -15,6 +15,7 @@ import com.limelight.nvstream.http.ComputerDetails; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.concurrent.ConcurrentHashMap; @@ -24,6 +25,7 @@ public class AppGridAdapter extends GenericGridAdapter { private final CachedAppAssetLoader loader; private final ConcurrentHashMap loadingTuples = new ConcurrentHashMap<>(); + private final ConcurrentHashMap backgroundLoadingTuples = new ConcurrentHashMap<>(); public AppGridAdapter(Activity activity, boolean listMode, boolean small, ComputerDetails computer, String uniqueId) throws KeyManagementException, NoSuchAlgorithmException { super(activity, listMode ? R.layout.simple_row : (small ? R.layout.app_grid_item_small : R.layout.app_grid_item), R.drawable.image_loading); @@ -33,6 +35,21 @@ public class AppGridAdapter extends GenericGridAdapter { new MemoryAssetLoader(), new DiskAssetLoader(context.getCacheDir())); } + private static void cancelTuples(ConcurrentHashMap map) { + Collection tuples = map.values(); + + for (CachedAppAssetLoader.LoaderTuple tuple : tuples) { + tuple.cancel(); + } + + map.clear(); + } + + public void cancelQueuedOperations() { + cancelTuples(loadingTuples); + cancelTuples(backgroundLoadingTuples); + } + private void sortList() { Collections.sort(itemList, new Comparator() { @Override @@ -44,7 +61,12 @@ public class AppGridAdapter extends GenericGridAdapter { public void addApp(AppView.AppObject app) { // Queue a request to fetch this bitmap in the background - loader.loadBitmapWithContextInBackground(app.app, null, backgroundLoadListener); + Object tupleKey = new Object(); + CachedAppAssetLoader.LoaderTuple tuple = + loader.loadBitmapWithContextInBackground(app.app, tupleKey, backgroundLoadListener); + if (tuple != null) { + backgroundLoadingTuples.put(tupleKey, tuple); + } itemList.add(app); sortList(); @@ -94,7 +116,9 @@ public class AppGridAdapter extends GenericGridAdapter { public void notifyLongLoad(Object object) {} @Override - public void notifyLoadComplete(Object object, final Bitmap bitmap) {} + public void notifyLoadComplete(Object object, final Bitmap bitmap) { + backgroundLoadingTuples.remove(object); + } }; public boolean populateImageView(final ImageView imgView, final AppView.AppObject obj) {