diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 229b5ac0b44c462de19dcada0345af6500b009d6..4487b3f42fd09c98cb62f71ca9a518358b63e3d4 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -12,6 +12,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; +import android.content.pm.ShortcutManager; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Typeface; @@ -40,6 +41,7 @@ import androidx.core.app.NotificationManagerCompat; import androidx.core.app.Person; import androidx.core.app.RemoteInput; import androidx.core.content.ContextCompat; +import androidx.core.content.pm.ShortcutInfoCompat; import androidx.core.graphics.drawable.IconCompat; import com.google.common.base.Joiner; @@ -1362,6 +1364,12 @@ public class NotificationService { mBuilder.setSmallIcon(R.drawable.ic_notification); mBuilder.setDeleteIntent(createDeleteIntent(conversation)); mBuilder.setContentIntent(createContentIntent(conversation)); + + ShortcutInfoCompat info = mXmppConnectionService.getShortcutService().getShortcutInfoCompat(conversation.getContact()); + mBuilder.setShortcutInfo(info); + if (Build.VERSION.SDK_INT >= 30) { + mXmppConnectionService.getSystemService(ShortcutManager.class).pushDynamicShortcut(info.toShortcutInfo()); + } } return mBuilder; } diff --git a/src/main/java/eu/siacs/conversations/services/ShortcutService.java b/src/main/java/eu/siacs/conversations/services/ShortcutService.java index 6b7106f74d38caffb3e434070c6e4d9b329fee93..307bb5a6a9ee73adaa5cff863c31c8615086f4ea 100644 --- a/src/main/java/eu/siacs/conversations/services/ShortcutService.java +++ b/src/main/java/eu/siacs/conversations/services/ShortcutService.java @@ -11,6 +11,8 @@ import android.os.Build; import android.util.Log; import androidx.annotation.NonNull; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.graphics.drawable.IconCompat; import java.util.ArrayList; import java.util.HashMap; @@ -88,15 +90,20 @@ public class ShortcutService { } } - @TargetApi(Build.VERSION_CODES.N_MR1) - private ShortcutInfo getShortcutInfo(Contact contact) { - return new ShortcutInfo.Builder(xmppConnectionService, getShortcutId(contact)) + public ShortcutInfoCompat getShortcutInfoCompat(Contact contact) { + return new ShortcutInfoCompat.Builder(xmppConnectionService, getShortcutId(contact)) .setShortLabel(contact.getDisplayName()) .setIntent(getShortcutIntent(contact)) - .setIcon(Icon.createWithBitmap(xmppConnectionService.getAvatarService().getRoundedShortcut(contact))) + .setIcon(IconCompat.createFromIcon(Icon.createWithBitmap(xmppConnectionService.getAvatarService().getRoundedShortcut(contact)))) + .setIsConversation() .build(); } + @TargetApi(Build.VERSION_CODES.N_MR1) + private ShortcutInfo getShortcutInfo(Contact contact) { + return getShortcutInfoCompat(contact).toShortcutInfo(); + } + private static boolean contactsChanged(List needles, List haystack) { for(Contact needle : needles) { if(!contactExists(needle,haystack)) {