summaryrefslogtreecommitdiff
path: root/java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java')
-rw-r--r--java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java251
1 files changed, 134 insertions, 117 deletions
diff --git a/java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java b/java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java
index 425608c..b518574 100644
--- a/java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java
+++ b/java/com/google/android/libraries/mobiledatadownload/downloader/offroad/dagger/downloader2/BaseFileDownloaderModule.java
@@ -18,12 +18,11 @@ package com.google.android.libraries.mobiledatadownload.downloader.offroad.dagge
import static com.google.common.util.concurrent.Futures.immediateFuture;
import android.content.Context;
-import androidx.annotation.VisibleForTesting;
+
import com.google.android.downloader.AndroidConnectivityHandler;
import com.google.android.downloader.Downloader;
import com.google.android.downloader.Downloader.StateChangeCallback;
import com.google.android.downloader.FloggerDownloaderLogger;
-import com.google.android.downloader.PlatformAndroidTrafficStatsTagger;
import com.google.android.downloader.PlatformUrlEngine;
import com.google.android.downloader.UrlEngine;
import com.google.android.libraries.mobiledatadownload.Flags;
@@ -41,14 +40,17 @@ import com.google.android.libraries.mobiledatadownload.monitor.DownloadProgressM
import com.google.common.base.Optional;
import com.google.common.base.Supplier;
import com.google.common.util.concurrent.ListeningExecutorService;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+import javax.annotation.Nullable;
+import javax.inject.Singleton;
+
import dagger.Lazy;
import dagger.Module;
import dagger.Provides;
import dagger.multibindings.IntoMap;
import dagger.multibindings.StringKey;
-import java.util.concurrent.ScheduledExecutorService;
-import javax.annotation.Nullable;
-import javax.inject.Singleton;
/**
* Dagger module for providing FileDownloader that uses Android Downloader2.
@@ -58,121 +60,136 @@ import javax.inject.Singleton;
* module assumes is available to bind into.
*/
@Module(
- includes = {
- BaseOffroadFileDownloaderModule.class,
- BaseFileDownloaderDepsModule.class,
- })
-@VisibleForTesting
+ includes = {
+ BaseOffroadFileDownloaderModule.class,
+ BaseFileDownloaderDepsModule.class,
+ })
public abstract class BaseFileDownloaderModule {
- @Provides
- @Singleton
- @IntoMap
- @StringKey("https")
- static Supplier<FileDownloader> provideFileDownloader(
- Context context,
- @MddDownloadExecutor ScheduledExecutorService downloadExecutor,
- @MddControlExecutor ListeningExecutorService controlExecutor,
- SynchronousFileStorage fileStorage,
- DownloadMetadataStore downloadMetadataStore,
- Optional<DownloadProgressMonitor> downloadProgressMonitor,
- Optional<Lazy<UrlEngine>> urlEngineOptional,
- Optional<Lazy<ExceptionHandler>> exceptionHandlerOptional,
- Optional<Lazy<OAuthTokenProvider>> authTokenProviderOptional,
- @SocketTrafficTag Optional<Integer> trafficTag,
- Flags flags) {
- return () ->
- createOffroad2FileDownloader(
- context,
- downloadExecutor,
- controlExecutor,
- fileStorage,
- downloadMetadataStore,
- downloadProgressMonitor,
- urlEngineOptional,
- exceptionHandlerOptional,
- authTokenProviderOptional,
- trafficTag,
- flags);
- }
-
- @VisibleForTesting
- public static Offroad2FileDownloader createOffroad2FileDownloader(
- Context context,
- ScheduledExecutorService downloadExecutor,
- ListeningExecutorService controlExecutor,
- SynchronousFileStorage fileStorage,
- DownloadMetadataStore downloadMetadataStore,
- Optional<DownloadProgressMonitor> downloadProgressMonitor,
- Optional<Lazy<UrlEngine>> urlEngineOptional,
- Optional<Lazy<ExceptionHandler>> exceptionHandlerOptional,
- Optional<Lazy<OAuthTokenProvider>> authTokenProviderOptional,
- Optional<Integer> trafficTag,
- Flags flags) {
- @Nullable
- com.google.android.downloader.OAuthTokenProvider authTokenProvider =
- authTokenProviderOptional.isPresent()
- ? convertToDownloaderAuthTokenProvider(authTokenProviderOptional.get().get())
- : null;
-
- ExceptionHandler handler =
- exceptionHandlerOptional.transform(Lazy::get).or(ExceptionHandler.withDefaultHandling());
-
- UrlEngine urlEngine;
- if (urlEngineOptional.isPresent()) {
- urlEngine = urlEngineOptional.get().get();
- } else {
- // Use {@link PlatformUrlEngine} if one was not provided.
- urlEngine =
- new PlatformUrlEngine(
- controlExecutor,
- /* connectTimeoutMs = */ flags.timeToWaitForDownloader(),
- /* readTimeoutMs = */ flags.timeToWaitForDownloader(),
- new PlatformAndroidTrafficStatsTagger());
+ @Provides
+ @Singleton
+ @IntoMap
+ @StringKey("https")
+ static Supplier<FileDownloader> provideFileDownloader(
+ Context context,
+ @MddDownloadExecutor ScheduledExecutorService downloadExecutor,
+ @MddControlExecutor ListeningExecutorService controlExecutor,
+ SynchronousFileStorage fileStorage,
+ DownloadMetadataStore downloadMetadataStore,
+ Optional<DownloadProgressMonitor> downloadProgressMonitor,
+ Optional<Lazy<UrlEngine>> urlEngineOptional,
+ Optional<Lazy<ExceptionHandler>> exceptionHandlerOptional,
+ Optional<Lazy<OAuthTokenProvider>> authTokenProviderOptional,
+// Optional<Supplier<CookieJar>> cookieJarSupplierOptional,
+ @SocketTrafficTag Optional<Integer> trafficTag,
+ Flags flags) {
+ return () ->
+ createOffroad2FileDownloader(
+ context,
+ downloadExecutor,
+ controlExecutor,
+ fileStorage,
+ downloadMetadataStore,
+ downloadProgressMonitor,
+ urlEngineOptional,
+ exceptionHandlerOptional,
+ authTokenProviderOptional,
+// cookieJarSupplierOptional,
+ trafficTag,
+ flags);
}
- AndroidConnectivityHandler connectivityHandler =
- new AndroidConnectivityHandler(
- context, downloadExecutor, /* timeoutMillis = */ flags.timeToWaitForDownloader());
-
- FloggerDownloaderLogger logger = new FloggerDownloaderLogger();
-
- Downloader downloader =
- new Downloader.Builder()
- .withIOExecutor(controlExecutor)
- .withConnectivityHandler(connectivityHandler)
- .withMaxConcurrentDownloads(flags.downloaderMaxThreads())
- .withLogger(logger)
- .addUrlEngine("https", urlEngine)
- .build();
-
- if (downloadProgressMonitor.isPresent()) {
- // Wire up downloader's state changes to DownloadProgressMonitor to handle connectivity
- // pauses.
- StateChangeCallback callback =
- state -> {
- if (state.getNumDownloadsPendingConnectivity() > 0
- && state.getNumDownloadsInFlight() == 0) {
- // Handle network connectivity pauses
- downloadProgressMonitor.get().pausedForConnectivity();
- }
- };
- downloader.registerStateChangeCallback(callback, controlExecutor);
+ /**
+ * Manual provider of Offroad2FileDownloader.
+ *
+ * <p>NOTE: This method should only be used when manually wiring up dependencies, such as when
+ * dagger/hilt are not available. If using dagger/hilt, this method is not needed. By
+ * registering
+ * this module in the dagger graph, the above @Provides method will automatically provide this
+ * dependency.
+ */
+ public static Offroad2FileDownloader createOffroad2FileDownloader(
+ Context context,
+ ScheduledExecutorService downloadExecutor,
+ ListeningExecutorService controlExecutor,
+ SynchronousFileStorage fileStorage,
+ DownloadMetadataStore downloadMetadataStore,
+ Optional<DownloadProgressMonitor> downloadProgressMonitor,
+ Optional<Lazy<UrlEngine>> urlEngineOptional,
+ Optional<Lazy<ExceptionHandler>> exceptionHandlerOptional,
+ Optional<Lazy<OAuthTokenProvider>> authTokenProviderOptional,
+// Optional<Supplier<CookieJar>> cookieJarSupplierOptional,
+ Optional<Integer> trafficTag,
+ Flags flags) {
+ @Nullable
+ com.google.android.downloader.OAuthTokenProvider authTokenProvider =
+ authTokenProviderOptional.isPresent()
+ ? convertToDownloaderAuthTokenProvider(
+ authTokenProviderOptional.get().get())
+ : null;
+
+ ExceptionHandler handler =
+ exceptionHandlerOptional.transform(Lazy::get).or(
+ ExceptionHandler.withDefaultHandling());
+
+ UrlEngine urlEngine;
+ if (urlEngineOptional.isPresent()) {
+ urlEngine = urlEngineOptional.get().get();
+ } else {
+ // Use {@link PlatformUrlEngine} if one was not provided.
+ urlEngine =
+ new PlatformUrlEngine(
+ controlExecutor,
+ /* connectTimeoutMs = */ flags.timeToWaitForDownloader(),
+ /* readTimeoutMs = */ flags.timeToWaitForDownloader()
+ );
+ }
+
+ AndroidConnectivityHandler connectivityHandler =
+ new AndroidConnectivityHandler(
+ context, downloadExecutor, /* timeoutMillis= */
+ flags.timeToWaitForDownloader());
+
+ FloggerDownloaderLogger logger = new FloggerDownloaderLogger();
+
+ Downloader downloader =
+ new Downloader.Builder()
+ .withIOExecutor(controlExecutor)
+ .withConnectivityHandler(connectivityHandler)
+ .withMaxConcurrentDownloads(flags.downloaderMaxThreads())
+ .withLogger(logger)
+ .addUrlEngine("https", urlEngine)
+ .build();
+
+ if (downloadProgressMonitor.isPresent()) {
+ // Wire up downloader's state changes to DownloadProgressMonitor to handle connectivity
+ // pauses.
+ StateChangeCallback callback =
+ state -> {
+ if (state.getNumDownloadsPendingConnectivity() > 0
+ && state.getNumDownloadsInFlight() == 0) {
+ // Handle network connectivity pauses
+ downloadProgressMonitor.get().pausedForConnectivity();
+ }
+ };
+ downloader.registerStateChangeCallback(callback, controlExecutor);
+ }
+
+ return new Offroad2FileDownloader(
+ downloader,
+ fileStorage,
+ downloadExecutor,
+ authTokenProvider,
+ downloadMetadataStore,
+ handler,
+// cookieJarSupplierOptional,
+ trafficTag);
}
- return new Offroad2FileDownloader(
- downloader,
- fileStorage,
- downloadExecutor,
- authTokenProvider,
- downloadMetadataStore,
- handler,
- trafficTag);
- }
-
- private static com.google.android.downloader.OAuthTokenProvider
- convertToDownloaderAuthTokenProvider(OAuthTokenProvider authTokenProvider) {
- return uri -> immediateFuture(authTokenProvider.provideOAuthToken(uri.toString()));
- }
-
- private BaseFileDownloaderModule() {}
+ private static com.google.android.downloader.OAuthTokenProvider
+ convertToDownloaderAuthTokenProvider(OAuthTokenProvider authTokenProvider) {
+ return uri -> immediateFuture(authTokenProvider.provideOAuthToken(uri.toString()));
+ }
+
+ private BaseFileDownloaderModule() {
+ }
}