aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/workmode/suspend/data/PersistableSuspendedApp.kt
blob: ccfc008a9fe2e059ac802d33dc0c9e70627ea67a (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
39
40
41
package moe.yuuta.workmode.suspend.data

import android.os.Process
import java.util.regex.Pattern

/**
 * The data of Suspended app which can be stored in {@link SuspendedStorage} only
 */
data class PersistableSuspendedApp(
        val userId: Int,
        val packageName: String
) {
    constructor(serializedString: String) : this(parseUserIDFromSerializedString(serializedString),
            parsePackageNameFromSerializedString(serializedString))

    override fun toString(): String =
            String.format("%d|%s", userId, packageName)

    /**
     * Create a TransferableSuspendedApp with the simplest data.
     */
    fun copyToSimpleTransferableInfo(): TransferableSuspendedApp =
        TransferableSuspendedApp(userId, packageName, null, -1, null)

    companion object {
        private fun parseFromSerializedString(serializedString: String): PersistableSuspendedApp {
            val arr = serializedString.split(Pattern.compile("\\|"))
            // Legacy
            if (arr.size != 2) {
                return PersistableSuspendedApp(Process.myUserHandle().hashCode(), serializedString)
            }
            return PersistableSuspendedApp(arr[0].toInt(), arr[1])
        }

        private fun parseUserIDFromSerializedString(serializedString: String): Int =
            parseFromSerializedString(serializedString).userId

        private fun parsePackageNameFromSerializedString(serializedString: String): String =
            parseFromSerializedString(serializedString).packageName
    }
}