diff options
Diffstat (limited to 'app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt')
-rw-r--r-- | app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt | 60 |
1 files changed, 42 insertions, 18 deletions
diff --git a/app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt b/app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt index 8cb4947..676d0ed 100644 --- a/app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt +++ b/app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt @@ -1,27 +1,51 @@ package moe.yuuta.workmode.suspend import android.content.Context -import moe.yuuta.workmode.async.Async -import moe.yuuta.workmode.async.Callback -import moe.yuuta.workmode.async.Runnable -import moe.yuuta.workmode.async.Stoppable +import android.os.Bundle +import moe.yuuta.workmode.access.AccessorStarter +import moe.yuuta.workmode.access.DumpResult +import moe.yuuta.workmode.suspend.data.TransferableSuspendedApp +import java.util.concurrent.CompletableFuture +import java.util.function.Function +import java.util.function.Supplier /** * An async suspender which wraps suspend tasks and run them in the background */ class AsyncSuspender(private val mContext: Context) { - fun suspend(packageNames: Array<String>, suspended: Boolean, callback: Callback<Array<String>>): Stoppable = - Async.beginTask(object : Runnable<Array<String>> { - override fun run(): Array<String> = Suspender(mContext).suspend(packageNames, suspended) - }, callback) - - fun isSuspended(packageNames: Array<String>, callback: Callback<Boolean>): Stoppable = - Async.beginTask(object : Runnable<Boolean> { - override fun run(): Boolean = Suspender(mContext).isSuspended(packageNames) - }, callback) - - fun applyFromSettings(callback: Callback<Unit>): Stoppable = - Async.beginTask(object : Runnable<Unit> { - override fun run(): Unit = Suspender(mContext).applyFromSettings() - }, callback) + fun isSuspended(packages: List<TransferableSuspendedApp>): CompletableFuture<Boolean> = generalCall(Function { + return@Function it.isPackageSuspended(packages) + }) + + fun suspend(packages: List<TransferableSuspendedApp>, suspended: Boolean): CompletableFuture<Array<String>> = generalCall( + Function { + return@Function it.suspend(packages, suspended) + }) + + fun getInstalledApplicationsAcrossUser(flags: Int): CompletableFuture<List<TransferableSuspendedApp>> = generalCall( + Function { + return@Function it.getInstalledApplicationsAcrossUser(flags) + }) + + private fun <T> generalCall(thenApply: java.util.function.Function<AccessorStarter, T>): CompletableFuture<T> { + return CompletableFuture.supplyAsync(Supplier { + return@Supplier AccessorStarter.start(mContext, true, thenApply) + }) + } + + fun applyFromSettings(): CompletableFuture<Unit> = generalCall(Function { t -> t.apply() }) + + fun getSuspendedPackageAppExtras(packageInfo: TransferableSuspendedApp): CompletableFuture<Bundle?> = generalCall(Function { + return@Function it.getSuspendedPackageAppExtras(packageInfo) + }) + + fun getSuspendedPackageLauncherExtras(packageInfo: TransferableSuspendedApp): CompletableFuture<Bundle?> = generalCall(Function { + return@Function it.getSuspendedPackageLauncherExtras(packageInfo) + }) + + fun dump(packageInfo: TransferableSuspendedApp): CompletableFuture<DumpResult> = generalCall(Function { + return@Function it.dump(packageInfo) + }) + + private data class DataWrapper<T>(val accessorStarter: AccessorStarter?, val data: T?) }
\ No newline at end of file |