Derive states from MainActivity alias enabled (#703)

This commit is contained in:
Zongle Wang
2026-04-10 16:41:17 +08:00
committed by GitHub
parent 8453bfc07d
commit 37b8ba6d5c
4 changed files with 17 additions and 12 deletions

View File

@@ -6,6 +6,7 @@ import androidx.core.content.pm.ShortcutManagerCompat
import com.github.kr328.clash.common.util.componentName import com.github.kr328.clash.common.util.componentName
import com.github.kr328.clash.design.AppSettingsDesign import com.github.kr328.clash.design.AppSettingsDesign
import com.github.kr328.clash.design.model.Behavior import com.github.kr328.clash.design.model.Behavior
import com.github.kr328.clash.design.store.UiStore.Companion.mainActivityAlias
import com.github.kr328.clash.service.store.ServiceStore import com.github.kr328.clash.service.store.ServiceStore
import com.github.kr328.clash.util.ApplicationObserver import com.github.kr328.clash.util.ApplicationObserver
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
@@ -70,7 +71,7 @@ class AppSettingsActivity : BaseActivity<AppSettingsDesign>(), Behavior {
PackageManager.COMPONENT_ENABLED_STATE_ENABLED PackageManager.COMPONENT_ENABLED_STATE_ENABLED
} }
packageManager.setComponentEnabledSetting( packageManager.setComponentEnabledSetting(
ComponentName(this, mainActivityAlias), mainActivityAlias,
newState, newState,
PackageManager.DONT_KILL_APP PackageManager.DONT_KILL_APP
) )

View File

@@ -159,5 +159,3 @@ class MainActivity : BaseActivity<MainDesign>() {
} }
} }
} }
val mainActivityAlias = "${MainActivity::class.java.name}Alias"

View File

@@ -1,10 +1,8 @@
package com.github.kr328.clash package com.github.kr328.clash
import android.app.Application import android.app.Application
import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutInfoCompat
import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
@@ -12,6 +10,7 @@ import com.github.kr328.clash.common.Global
import com.github.kr328.clash.common.compat.currentProcessName import com.github.kr328.clash.common.compat.currentProcessName
import com.github.kr328.clash.common.constants.Intents import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.design.store.UiStore
import com.github.kr328.clash.remote.Remote import com.github.kr328.clash.remote.Remote
import com.github.kr328.clash.service.util.sendServiceRecreated import com.github.kr328.clash.service.util.sendServiceRecreated
import com.github.kr328.clash.util.clashDir import com.github.kr328.clash.util.clashDir
@@ -22,6 +21,8 @@ import com.github.kr328.clash.design.R as DesignR
@Suppress("unused") @Suppress("unused")
class MainApplication : Application() { class MainApplication : Application() {
private val uiStore by lazy(LazyThreadSafetyMode.NONE) { UiStore(this) }
override fun attachBaseContext(base: Context?) { override fun attachBaseContext(base: Context?) {
super.attachBaseContext(base) super.attachBaseContext(base)
@@ -45,12 +46,8 @@ class MainApplication : Application() {
} }
private fun setupShortcuts() { private fun setupShortcuts() {
val aliasState = packageManager.getComponentEnabledSetting( if (uiStore.hideAppIcon) {
ComponentName(this, mainActivityAlias) // Prevent launcher activity not found.
)
if (aliasState != PackageManager.COMPONENT_ENABLED_STATE_ENABLED &&
aliasState != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
) {
ShortcutManagerCompat.removeAllDynamicShortcuts(this) ShortcutManagerCompat.removeAllDynamicShortcuts(this)
return return
} }

View File

@@ -1,6 +1,8 @@
package com.github.kr328.clash.design.store package com.github.kr328.clash.design.store
import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.pm.PackageManager
import com.github.kr328.clash.common.store.Store import com.github.kr328.clash.common.store.Store
import com.github.kr328.clash.common.store.asStoreProvider import com.github.kr328.clash.common.store.asStoreProvider
import com.github.kr328.clash.core.model.ProxySort import com.github.kr328.clash.core.model.ProxySort
@@ -27,7 +29,11 @@ class UiStore(context: Context) {
var hideAppIcon: Boolean by store.boolean( var hideAppIcon: Boolean by store.boolean(
key = "hide_app_icon", key = "hide_app_icon",
defaultValue = false defaultValue = context.packageManager.getComponentEnabledSetting(context.mainActivityAlias)
.let { state ->
state != PackageManager.COMPONENT_ENABLED_STATE_ENABLED &&
state != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
},
) )
var hideFromRecents: Boolean by store.boolean( var hideFromRecents: Boolean by store.boolean(
@@ -74,5 +80,8 @@ class UiStore(context: Context) {
companion object { companion object {
private const val PREFERENCE_NAME = "ui" private const val PREFERENCE_NAME = "ui"
val Context.mainActivityAlias: ComponentName
get() = ComponentName(this, "com.github.kr328.clash.MainActivityAlias")
} }
} }