Richer call notifications

Stephen Paul Weber created

Especially, show which account call is coming in on if you have multiple

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java | 39 
1 file changed, 39 insertions(+)

Detailed changes

src/main/java/eu/siacs/conversations/services/NotificationService.java 🔗

@@ -635,6 +635,15 @@ public class NotificationService {
                     mXmppConnectionService.getString(R.string.rtp_state_incoming_call));
         }
         final Contact contact = id.getContact();
+        builder.addPerson(getPerson(contact));
+        ShortcutInfoCompat info = mXmppConnectionService.getShortcutService().getShortcutInfoCompat(contact);
+        builder.setShortcutInfo(info);
+        if (Build.VERSION.SDK_INT >= 30) {
+            mXmppConnectionService.getSystemService(ShortcutManager.class).pushDynamicShortcut(info.toShortcutInfo());
+        }
+        if (mXmppConnectionService.getAccounts().size() > 1) {
+            builder.setSubText(contact.getAccount().getJid().asBareJid().toString());
+        }
         builder.setLargeIcon(
                 mXmppConnectionService
                         .getAvatarService()
@@ -1110,6 +1119,9 @@ public class NotificationService {
                                         info.getNumberOfCalls(),
                                         info.getNumberOfCalls());
         builder.setContentTitle(title);
+        if (mXmppConnectionService.getAccounts().size() > 1) {
+            builder.setSubText(conversation.getAccount().getJid().asBareJid().toString());
+        }
         final String name = conversation.getContact().getDisplayName();
         if (publicVersion) {
             builder.setTicker(title);
@@ -1436,6 +1448,33 @@ public class NotificationService {
         return builder.build();
     }
 
+    private Person getPerson(Contact contact) {
+        final Person.Builder builder = new Person.Builder();
+        builder.setName(contact.getDisplayName());
+        final Uri uri = contact.getSystemAccount();
+        if (uri != null) {
+            builder.setUri(uri.toString());
+        }
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+            final Jid jid = contact.getJid();
+            builder.setKey(jid.toString());
+            final Conversation c = mXmppConnectionService.find(contact.getAccount(), jid);
+            if (c != null) {
+                builder.setImportant(c.getBooleanAttribute(Conversation.ATTRIBUTE_PINNED_ON_TOP, false));
+            }
+            builder.setIcon(
+                    IconCompat.createWithBitmap(
+                            mXmppConnectionService
+                                    .getAvatarService()
+                                    .get(
+                                            contact,
+                                            AvatarService.getSystemUiAvatarSize(
+                                                    mXmppConnectionService),
+                                            false)));
+        }
+        return builder.build();
+    }
+
     private void modifyForTextOnly(final Builder builder, final ArrayList<Message> messages) {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             final Conversation conversation = (Conversation) messages.get(0).getConversation();