From 7b37c87aa306f93d76fac728217e9bebc50f29ea Mon Sep 17 00:00:00 2001 From: "Mr. Dragon" Date: Thu, 9 May 2019 20:46:53 +0530 Subject: [PATCH] DownloadManager : Improve Download Manager --- .../store/activity/DownloadsActivity.java | 2 +- .../store/adapter/DownloadsAdapter.java | 2 +- .../store/download/DownloadManager.java | 44 +++++++++---------- .../store/fragment/UpdatesFragment.java | 5 +-- .../store/fragment/details/ActionButton.java | 3 +- .../preference/DownloaderFragment.java | 3 +- .../preference/FavouriteFragment.java | 2 +- .../receiver/DownloadCancelReceiver.java | 3 +- .../store/receiver/DownloadPauseReceiver.java | 3 +- .../receiver/DownloadResumeReceiver.java | 3 +- .../aurora/store/sheet/DownloadMenuSheet.java | 2 +- .../java/com/aurora/store/utility/Util.java | 2 +- 12 files changed, 34 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/aurora/store/activity/DownloadsActivity.java b/app/src/main/java/com/aurora/store/activity/DownloadsActivity.java index d6ead95a4..02a87428e 100644 --- a/app/src/main/java/com/aurora/store/activity/DownloadsActivity.java +++ b/app/src/main/java/com/aurora/store/activity/DownloadsActivity.java @@ -108,7 +108,7 @@ public class DownloadsActivity extends AppCompatActivity { } private void init() { - fetch = new DownloadManager(this).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(this); fetch.getDownloads(downloadList -> { if (downloadList.isEmpty()) { ViewUtil.hideWithAnimation(mRecyclerView); diff --git a/app/src/main/java/com/aurora/store/adapter/DownloadsAdapter.java b/app/src/main/java/com/aurora/store/adapter/DownloadsAdapter.java index a18838d40..933422e24 100644 --- a/app/src/main/java/com/aurora/store/adapter/DownloadsAdapter.java +++ b/app/src/main/java/com/aurora/store/adapter/DownloadsAdapter.java @@ -65,7 +65,7 @@ public class DownloadsAdapter extends RecyclerView.Adapter downloadList) { this.context = context; this.downloadList = downloadList; - fetch = new DownloadManager(context).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(context); } public void refreshList() { 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 fee4c7a62..b6674793a 100644 --- a/app/src/main/java/com/aurora/store/download/DownloadManager.java +++ b/app/src/main/java/com/aurora/store/download/DownloadManager.java @@ -23,10 +23,7 @@ package com.aurora.store.download; import android.content.Context; import com.aurora.store.Constants; -import com.aurora.store.NotificationProvider; -import com.aurora.store.utility.NotificationUtil; import com.aurora.store.utility.Util; -import com.tonyodev.fetch2.DefaultFetchNotificationManager; import com.tonyodev.fetch2.Fetch; import com.tonyodev.fetch2.FetchConfiguration; import com.tonyodev.fetch2okhttp.OkHttpDownloader; @@ -37,38 +34,41 @@ import okhttp3.OkHttpClient; public class DownloadManager { - private Context context; - private Fetch fetch; + private static volatile DownloadManager instance; + private static Fetch fetch; - public DownloadManager(Context context) { - this.context = context; - init(); + public DownloadManager() { + if (instance != null) { + throw new RuntimeException("Use get() method to get the single instance of RxBus"); + } } - private void init() { + public static Fetch getFetchInstance(Context context) { + if (instance == null) { + synchronized (DownloadManager.class) { + if (instance == null) { + instance = new DownloadManager(); + fetch = getFetch(context); + } + } + } + return fetch; + } + + private static Fetch getFetch(Context context) { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(20, TimeUnit.SECONDS); builder.readTimeout(20, TimeUnit.SECONDS); builder.writeTimeout(20, TimeUnit.SECONDS); - if (Util.isNetworkProxyEnabled(context)) builder.proxy(Util.getNetworkProxy(context)); - OkHttpClient okHttpClient = builder.build(); FetchConfiguration.Builder fetchConfiguration = new FetchConfiguration.Builder(context); + fetchConfiguration.setDownloadConcurrentLimit(Util.getActiveDownloadCount(context)); fetchConfiguration.setHttpDownloader(new OkHttpDownloader(okHttpClient, Util.getDownloadStrategy(context))); fetchConfiguration.setNamespace(Constants.TAG); - if (NotificationUtil.isNotificationEnabled(context) && - NotificationUtil.getNotificationProvider(context) == NotificationProvider.NATIVE) - fetchConfiguration.setNotificationManager(new DefaultFetchNotificationManager(context)); - fetchConfiguration.setDownloadConcurrentLimit(Util.getActiveDownloadCount(context)); - fetch = Fetch.Impl.getInstance(fetchConfiguration.build()); - if (Util.isFetchDebugEnabled(context)) - fetch.enableLogging(true); - } - - public Fetch getFetchInstance() { - return fetch; + fetchConfiguration.enableLogging(Util.isFetchDebugEnabled(context)); + return Fetch.Impl.getInstance(fetchConfiguration.build()); } } diff --git a/app/src/main/java/com/aurora/store/fragment/UpdatesFragment.java b/app/src/main/java/com/aurora/store/fragment/UpdatesFragment.java index e166764a5..290f45d63 100644 --- a/app/src/main/java/com/aurora/store/fragment/UpdatesFragment.java +++ b/app/src/main/java/com/aurora/store/fragment/UpdatesFragment.java @@ -128,7 +128,7 @@ public class UpdatesFragment extends BaseFragment { @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - fetch = new DownloadManager(context).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(context); setErrorView(ErrorType.UNKNOWN); customSwipeToRefresh.setOnRefreshListener(() -> fetchData()); if (getActivity() instanceof AuroraActivity) { @@ -156,11 +156,8 @@ public class UpdatesFragment extends BaseFragment { public void onDestroy() { super.onDestroy(); disposable.clear(); - pseudoPackageAppMap = null; - updatableAppList = null; updatableAppTask = null; adapter = null; - requestList = null; } @Override diff --git a/app/src/main/java/com/aurora/store/fragment/details/ActionButton.java b/app/src/main/java/com/aurora/store/fragment/details/ActionButton.java index 9c060f2e8..12bb98a34 100644 --- a/app/src/main/java/com/aurora/store/fragment/details/ActionButton.java +++ b/app/src/main/java/com/aurora/store/fragment/details/ActionButton.java @@ -28,7 +28,6 @@ import android.content.res.Configuration; import android.os.Build; import android.text.TextUtils; import android.view.View; -import android.widget.Button; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ProgressBar; @@ -136,7 +135,7 @@ public class ActionButton extends AbstractHelper { if (app.isInstalled()) runOrUpdate(); - fetch = new DownloadManager(context).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(context); notification = new GeneralNotification(context, app); fetch.getDownloads(downloadList -> { diff --git a/app/src/main/java/com/aurora/store/fragment/preference/DownloaderFragment.java b/app/src/main/java/com/aurora/store/fragment/preference/DownloaderFragment.java index 8654fea30..7b87e3d51 100644 --- a/app/src/main/java/com/aurora/store/fragment/preference/DownloaderFragment.java +++ b/app/src/main/java/com/aurora/store/fragment/preference/DownloaderFragment.java @@ -78,7 +78,8 @@ public class DownloaderFragment extends PreferenceFragmentCompat implements Shar seekBarPreference.setMin(1); seekBarPreference.setOnPreferenceChangeListener((preference, newValue) -> { int value = (Integer) newValue; - PrefUtil.putInteger(context, Constants.PREFERENCE_DOWNLOAD_ACTIVE, value - 1); + PrefUtil.putInteger(context, Constants.PREFERENCE_DOWNLOAD_ACTIVE, value); + SettingsActivity.shouldRestart = true; return true; }); } diff --git a/app/src/main/java/com/aurora/store/fragment/preference/FavouriteFragment.java b/app/src/main/java/com/aurora/store/fragment/preference/FavouriteFragment.java index 21da4fce5..42a38dead 100644 --- a/app/src/main/java/com/aurora/store/fragment/preference/FavouriteFragment.java +++ b/app/src/main/java/com/aurora/store/fragment/preference/FavouriteFragment.java @@ -124,7 +124,7 @@ public class FavouriteFragment extends BaseFragment implements SelectableViewHol public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); manager = new FavouriteListManager(context); - fetch = new DownloadManager(context).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(context); } @Override diff --git a/app/src/main/java/com/aurora/store/receiver/DownloadCancelReceiver.java b/app/src/main/java/com/aurora/store/receiver/DownloadCancelReceiver.java index c591bf67f..102a19a93 100644 --- a/app/src/main/java/com/aurora/store/receiver/DownloadCancelReceiver.java +++ b/app/src/main/java/com/aurora/store/receiver/DownloadCancelReceiver.java @@ -36,8 +36,7 @@ public class DownloadCancelReceiver extends BroadcastReceiver { Bundle extras = intent.getExtras(); if ((extras != null)) { final int requestId = extras.getInt(REQUEST_ID, -1); - final DownloadManager mDownloadManager = new DownloadManager(context); - final Fetch fetch = mDownloadManager.getFetchInstance(); + final Fetch fetch = DownloadManager.getFetchInstance(context); fetch.cancel(requestId); } } diff --git a/app/src/main/java/com/aurora/store/receiver/DownloadPauseReceiver.java b/app/src/main/java/com/aurora/store/receiver/DownloadPauseReceiver.java index f528e0c8b..995cf2aef 100644 --- a/app/src/main/java/com/aurora/store/receiver/DownloadPauseReceiver.java +++ b/app/src/main/java/com/aurora/store/receiver/DownloadPauseReceiver.java @@ -35,8 +35,7 @@ public class DownloadPauseReceiver extends BroadcastReceiver { Bundle extras = intent.getExtras(); if ((extras != null)) { final int requestId = extras.getInt(REQUEST_ID, -1); - final DownloadManager mDownloadManager = new DownloadManager(context); - mDownloadManager.getFetchInstance().pause(requestId); + DownloadManager.getFetchInstance(context).pause(requestId); } } } diff --git a/app/src/main/java/com/aurora/store/receiver/DownloadResumeReceiver.java b/app/src/main/java/com/aurora/store/receiver/DownloadResumeReceiver.java index 95b161fdd..dcb7a8d82 100644 --- a/app/src/main/java/com/aurora/store/receiver/DownloadResumeReceiver.java +++ b/app/src/main/java/com/aurora/store/receiver/DownloadResumeReceiver.java @@ -35,8 +35,7 @@ public class DownloadResumeReceiver extends BroadcastReceiver { Bundle extras = intent.getExtras(); if ((extras != null)) { final int requestId = extras.getInt(REQUEST_ID, -1); - final DownloadManager mDownloadManager = new DownloadManager(context); - mDownloadManager.getFetchInstance().resume(requestId); + DownloadManager.getFetchInstance(context).resume(requestId); } } } diff --git a/app/src/main/java/com/aurora/store/sheet/DownloadMenuSheet.java b/app/src/main/java/com/aurora/store/sheet/DownloadMenuSheet.java index 594af00c8..01a1ebd0d 100644 --- a/app/src/main/java/com/aurora/store/sheet/DownloadMenuSheet.java +++ b/app/src/main/java/com/aurora/store/sheet/DownloadMenuSheet.java @@ -102,7 +102,7 @@ public class DownloadMenuSheet extends CustomBottomSheetDialogFragment implement @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - fetch = new DownloadManager(context).getFetchInstance(); + fetch = DownloadManager.getFetchInstance(context); downloadTitle.setText(getTitle()); menuRecyclerView.setNestedScrollingEnabled(false); menuRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false)); diff --git a/app/src/main/java/com/aurora/store/utility/Util.java b/app/src/main/java/com/aurora/store/utility/Util.java index 4aca2de5f..243b859d9 100644 --- a/app/src/main/java/com/aurora/store/utility/Util.java +++ b/app/src/main/java/com/aurora/store/utility/Util.java @@ -367,7 +367,7 @@ public class Util { public static Proxy getNetworkProxy(Context context) { String proxyHost = getPrefs(context).getString(Constants.PREFERENCE_PROXY_HOST, "127.0.0.1"); String proxyPort = getPrefs(context).getString(Constants.PREFERENCE_PROXY_PORT, "8118"); - int port = proxyPort != null ? Integer.valueOf(proxyPort) : 8118; + int port = Util.parseInt(proxyPort, 8118); return new Proxy(getProxyType(context), new InetSocketAddress(proxyHost, port)); }