aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/workmode/suspend/AsyncSuspender.kt
diff options
context:
space:
mode:
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.kt60
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