diff --git a/bramble-android/src/main/java/org/briarproject/bramble/api/system/AndroidWakeLockManager.java b/bramble-android/src/main/java/org/briarproject/bramble/api/system/AndroidWakeLockManager.java index ba6c3ebc3..d1e9beff4 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/api/system/AndroidWakeLockManager.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/api/system/AndroidWakeLockManager.java @@ -2,10 +2,14 @@ package org.briarproject.bramble.api.system; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import java.util.concurrent.Executor; + @NotNullByDefault public interface AndroidWakeLockManager { AndroidWakeLock createWakeLock(); void runWakefully(Runnable r); + + void executeWakefully(Runnable r, Executor executor); } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidTaskScheduler.java b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidTaskScheduler.java index c20704ef9..773fbc09e 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidTaskScheduler.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidTaskScheduler.java @@ -11,7 +11,6 @@ import android.os.SystemClock; import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.system.AlarmListener; -import org.briarproject.bramble.api.system.AndroidWakeLock; import org.briarproject.bramble.api.system.AndroidWakeLockManager; import org.briarproject.bramble.api.system.TaskScheduler; @@ -89,7 +88,8 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener { TimeUnit unit) { long now = SystemClock.elapsedRealtime(); long dueMillis = now + MILLISECONDS.convert(delay, unit); - Runnable wakeful = createWakefulTask(task, executor); + Runnable wakeful = () -> + wakeLockManager.executeWakefully(task, executor); ScheduledTask s = new ScheduledTask(wakeful, dueMillis); if (dueMillis <= now) { scheduledExecutorService.execute(s); @@ -127,21 +127,6 @@ class AndroidTaskScheduler implements TaskScheduler, Service, AlarmListener { }); } - private Runnable createWakefulTask(Runnable task, Executor executor) { - // Hold a wake lock from before we submit the task until after it runs - AndroidWakeLock wakeLock = wakeLockManager.createWakeLock(); - return () -> { - wakeLock.acquire(); - executor.execute(() -> { - try { - task.run(); - } finally { - wakeLock.release(); - } - }); - }; - } - private void runDueTasks() { long now = SystemClock.elapsedRealtime(); List due = new ArrayList<>(); diff --git a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakeLockManagerImpl.java b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakeLockManagerImpl.java index 988c8cd54..187d72ab3 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakeLockManagerImpl.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidWakeLockManagerImpl.java @@ -68,6 +68,24 @@ class AndroidWakeLockManagerImpl implements AndroidWakeLockManager { } } + @Override + public void executeWakefully(Runnable r, Executor executor) { + AndroidWakeLock wakeLock = createWakeLock(); + wakeLock.acquire(); + try { + executor.execute(() -> { + try { + r.run(); + } finally { + wakeLock.release(); + } + }); + } catch (Exception e) { + wakeLock.release(); + throw e; + } + } + private String getWakeLockTag(Context ctx) { PackageManager pm = ctx.getPackageManager(); for (PackageInfo info : pm.getInstalledPackages(0)) {