Pith - kiln
kiln/app/src/main/java/com/vgmlr/kiln/KilnIconSync.kt [1.7 kb]
Modified: 18:59:26 154 026 (20 Aug 026)
3 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" }

    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
Kerf - Android 157.026
Kiln - Android 157.026
Wedge - Android 156.026
Whittle - Linux 155.026
Grit - Firefox/Chrome 154.026

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)
0.00223
256,910 (+164)