Pith - kiln
kiln/app/src/main/java/com/vgmlr/kiln/KilnIconSync.kt [1.8 kb]
Modified: 20:13:54 158 026 (24 Aug 026)
5 Days Ago
package com.vgmlr.kiln

import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager

object KilnIconSync {
    private val aliases =
        (0..7).map { "com.vgmlr.kiln.IconG$it" } + "com.vgmlr.kiln.IconDefault"
    
    const val DEFAULT_BUCKET = 8

    fun iconAccount(accounts: List<KilnAccount>, defaultId: Long): KilnAccount? =
        accounts.firstOrNull { it.id == defaultId } ?: accounts.firstOrNull()

    private fun set(pm: PackageManager, pkg: String, name: String, on: Boolean) =
        pm.setComponentEnabledSetting(
            ComponentName(pkg, name),
            if (on) PackageManager.COMPONENT_ENABLED_STATE_ENABLED
            else PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP
        )

    fun apply(context: Context, bucket: Int) {
        val target = bucket.coerceIn(aliases.indices)
        val pm = context.packageManager
        val pkg = context.packageName

        val states = aliases.map { name ->
            runCatching {
                pm.getComponentEnabledSetting(ComponentName(pkg, name))
            }.getOrNull()
        }
        if (states[target] == null) return

        val settled = states.withIndex().all { (i, s) ->
            if (s == null) true
            else if (i == target) s != PackageManager.COMPONENT_ENABLED_STATE_DISABLED
            else s == PackageManager.COMPONENT_ENABLED_STATE_DISABLED
        }
        if (settled) return

        runCatching {
            set(pm, pkg, aliases[target], true)
            states.forEachIndexed { i, s ->
                if (i != target && s != null &&
                    s != PackageManager.COMPONENT_ENABLED_STATE_DISABLED
                ) {
                    set(pm, pkg, aliases[i], false)
                }
            }
        }
    }
}
Updates
Stave - Android 158.026
Kerf - Android 157.026
Kiln - Android 157.026
Wedge - Android 156.026
Whittle - Linux 155.026

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)
0.0023
260,729 (+1,143)