aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/workmode/suspend/SuspendedApp.kt
blob: 9c6ddf7e1110fe4d082a5300061b7432b3aa1bd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package moe.yuuta.workmode.suspend

import android.os.Bundle
import android.os.PersistableBundle
import moe.yuuta.workmode.BuildConfig

/**
 * The data class of a suspended app. This is ONLY used in this app, which
 * can be understood as "a bridge between the extras stored in the system and
 * information which is used in this app"
 */
data class SuspendedApp(
        val isSuspendedByWorkMode: Boolean, // The flag which is used to determine whatever is suspended by WorkMode
        val versionCodeSuspended: Int // The version code of this app when suspended the target
) {
    companion object {
        // These values are stored by the system, should not be usually changed for migrating
        const val EXTRA_IS_SUSPENDED_BY_WORK_MODE = "moe.yuuta.workmode.EXTRA_IS_SUSPENDED_BY_WORK_MODE"
        const val EXTRA_VERSION_CODE = "moe.yuuta.workmode.EXTRA_VERSION_CODE"

        fun deserializeBundle(launcherExtras: Bundle?): SuspendedApp {
            if (launcherExtras == null) return SuspendedApp(false, -1)
            return SuspendedApp(
                    launcherExtras.getBoolean(EXTRA_IS_SUSPENDED_BY_WORK_MODE, false),
                    launcherExtras.getInt(EXTRA_VERSION_CODE, -1)
            )
        }

        fun getDefault(): SuspendedApp = SuspendedApp(true, BuildConfig.VERSION_CODE)
    }

    fun serializeBundle(): PersistableBundle {
        val bundle = PersistableBundle()
        bundle.putBoolean(EXTRA_IS_SUSPENDED_BY_WORK_MODE, isSuspendedByWorkMode)
        bundle.putInt(EXTRA_VERSION_CODE, versionCodeSuspended)
        return bundle
    }
}