From aacb21e280d6cf33fba52ce168ba3e9417530630 Mon Sep 17 00:00:00 2001 From: Kesha Antonov Date: Mon, 17 Jul 2023 12:51:23 +0300 Subject: [PATCH] android: allow pass downloader type --- README.md | 13 +++++++++++++ .../com/eko/RNBackgroundDownloaderModule.java | 16 +++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9dac60c..926c7b0 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,19 @@ An object containing options properties | ------------- | ------------------------------------------------ | :------: | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `type` | String | | Android | Downloader type: 'parallel' or 'sequential'. Default: 'sequential'. 'parallel' seems to cause lots of ANRs, so be careful | +**Usage** + +```javascript +import { initDownloader } from '@kesha-antonov/react-native-background-downloader' + +... +// SOMEWHERE AT APP STARTUP + +useEffect(() => { + initDownloader({ type: 'parallel' }) +}, []) +``` + ## Constants ### directories diff --git a/android/src/main/java/com/eko/RNBackgroundDownloaderModule.java b/android/src/main/java/com/eko/RNBackgroundDownloaderModule.java index b2dd0bf..98fcc48 100644 --- a/android/src/main/java/com/eko/RNBackgroundDownloaderModule.java +++ b/android/src/main/java/com/eko/RNBackgroundDownloaderModule.java @@ -8,6 +8,7 @@ import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; +import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.WritableArray; @@ -84,10 +85,11 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule imp private HashMap progressReports = new HashMap<>(); private static Object sharedLock = new Object(); - public RNBackgroundDownloaderModule(ReactApplicationContext reactContext, ReadableMap options) { + public RNBackgroundDownloaderModule(ReactApplicationContext reactContext) { super(reactContext); - this.initDownloader(); + ReadableMap emptyMap = Arguments.createMap(); + this.initDownloader(emptyMap); } @Override @@ -140,30 +142,30 @@ public class RNBackgroundDownloaderModule extends ReactContextBaseJavaModule imp constants.put("PriorityLow", Priority.LOW.getValue()); constants.put("OnlyWifi", NetworkType.WIFI_ONLY.getValue()); constants.put("AllNetworks", NetworkType.ALL.getValue()); - return constants; + return constants; } @ReactMethod public void initDownloader(ReadableMap options) { - if (fetch) { + if (fetch != null) { fetch.close(); fetch = null; } - Downloader downloader = options.getString("androidDownloaderType") == "parallel" + Downloader.FileDownloaderType downloaderType = options.getString("type") == "parallel" ? Downloader.FileDownloaderType.PARALLEL : Downloader.FileDownloaderType.SEQUENTIAL; OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); final Downloader okHttpDownloader = new OkHttpDownloader(okHttpClient, - downloader); + downloaderType); loadConfigMap(); FetchConfiguration fetchConfiguration = new FetchConfiguration.Builder(this.getReactApplicationContext()) .setDownloadConcurrentLimit(4) .setHttpDownloader(okHttpDownloader) .enableRetryOnNetworkGain(true) - .setHttpDownloader(new HttpUrlConnectionDownloader(downloader)) + .setHttpDownloader(new HttpUrlConnectionDownloader(downloaderType)) .build(); fetch = Fetch.Impl.getInstance(fetchConfiguration); fetch.addListener(this);