mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 18:59:06 +01:00
Pass executor to scheduler.
This commit is contained in:
@@ -9,6 +9,7 @@ import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
|
||||
import org.briarproject.bramble.api.event.EventBus;
|
||||
import org.briarproject.bramble.api.event.EventExecutor;
|
||||
import org.briarproject.bramble.api.lifecycle.Service;
|
||||
import org.briarproject.bramble.api.network.NetworkManager;
|
||||
import org.briarproject.bramble.api.network.NetworkStatus;
|
||||
@@ -17,6 +18,7 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
|
||||
import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
|
||||
import org.briarproject.bramble.api.system.TaskScheduler;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -51,6 +53,7 @@ class AndroidNetworkManager implements NetworkManager, Service {
|
||||
|
||||
private final TaskScheduler scheduler;
|
||||
private final EventBus eventBus;
|
||||
private final Executor eventExecutor;
|
||||
private final Context appContext;
|
||||
private final AtomicReference<Future<?>> connectivityCheck =
|
||||
new AtomicReference<>();
|
||||
@@ -60,9 +63,10 @@ class AndroidNetworkManager implements NetworkManager, Service {
|
||||
|
||||
@Inject
|
||||
AndroidNetworkManager(TaskScheduler scheduler, EventBus eventBus,
|
||||
Application app) {
|
||||
@EventExecutor Executor eventExecutor, Application app) {
|
||||
this.scheduler = scheduler;
|
||||
this.eventBus = eventBus;
|
||||
this.eventExecutor = eventExecutor;
|
||||
this.appContext = app.getApplicationContext();
|
||||
}
|
||||
|
||||
@@ -104,7 +108,8 @@ class AndroidNetworkManager implements NetworkManager, Service {
|
||||
|
||||
private void scheduleConnectionStatusUpdate(int delay, TimeUnit unit) {
|
||||
Future<?> newConnectivityCheck =
|
||||
scheduler.schedule(this::updateConnectionStatus, delay, unit);
|
||||
scheduler.schedule(this::updateConnectionStatus, eventExecutor,
|
||||
delay, unit);
|
||||
Future<?> oldConnectivityCheck =
|
||||
connectivityCheck.getAndSet(newConnectivityCheck);
|
||||
if (oldConnectivityCheck != null) oldConnectivityCheck.cancel(false);
|
||||
|
||||
@@ -17,6 +17,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.PriorityQueue;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.FutureTask;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
@@ -78,10 +79,11 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Future<?> schedule(Runnable task, long delay, TimeUnit unit) {
|
||||
public Future<?> schedule(Runnable task, Executor executor, long delay,
|
||||
TimeUnit unit) {
|
||||
long now = SystemClock.elapsedRealtime();
|
||||
long dueMillis = now + MILLISECONDS.convert(delay, unit);
|
||||
ScheduledTask s = new ScheduledTask(task, dueMillis);
|
||||
ScheduledTask s = new ScheduledTask(task, executor, dueMillis);
|
||||
if (dueMillis <= now) {
|
||||
scheduledExecutorService.execute(s);
|
||||
} else {
|
||||
@@ -93,13 +95,13 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Future<?> scheduleWithFixedDelay(Runnable task, long delay,
|
||||
long interval, TimeUnit unit) {
|
||||
public Future<?> scheduleWithFixedDelay(Runnable task, Executor executor,
|
||||
long delay, long interval, TimeUnit unit) {
|
||||
Runnable wrapped = () -> {
|
||||
task.run();
|
||||
scheduleWithFixedDelay(task, interval, interval, unit);
|
||||
scheduleWithFixedDelay(task, executor, interval, interval, unit);
|
||||
};
|
||||
return schedule(wrapped, delay, unit);
|
||||
return schedule(wrapped, executor, delay, unit);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,8 +177,9 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener {
|
||||
|
||||
private final long dueMillis;
|
||||
|
||||
public ScheduledTask(Runnable runnable, long dueMillis) {
|
||||
super(runnable, null);
|
||||
public ScheduledTask(Runnable runnable, Executor executor,
|
||||
long dueMillis) {
|
||||
super(() -> executor.execute(runnable), null);
|
||||
this.dueMillis = dueMillis;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,14 @@ import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.PowerManager;
|
||||
|
||||
import org.briarproject.bramble.api.event.EventExecutor;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.system.AndroidWakeLock;
|
||||
import org.briarproject.bramble.api.system.AndroidWakeLockFactory;
|
||||
import org.briarproject.bramble.api.system.TaskScheduler;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import javax.annotation.concurrent.Immutable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -38,12 +41,15 @@ class AndroidWakeLockFactoryImpl implements AndroidWakeLockFactory {
|
||||
private final SharedWakeLock sharedWakeLock;
|
||||
|
||||
@Inject
|
||||
AndroidWakeLockFactoryImpl(TaskScheduler scheduler, Application app) {
|
||||
AndroidWakeLockFactoryImpl(TaskScheduler scheduler,
|
||||
@EventExecutor Executor eventExecutor,
|
||||
Application app) {
|
||||
PowerManager powerManager = (PowerManager)
|
||||
requireNonNull(app.getSystemService(POWER_SERVICE));
|
||||
String tag = getWakeLockTag(app);
|
||||
sharedWakeLock = new RenewableWakeLock(powerManager, scheduler,
|
||||
PARTIAL_WAKE_LOCK, tag, LOCK_DURATION_MS, SAFETY_MARGIN_MS);
|
||||
eventExecutor, PARTIAL_WAKE_LOCK, tag, LOCK_DURATION_MS,
|
||||
SAFETY_MARGIN_MS);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.PowerManager.WakeLock;
|
||||
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
|
||||
import org.briarproject.bramble.api.system.TaskScheduler;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -28,6 +29,7 @@ class RenewableWakeLock implements SharedWakeLock {
|
||||
|
||||
private final PowerManager powerManager;
|
||||
private final TaskScheduler scheduler;
|
||||
private final Executor eventExecutor;
|
||||
private final int levelAndFlags;
|
||||
private final String tag;
|
||||
private final long durationMs, safetyMarginMs;
|
||||
@@ -44,11 +46,16 @@ class RenewableWakeLock implements SharedWakeLock {
|
||||
@GuardedBy("lock")
|
||||
private long acquired = 0;
|
||||
|
||||
RenewableWakeLock(PowerManager powerManager, TaskScheduler scheduler,
|
||||
int levelAndFlags, String tag, long durationMs,
|
||||
RenewableWakeLock(PowerManager powerManager,
|
||||
TaskScheduler scheduler,
|
||||
Executor eventExecutor,
|
||||
int levelAndFlags,
|
||||
String tag,
|
||||
long durationMs,
|
||||
long safetyMarginMs) {
|
||||
this.powerManager = powerManager;
|
||||
this.scheduler = scheduler;
|
||||
this.eventExecutor = eventExecutor;
|
||||
this.levelAndFlags = levelAndFlags;
|
||||
this.tag = tag;
|
||||
this.durationMs = durationMs;
|
||||
@@ -69,8 +76,8 @@ class RenewableWakeLock implements SharedWakeLock {
|
||||
// power management apps
|
||||
wakeLock.setReferenceCounted(false);
|
||||
wakeLock.acquire(durationMs + safetyMarginMs);
|
||||
future = scheduler.schedule(this::renew, durationMs,
|
||||
MILLISECONDS);
|
||||
future = scheduler.schedule(this::renew, eventExecutor,
|
||||
durationMs, MILLISECONDS);
|
||||
acquired = android.os.SystemClock.elapsedRealtime();
|
||||
}
|
||||
}
|
||||
@@ -93,7 +100,8 @@ class RenewableWakeLock implements SharedWakeLock {
|
||||
wakeLock.setReferenceCounted(false);
|
||||
wakeLock.acquire(durationMs + safetyMarginMs);
|
||||
oldWakeLock.release();
|
||||
future = scheduler.schedule(this::renew, durationMs, MILLISECONDS);
|
||||
future = scheduler.schedule(this::renew, eventExecutor,
|
||||
durationMs, MILLISECONDS);
|
||||
acquired = now;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user