Use conversation notifications

Stephen Paul Weber created

Allows for per-conversation priority and sound

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java |  8 
src/main/java/eu/siacs/conversations/services/ShortcutService.java     | 15 
2 files changed, 19 insertions(+), 4 deletions(-)

Detailed changes

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;
     }

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<Contact> needles, List<ShortcutInfo> haystack) {
         for(Contact needle : needles) {
             if(!contactExists(needle,haystack)) {