Fix crash when Hide App Icon is enabled alongside dynamic shortcuts (#701)

This commit is contained in:
Zongle Wang
2026-04-10 12:17:41 +08:00
committed by GitHub
parent afd1da50b7
commit 8453bfc07d
2 changed files with 18 additions and 1 deletions

View File

@@ -2,6 +2,7 @@ package com.github.kr328.clash
import android.content.ComponentName import android.content.ComponentName
import android.content.pm.PackageManager import android.content.pm.PackageManager
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
@@ -73,5 +74,9 @@ class AppSettingsActivity : BaseActivity<AppSettingsDesign>(), Behavior {
newState, newState,
PackageManager.DONT_KILL_APP PackageManager.DONT_KILL_APP
) )
if (hide) {
// Prevent launcher activity not found.
ShortcutManagerCompat.removeAllDynamicShortcuts(this)
}
} }
} }

View File

@@ -1,8 +1,10 @@
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
@@ -43,6 +45,16 @@ class MainApplication : Application() {
} }
private fun setupShortcuts() { private fun setupShortcuts() {
val aliasState = packageManager.getComponentEnabledSetting(
ComponentName(this, mainActivityAlias)
)
if (aliasState != PackageManager.COMPONENT_ENABLED_STATE_ENABLED &&
aliasState != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
) {
ShortcutManagerCompat.removeAllDynamicShortcuts(this)
return
}
val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher) val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher)
val flags = Intent.FLAG_ACTIVITY_NEW_TASK or val flags = Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or