From 95384bb214ab2aa07cd78fdda8e8988ed9a2d2c1 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Patel Date: Wed, 25 Mar 2020 17:43:35 +0530 Subject: [PATCH] Updates : Fix an issue where app updates continue to be download post cancellation https://gitlab.com/AuroraOSS/AuroraStore/-/issues/323 --- .../store/download/DownloadManager.java | 18 ++++++ .../fragment/updates/UpdatesFragment.java | 58 +++++++++++++++---- 2 files changed, 65 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/aurora/store/download/DownloadManager.java b/app/src/main/java/com/aurora/store/download/DownloadManager.java index a244b5328..099ed3068 100644 --- a/app/src/main/java/com/aurora/store/download/DownloadManager.java +++ b/app/src/main/java/com/aurora/store/download/DownloadManager.java @@ -26,10 +26,14 @@ import com.aurora.store.BuildConfig; import com.aurora.store.Constants; import com.aurora.store.util.NetworkInterceptor; import com.aurora.store.util.Util; +import com.tonyodev.fetch2.Download; import com.tonyodev.fetch2.Fetch; import com.tonyodev.fetch2.FetchConfiguration; +import com.tonyodev.fetch2.FetchListener; import com.tonyodev.fetch2okhttp.OkHttpDownloader; +import java.util.List; + import okhttp3.OkHttpClient; public class DownloadManager { @@ -79,5 +83,19 @@ public class DownloadManager { } return builder.build(); } + + public static void updateOngoingDownloads(Fetch fetch, List packageList, Download download, + FetchListener fetchListener) { + if (packageList.contains(download.getTag())) { + final String packageName = download.getTag(); + if (packageName != null) { + fetch.deleteGroup(packageName.hashCode()); + packageList.remove(packageName); + } + } + if (packageList.size() == 0) { + fetch.removeListener(fetchListener); + } + } } diff --git a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java index db8cd2c28..02de223dd 100644 --- a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java +++ b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java @@ -56,9 +56,13 @@ import com.mikepenz.fastadapter.FastAdapter; import com.mikepenz.fastadapter.adapters.ItemAdapter; import com.mikepenz.fastadapter.diff.FastAdapterDiffUtil; import com.mikepenz.fastadapter.select.SelectExtension; +import com.tonyodev.fetch2.AbstractFetchListener; +import com.tonyodev.fetch2.Download; import com.tonyodev.fetch2.Fetch; +import com.tonyodev.fetch2.FetchListener; import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.HashSet; @@ -285,24 +289,56 @@ public class UpdatesFragment extends BaseFragment { } } + private void attachFetchCancelListener() { + boolean selectiveUpdate = selectExtension.getSelectedItems().size() > 0; + Observable.fromIterable(selectiveUpdate + ? selectedItems + : itemAdapter.getAdapterItems()) + .map(UpdatesItem::getPackageName) + .toList() + .doOnSuccess(packages -> { + final List packageList = new ArrayList<>(packages); + final FetchListener fetchListener = new AbstractFetchListener() { + @Override + public void onAdded(@NotNull Download download) { + DownloadManager.updateOngoingDownloads(fetch, packageList, download, this); + } + + @Override + public void onQueued(@NotNull Download download, boolean b) { + DownloadManager.updateOngoingDownloads(fetch, packageList, download, this); + } + + @Override + public void onProgress(@NotNull Download download, long etaInMilliSeconds, long downloadedBytesPerSecond) { + super.onProgress(download, etaInMilliSeconds, downloadedBytesPerSecond); + DownloadManager.updateOngoingDownloads(fetch, packageList, download, this); + } + }; + + fetch.addListener(fetchListener); + + //Clear ongoing update list + AuroraApplication.setOngoingUpdateList(new ArrayList<>()); + //Start BulkUpdate cancellation request + Util.stopBulkUpdate(requireContext()); + }) + .subscribe(); + } + private void updateButtonActions() { btnAction.setOnClickListener(null); + btnAction.setEnabled(true); if (AuroraApplication.isBulkUpdateAlive()) { btnAction.setText(getString(R.string.action_cancel)); - btnAction.setOnClickListener(v -> - Observable - .fromIterable(AuroraApplication.getOngoingUpdateList()) - .doOnNext(app -> { - fetch.deleteGroup(app.getPackageName().hashCode()); - }) - .doOnComplete(() -> { - AuroraApplication.setOngoingUpdateList(new ArrayList<>()); - Util.stopBulkUpdate(requireContext()); - }) - .subscribe()); + btnAction.setOnClickListener(v -> { + attachFetchCancelListener(); + btnAction.setEnabled(false); + }); } else { boolean selectiveUpdate = selectExtension.getSelectedItems().size() > 0; btnAction.setOnClickListener(v -> { + btnAction.setEnabled(false); IgnoreListManager ignoreListManager = new IgnoreListManager(requireContext()); Observable.fromIterable(selectiveUpdate ? selectedItems