aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt')
-rw-r--r--app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt40
1 files changed, 40 insertions, 0 deletions
diff --git a/app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt b/app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt
new file mode 100644
index 0000000..49924bb
--- /dev/null
+++ b/app/src/main/java/moe/yuuta/workmode/suspend/Suspender.kt
@@ -0,0 +1,40 @@
+package moe.yuuta.workmode.suspend
+
+import android.content.ComponentName
+import android.content.Context
+import android.os.PersistableBundle
+import android.service.quicksettings.TileService
+import moe.yuuta.workmode.R
+import moe.yuuta.workmode.access.ApplicationAccessorStarter
+import moe.yuuta.workmode.suspend.data.SuspendedStorage
+
+/**
+ * The highest-level suspender to wrap all information needed to suspend or vice versa. This
+ * should be called from UI components directly
+ * Chain: UI -> Suspender -> AccessorStarter -> WorkModeAccessor -> AccessLayer -> Framework
+ */
+class Suspender(private val mContext: Context) {
+ fun suspend(packageNames: Array<String>, suspended: Boolean): Array<String> =
+ ApplicationAccessorStarter(mContext).setPackagesSuspended(packageNames,
+ suspended,
+ PersistableBundle(),
+ SuspendedApp.getDefault().serializeBundle(), // We use LauncherExtras because they are easy to read
+ mContext.getString(R.string.suspended_message),
+ true)
+
+ fun isSuspended(packageNames: Array<String>): Boolean =
+ ApplicationAccessorStarter(mContext).isPackageSuspended(packageNames, true)
+
+ fun getPackagesSuspendedByWorkMode(): List<String> =
+ ApplicationAccessorStarter(mContext).getPackagesSuspendedByWorkMode(true)
+
+ fun applyFromSettings() {
+ val storage = SuspendedStorage(mContext)
+ storage.cleanList(mContext)
+ val status = storage.getStatus()
+ val listMode = storage.getListMode()
+ val list = storage.getList()
+ ApplicationAccessorStarter(mContext).apply(list.toTypedArray(), listMode, status, true)
+ TileService.requestListeningState(mContext, ComponentName(mContext, SuspendTile::class.java))
+ }
+} \ No newline at end of file