Search code examples
androidandroidxandroid-workmanager

How do I return a ListenableFuture<Result> with work manager 2.0?


It seems ListenableWorker no longer has the @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) restriction however I can't figure out or find examples on how to properly return a ListenableFuture< Result> in my overriden startWork() function.

As far as I can tell, the only option is to return a SettableFuture.create< Result>() but that still requires suppressing the "RestrictedApi" warning/error.

Anyone know a simpler way ?

Edit: This is the way to do it as far as I've gathered which makes use of CallbackToFutureAdapter.Completer

override fun startWork(): ListenableFuture<Result> {
    return CallbackToFutureAdapter.getFuture({
        it.set(ListenableWorker.Result.success())
    })

}

Solution

  • As per the Threading in ListenableWorker documentation page:

    You can create ListenableFutures one of two ways:

    1. If you use Guava, use ListeningExecutorService.
    2. Otherwise, include councurrent-futures in your gradle file and use CallbackToFutureAdapter.