From a6c72f100af69d2886178e58253c6717294e6240 Mon Sep 17 00:00:00 2001 From: Josia Pietsch Date: Wed, 25 Sep 2024 21:33:50 +0200 Subject: [PATCH] fix: store activityName in AppInfo to support apps with multiple main activities --- .../java/de/jrpie/android/launcher/Functions.kt | 13 +++---------- .../de/jrpie/android/launcher/actions/Action.kt | 4 +++- .../jrpie/android/launcher/actions/AppAction.kt | 2 +- .../de/jrpie/android/launcher/apps/AppInfo.kt | 15 +++++++++++---- .../android/launcher/apps/DetailedAppInfo.kt | 2 +- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/de/jrpie/android/launcher/Functions.kt b/app/src/main/java/de/jrpie/android/launcher/Functions.kt index 8df5390..0db033d 100644 --- a/app/src/main/java/de/jrpie/android/launcher/Functions.kt +++ b/app/src/main/java/de/jrpie/android/launcher/Functions.kt @@ -160,15 +160,8 @@ fun loadApps(packageManager: PackageManager, context: Context) { // TODO: shortcuts - launcherApps.getShortcuts() val users = userManager.userProfiles for (user in users) { - for (activityInfo in launcherApps.getActivityList(null, user)) { - val app = AppInfo(activityInfo.applicationInfo.packageName, user.hashCode()) - val detailedAppInfo = DetailedAppInfo( - app, - activityInfo.label, - activityInfo.getBadgedIcon(0), - activityInfo.applicationInfo.flags.and(ApplicationInfo.FLAG_SYSTEM) != 0 - ) - loadList.add(detailedAppInfo) + launcherApps.getActivityList(null, user).forEach { + loadList.add(DetailedAppInfo(it)) } } @@ -180,7 +173,7 @@ fun loadApps(packageManager: PackageManager, context: Context) { i.addCategory(Intent.CATEGORY_LAUNCHER) val allApps = packageManager.queryIntentActivities(i, 0) for (ri in allApps) { - val app = AppInfo(ri.activityInfo.packageName, AppInfo.INVALID_USER) + val app = AppInfo(ri.activityInfo.packageName, null, AppInfo.INVALID_USER) val detailedAppInfo = DetailedAppInfo( app, ri.loadLabel(packageManager), diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt index b9cd9db..a1c6074 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/Action.kt @@ -30,7 +30,9 @@ interface Action { return LauncherAction.byId(id) } - return AppAction(AppInfo(id, user ?: INVALID_USER)) + val values = id.split(";") + + return AppAction(AppInfo(values[0], values.getOrNull(1), user ?: INVALID_USER)) } fun forGesture(gesture: Gesture): Action? { diff --git a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt index 25af413..7a47c5a 100644 --- a/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt +++ b/app/src/main/java/de/jrpie/android/launcher/actions/AppAction.kt @@ -77,7 +77,7 @@ class AppAction(private var appInfo: AppInfo) : Action { } override fun writeToIntent(intent: Intent) { - intent.putExtra("action_id", appInfo.packageName) + intent.putExtra("action_id", "${appInfo.packageName};${appInfo.activityName}"); appInfo.user?.let { intent.putExtra("user", it) } } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt b/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt index 9a73339..75172e7 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/AppInfo.kt @@ -10,16 +10,20 @@ import de.jrpie.android.launcher.getUserFromId * Represents an app installed on the users device. * Contains the minimal amount of data required to identify the app. */ -class AppInfo(val packageName: CharSequence, val user: Int = INVALID_USER) { +class AppInfo(val packageName: CharSequence, val activityName: CharSequence?, val user: Int = INVALID_USER) { fun serialize(): String { val u = user - return "$packageName;$u" + var ret = "$packageName;$u" + activityName?.let { ret += ";$activityName" } + + return ret; } override fun equals(other: Any?): Boolean { if(other is AppInfo) { return other.user == user && other.packageName == packageName + && other.activityName == activityName; } return super.equals(other) } @@ -33,7 +37,9 @@ class AppInfo(val packageName: CharSequence, val user: Int = INVALID_USER) { ): LauncherActivityInfo? { val launcherApps = context.getSystemService(Service.LAUNCHER_APPS_SERVICE) as LauncherApps return getUserFromId(user, context)?.let { userHandle -> - launcherApps.getActivityList(packageName.toString(), userHandle).firstOrNull() + launcherApps.getActivityList(packageName.toString(), userHandle).firstOrNull { app -> + activityName == null || app.name == activityName + } } } @@ -45,7 +51,8 @@ class AppInfo(val packageName: CharSequence, val user: Int = INVALID_USER) { val values = serialized.split(";") val packageName = values[0] val user = Integer.valueOf(values[1]) - return AppInfo(packageName, user) + val activityName = values.getOrNull(2) + return AppInfo(packageName, activityName, user) } } } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt b/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt index d618c68..8a8b2a3 100644 --- a/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt +++ b/app/src/main/java/de/jrpie/android/launcher/apps/DetailedAppInfo.kt @@ -16,7 +16,7 @@ class DetailedAppInfo( ) { constructor(activityInfo: LauncherActivityInfo) : this( - AppInfo(activityInfo.applicationInfo.packageName, activityInfo.user.hashCode()), + AppInfo(activityInfo.applicationInfo.packageName, activityInfo.name, activityInfo.user.hashCode()), activityInfo.label, activityInfo.getBadgedIcon(0), activityInfo.applicationInfo.flags.and(ApplicationInfo.FLAG_SYSTEM) != 0