109 lines
3.7 KiB
Kotlin
109 lines
3.7 KiB
Kotlin
package io.legato.kazusa.help
|
|
|
|
import android.content.ComponentName
|
|
import android.content.pm.PackageManager
|
|
import io.legato.kazusa.R
|
|
import io.legato.kazusa.utils.toastOnUi
|
|
import splitties.init.appCtx
|
|
|
|
/**
|
|
* Created by GKF on 2018/2/27.
|
|
* 更换图标
|
|
*/
|
|
object LauncherIconHelp {
|
|
private val packageManager: PackageManager = appCtx.packageManager
|
|
private val componentNames = arrayListOf(
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher0"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher1"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher2"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher3"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher4"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher5"),
|
|
ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher6")
|
|
)
|
|
|
|
// 主Activity的ComponentName
|
|
private val mainActivity = ComponentName(
|
|
appCtx.packageName,
|
|
"${appCtx.packageName}.ui.main.MainActivity"
|
|
)
|
|
|
|
fun changeIcon(icon: String?) {
|
|
if (icon.isNullOrEmpty()) return
|
|
|
|
try {
|
|
// 首先禁用主Activity的启动器intent
|
|
disableMainActivityLauncher()
|
|
|
|
// 然后处理所有别名
|
|
var matched = false
|
|
componentNames.forEach {
|
|
val aliasName = it.className.substringAfterLast(".")
|
|
if (icon.equals(aliasName, ignoreCase = true)) {
|
|
matched = true
|
|
packageManager.setComponentEnabledSetting(
|
|
it,
|
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
|
PackageManager.DONT_KILL_APP
|
|
)
|
|
} else {
|
|
packageManager.setComponentEnabledSetting(
|
|
it,
|
|
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
|
PackageManager.DONT_KILL_APP
|
|
)
|
|
}
|
|
}
|
|
|
|
if (!matched) {
|
|
enableMainActivityLauncher()
|
|
}
|
|
|
|
// 通知用户图标已更改
|
|
appCtx.toastOnUi(R.string.change_icon_success)
|
|
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
appCtx.toastOnUi(R.string.change_icon_error)
|
|
}
|
|
}
|
|
|
|
// 禁用主Activity的启动器功能
|
|
private fun disableMainActivityLauncher() {
|
|
try {
|
|
// 获取当前组件状态
|
|
val state = packageManager.getComponentEnabledSetting(mainActivity)
|
|
|
|
// 如果已经禁用,不需要再次操作
|
|
if (state != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
|
|
packageManager.setComponentEnabledSetting(
|
|
mainActivity,
|
|
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
|
|
PackageManager.DONT_KILL_APP
|
|
)
|
|
}
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
|
|
// 启用主Activity的启动器功能
|
|
private fun enableMainActivityLauncher() {
|
|
try {
|
|
// 获取当前组件状态
|
|
val state = packageManager.getComponentEnabledSetting(mainActivity)
|
|
|
|
// 如果已经启用,不需要再次操作
|
|
if (state != PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
|
|
packageManager.setComponentEnabledSetting(
|
|
mainActivity,
|
|
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
|
|
PackageManager.DONT_KILL_APP
|
|
)
|
|
}
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
}
|
|
}
|
|
}
|