Skip to content

Commit 87b7124

Browse files
CopilotGoooler
authored andcommitted
Fix crash when Hide App Icon is enabled alongside dynamic shortcuts
Fixes ```FATAL EXCEPTION: main Process: com.github.metacubex.clash.meta, PID: 11066 java.lang.RuntimeException: Unable to create application com.github.kr328.clash.MainApplication at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8144) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2690) at android.os.Handler.dispatchMessage(Handler.java:132) at android.os.Looper.dispatchMessage(Looper.java:333) at android.os.Looper.loopOnce(Looper.java:263) at android.os.Looper.loop(Looper.java:367) at android.app.ActivityThread.main(ActivityThread.java:9287) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929) Caused by: java.lang.IllegalStateException: Launcher activity not found for package com.github.metacubex.clash.meta at android.os.Parcel.createExceptionOrNull(Parcel.java:3381) at android.os.Parcel.createException(Parcel.java:3357) at android.os.Parcel.readException(Parcel.java:3340) at android.os.Parcel.readException(Parcel.java:3282) at android.content.pm.IShortcutService$Stub$Proxy.setDynamicShortcuts(IShortcutService.java:599) at android.content.pm.ShortcutManager.setDynamicShortcuts(ShortcutManager.java:152) at androidx.core.content.pm.ShortcutManagerCompat.setDynamicShortcuts(ShortcutManagerCompat.java:473) at com.github.kr328.clash.MainApplication.setupShortcuts(MainApplication.kt:87) at com.github.kr328.clash.MainApplication.onCreate(MainApplication.kt:39) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1396) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:8139) ... 10 more ```
1 parent afd1da5 commit 87b7124

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

app/src/main/java/com/github/kr328/clash/AppSettingsActivity.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.github.kr328.clash
22

33
import android.content.ComponentName
44
import android.content.pm.PackageManager
5+
import androidx.core.content.pm.ShortcutManagerCompat
56
import com.github.kr328.clash.common.util.componentName
67
import com.github.kr328.clash.design.AppSettingsDesign
78
import com.github.kr328.clash.design.model.Behavior
@@ -73,5 +74,9 @@ class AppSettingsActivity : BaseActivity<AppSettingsDesign>(), Behavior {
7374
newState,
7475
PackageManager.DONT_KILL_APP
7576
)
77+
if (hide) {
78+
// Prevent launcher activity not found.
79+
ShortcutManagerCompat.removeAllDynamicShortcuts(this)
80+
}
7681
}
77-
}
82+
}

app/src/main/java/com/github/kr328/clash/MainApplication.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.github.kr328.clash
22

33
import android.app.Application
4+
import android.content.ComponentName
45
import android.content.Context
56
import android.content.Intent
7+
import android.content.pm.PackageManager
68
import androidx.core.content.pm.ShortcutInfoCompat
79
import androidx.core.content.pm.ShortcutManagerCompat
810
import androidx.core.graphics.drawable.IconCompat
@@ -43,6 +45,16 @@ class MainApplication : Application() {
4345
}
4446

4547
private fun setupShortcuts() {
48+
val aliasState = packageManager.getComponentEnabledSetting(
49+
ComponentName(this, mainActivityAlias)
50+
)
51+
if (aliasState != PackageManager.COMPONENT_ENABLED_STATE_ENABLED &&
52+
aliasState != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
53+
) {
54+
ShortcutManagerCompat.removeAllDynamicShortcuts(this)
55+
return
56+
}
57+
4658
val icon = IconCompat.createWithResource(this, R.mipmap.ic_launcher)
4759
val flags = Intent.FLAG_ACTIVITY_NEW_TASK or
4860
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS or

0 commit comments

Comments
 (0)