diff --git a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java index e0087bed5..917926ed2 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/BrambleAndroidModule.java @@ -7,6 +7,7 @@ import org.briarproject.bramble.reporting.ReportingModule; import org.briarproject.bramble.socks.SocksModule; import org.briarproject.bramble.system.AndroidSystemModule; import org.briarproject.bramble.system.AndroidTaskSchedulerModule; +import org.briarproject.bramble.system.AndroidWakefulIoExecutorModule; import dagger.Module; @@ -15,6 +16,7 @@ import dagger.Module; AndroidNetworkModule.class, AndroidSystemModule.class, AndroidTaskSchedulerModule.class, + AndroidWakefulIoExecutorModule.class, CircumventionModule.class, ReportingModule.class, SocksModule.class diff --git a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakefulIoExecutorModule.java b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakefulIoExecutorModule.java new file mode 100644 index 000000000..994b50483 --- /dev/null +++ b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakefulIoExecutorModule.java @@ -0,0 +1,23 @@ +package org.briarproject.bramble.system; + +import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.system.AndroidWakeLockManager; +import org.briarproject.bramble.api.system.WakefulIoExecutor; + +import java.util.concurrent.Executor; + +import dagger.Module; +import dagger.Provides; + +@Module +public +class AndroidWakefulIoExecutorModule { + + @Provides + @WakefulIoExecutor + Executor provideWakefulIoExecutor(@IoExecutor Executor ioExecutor, + AndroidWakeLockManager wakeLockManager) { + return r -> wakeLockManager.executeWakefully(r, ioExecutor, + "WakefulIoExecutor"); + } +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/system/WakefulIoExecutor.java b/bramble-api/src/main/java/org/briarproject/bramble/api/system/WakefulIoExecutor.java new file mode 100644 index 000000000..517833807 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/system/WakefulIoExecutor.java @@ -0,0 +1,26 @@ +package org.briarproject.bramble.api.system; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.inject.Qualifier; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Annotation for injecting the executor for long-running IO tasks that should + * run without sleeping. Also used for annotating methods that should run on + * this executor. + *

+ * The contract of this executor is that tasks may be run concurrently, and + * submitting a task will never block. Tasks must not run indefinitely. Tasks + * submitted during shutdown are discarded. + */ +@Qualifier +@Target({FIELD, METHOD, PARAMETER}) +@Retention(RUNTIME) +public @interface WakefulIoExecutor { +} \ No newline at end of file diff --git a/bramble-core/src/main/java/org/briarproject/bramble/system/DefaultWakefulIoExecutorModule.java b/bramble-core/src/main/java/org/briarproject/bramble/system/DefaultWakefulIoExecutorModule.java new file mode 100644 index 000000000..5f78b2d88 --- /dev/null +++ b/bramble-core/src/main/java/org/briarproject/bramble/system/DefaultWakefulIoExecutorModule.java @@ -0,0 +1,23 @@ +package org.briarproject.bramble.system; + +import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.system.WakefulIoExecutor; + +import java.util.concurrent.Executor; + +import dagger.Module; +import dagger.Provides; + +/** + * Provides a default implementation of {@link WakefulIoExecutor} for systems + * without wake locks. + */ +@Module +public class DefaultWakefulIoExecutorModule { + + @Provides + @WakefulIoExecutor + Executor provideWakefulIoExecutor(@IoExecutor Executor ioExecutor) { + return ioExecutor; + } +} diff --git a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt index 2baf75b9f..78ed5c5e6 100644 --- a/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt +++ b/briar-headless/src/main/java/org/briarproject/briar/headless/HeadlessModule.kt @@ -26,6 +26,7 @@ import org.briarproject.bramble.plugin.tor.CircumventionProvider import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory import org.briarproject.bramble.socks.SocksModule import org.briarproject.bramble.system.DefaultTaskSchedulerModule +import org.briarproject.bramble.system.DefaultWakefulIoExecutorModule import org.briarproject.bramble.system.DesktopSecureRandomModule import org.briarproject.bramble.system.JavaSystemModule import org.briarproject.bramble.util.OsUtils.isLinux @@ -48,6 +49,7 @@ import javax.net.SocketFactory DefaultBatteryManagerModule::class, DefaultEventExecutorModule::class, DefaultTaskSchedulerModule::class, + DefaultWakefulIoExecutorModule::class, DesktopSecureRandomModule::class, HeadlessBlogModule::class, HeadlessContactModule::class, diff --git a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt index ffb163fc0..24c3e07a0 100644 --- a/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt +++ b/briar-headless/src/test/java/org/briarproject/briar/headless/HeadlessTestModule.kt @@ -15,6 +15,7 @@ import org.briarproject.bramble.network.JavaNetworkModule import org.briarproject.bramble.plugin.tor.CircumventionModule import org.briarproject.bramble.socks.SocksModule import org.briarproject.bramble.system.DefaultTaskSchedulerModule +import org.briarproject.bramble.system.DefaultWakefulIoExecutorModule import org.briarproject.bramble.system.JavaSystemModule import org.briarproject.bramble.test.TestSecureRandomModule import org.briarproject.briar.headless.blogs.HeadlessBlogModule @@ -34,6 +35,7 @@ import javax.inject.Singleton CircumventionModule::class, DefaultEventExecutorModule::class, DefaultTaskSchedulerModule::class, + DefaultWakefulIoExecutorModule::class, SocksModule::class, TestSecureRandomModule::class, HeadlessBlogModule::class,