mirror of
https://github.com/jrpie/Launcher.git
synced 2025-02-22 22:11:27 +01:00
fix: store activityName in AppInfo to support apps with multiple main activities
This commit is contained in:
parent
525ffe6b53
commit
a6c72f100a
5 changed files with 19 additions and 17 deletions
|
@ -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),
|
||||
|
|
|
@ -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? {
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue