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, suspended: Boolean): Array = 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): Boolean = ApplicationAccessorStarter(mContext).isPackageSuspended(packageNames, true) fun getPackagesSuspendedByWorkMode(): List = 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)) } }