From 20f3802dd40d2f203a5f058ac5de75022696c0ab Mon Sep 17 00:00:00 2001 From: sds100 Date: Sun, 12 Jan 2025 16:16:51 +0100 Subject: [PATCH] #1387 fix: launching app shortcuts works again on Android 14+ --- .../system/apps/AndroidAppShortcutAdapter.kt | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/io/github/sds100/keymapper/system/apps/AndroidAppShortcutAdapter.kt b/app/src/main/java/io/github/sds100/keymapper/system/apps/AndroidAppShortcutAdapter.kt index db86d7bb52..e77c6a2d24 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/apps/AndroidAppShortcutAdapter.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/apps/AndroidAppShortcutAdapter.kt @@ -1,11 +1,13 @@ package io.github.sds100.keymapper.system.apps +import android.app.ActivityOptions import android.app.PendingIntent import android.content.ComponentName import android.content.Context import android.content.Intent import android.content.pm.PackageManager import android.graphics.drawable.Drawable +import android.os.Build import android.os.Bundle import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat @@ -79,8 +81,7 @@ class AndroidAppShortcutAdapter(context: Context) : AppShortcutAdapter { } } - override fun createShortcutResultIntent(shortcut: ShortcutInfoCompat): Intent = - ShortcutManagerCompat.createShortcutResultIntent(ctx, shortcut) + override fun createShortcutResultIntent(shortcut: ShortcutInfoCompat): Intent = ShortcutManagerCompat.createShortcutResultIntent(ctx, shortcut) override fun getShortcutName(info: AppShortcutInfo): Result { try { @@ -117,7 +118,18 @@ class AndroidAppShortcutAdapter(context: Context) : AppShortcutAdapter { val flags = PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT val pendingIntent = PendingIntent.getActivity(ctx, 0, intent, flags) - pendingIntent.send() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + val bundle = ActivityOptions.makeBasic() + .setPendingIntentBackgroundActivityStartMode( + ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED, + ) + .toBundle() + + pendingIntent.send(bundle) + } else { + pendingIntent.send() + } + return Success(Unit) } catch (e: SecurityException) { return Error.InsufficientPermissionsToOpenAppShortcut