From 88abee0cd5f2abd9d30143361e24da27d159f6dd Mon Sep 17 00:00:00 2001 From: Goooler Date: Wed, 6 May 2026 17:11:04 +0800 Subject: [PATCH] Improve parsing mainActivityAlias --- .../com/github/kr328/clash/AppModule.kt | 1 - .../github/kr328/clash/di/AppInfoProvider.kt | 1 - .../com/github/kr328/clash/util/Intent.kt | 19 ++++++++++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt b/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt index 76629072ef..b33f7b2766 100644 --- a/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt +++ b/app/src/main/kotlin/com/github/kr328/clash/AppModule.kt @@ -8,5 +8,4 @@ val appModule = module { single { AppInfoProviderImpl } } private object AppInfoProviderImpl : AppInfoProvider { override val mainActivityClass: Class = MainActivity::class.java - override val mainActivityAlias: String = "${MainActivity::class.qualifiedName}Alias" } diff --git a/glue/src/main/kotlin/com/github/kr328/clash/di/AppInfoProvider.kt b/glue/src/main/kotlin/com/github/kr328/clash/di/AppInfoProvider.kt index 84a3a1ef70..e5d3b814ff 100644 --- a/glue/src/main/kotlin/com/github/kr328/clash/di/AppInfoProvider.kt +++ b/glue/src/main/kotlin/com/github/kr328/clash/di/AppInfoProvider.kt @@ -6,7 +6,6 @@ import org.koin.core.component.inject interface AppInfoProvider { val mainActivityClass: Class - val mainActivityAlias: String companion object : KoinComponent { val instance: AppInfoProvider by inject() diff --git a/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt index 345582def2..bf3208f326 100644 --- a/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt +++ b/glue/src/main/kotlin/com/github/kr328/clash/util/Intent.kt @@ -3,6 +3,7 @@ package com.github.kr328.clash.util import android.content.ComponentName import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import com.github.kr328.clash.di.AppInfoProvider.Companion.instance as appInfoProvider fun mainIntent(context: Context, action: String? = null): Intent { @@ -11,4 +12,20 @@ fun mainIntent(context: Context, action: String? = null): Intent { } val Context.mainActivityAlias: ComponentName - get() = ComponentName(this, appInfoProvider.mainActivityAlias) + get() { + val mainActivityName = appInfoProvider.mainActivityClass.name + val launcherIntent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) + val resolveFlags = PackageManager.MATCH_DISABLED_COMPONENTS + + return packageManager + .queryIntentActivities(launcherIntent, resolveFlags) + .firstNotNullOfOrNull { resolveInfo -> + val activityInfo = resolveInfo.activityInfo + if (activityInfo.targetActivity == mainActivityName) { + ComponentName(activityInfo.packageName, activityInfo.name) + } else { + null + } + } + ?: error("Launcher alias targeting $mainActivityName is not declared in AndroidManifest.xml") + }