mirror of
https://github.com/MetaCubeX/ClashMetaForAndroid.git
synced 2026-05-09 18:11:26 +08:00
Derive states from MainActivity alias enabled (#703)
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -159,5 +159,3 @@ class MainActivity : BaseActivity<MainDesign>() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val mainActivityAlias = "${MainActivity::class.java.name}Alias"
|
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user