diff --git a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt index 830bc8ec3..b64247e0e 100644 --- a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt @@ -25,7 +25,6 @@ import android.app.* import android.content.Context import android.content.Intent import android.content.pm.PackageManager -import android.graphics.drawable.Icon import androidx.core.content.ContextCompat import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.LinphoneApplication.Companion.corePreferences @@ -118,7 +117,7 @@ class Api31Compatibility { } else { Person.Builder() .setName(conferenceInfo.subject) - .setIcon(Icon.createWithResource(context, R.drawable.voip_multiple_contacts_avatar_alt)) + .setIcon(coreContext.contactsManager.groupAvatar.toIcon(context)) .setImportant(false) .build() } diff --git a/app/src/main/java/org/linphone/contact/ContactsManager.kt b/app/src/main/java/org/linphone/contact/ContactsManager.kt index a49c98058..73e0ad5a6 100644 --- a/app/src/main/java/org/linphone/contact/ContactsManager.kt +++ b/app/src/main/java/org/linphone/contact/ContactsManager.kt @@ -68,6 +68,9 @@ class ContactsManager(private val context: Context) { var contactIdToWatchFor: String = "" + val contactAvatar: IconCompat + val groupAvatar: IconCompat + private val localFriends = arrayListOf() private val contactsUpdatedListeners = ArrayList() @@ -79,13 +82,18 @@ class ContactsManager(private val context: Context) { for (friend in friends) { refreshContactOnPresenceReceived(friend) } + Log.i("[Contacts Manager] Contacts refreshed due to presence received") notifyListeners() + Log.i("[Contacts Manager] Presence notified to all listeners") } } init { initSyncAccount() + contactAvatar = IconCompat.createWithResource(context, R.drawable.voip_single_contact_avatar_alt) + groupAvatar = IconCompat.createWithResource(context, R.drawable.voip_multiple_contacts_avatar_alt) + val core = coreContext.core for (list in core.friendsLists) { list.addListener(friendListListener) @@ -260,6 +268,7 @@ class ContactsManager(private val context: Context) { Log.d("[Contacts Manager] Received presence information for contact $friend") if (corePreferences.storePresenceInNativeContact && PermissionHelper.get().hasWriteContactsPermission()) { if (friend.refKey != null) { + Log.i("[Contacts Manager] Storing presence in native contact ${friend.refKey}") storePresenceInNativeContact(friend) } } @@ -383,17 +392,17 @@ fun Friend.getPerson(): Person { val bm: Bitmap? = ImageUtils.getRoundBitmapFromUri( coreContext.context, - getPictureUri() + getThumbnailUri() ) val icon = - if (bm == null) IconCompat.createWithResource( - coreContext.context, - R.drawable.voip_single_contact_avatar_alt - ) else IconCompat.createWithAdaptiveBitmap(bm) + if (bm == null) { + coreContext.contactsManager.contactAvatar + } else IconCompat.createWithAdaptiveBitmap(bm) if (icon != null) { personBuilder.setIcon(icon) } + personBuilder.setUri(nativeUri) personBuilder.setImportant(starred) return personBuilder.build() } diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt index 10afb7ef5..a6e71815a 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt @@ -431,7 +431,7 @@ class NotificationsManager(private val context: Context) { if (picture != null) { IconCompat.createWithAdaptiveBitmap(picture) } else { - IconCompat.createWithResource(context, R.drawable.voip_single_contact_avatar_alt) + coreContext.contactsManager.contactAvatar } if (userIcon != null) builder.setIcon(userIcon) builder.build() @@ -791,7 +791,7 @@ class NotificationsManager(private val context: Context) { } style.isGroupConversation = notifiable.isGroup - val icon = lastPerson?.icon ?: IconCompat.createWithResource(context, R.drawable.voip_single_contact_avatar_alt) + val icon = lastPerson?.icon ?: coreContext.contactsManager.contactAvatar val bubble = NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon) .setDesiredHeightResId(R.dimen.chat_message_bubble_desired_height) .build() diff --git a/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt b/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt index b34528372..5bc66c5e5 100644 --- a/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt +++ b/app/src/main/java/org/linphone/utils/ShortcutsHelper.kt @@ -30,8 +30,8 @@ import androidx.core.app.Person import androidx.core.content.LocusIdCompat import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.graphics.drawable.IconCompat +import kotlin.math.min import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.R import org.linphone.activities.main.MainActivity import org.linphone.contact.getPerson import org.linphone.core.Address @@ -132,7 +132,8 @@ class ShortcutsHelper(val context: Context) { return } - val maxShortcuts = shortcutManager.maxShortcutCountPerActivity + Log.i("[Shortcut Helper] Creating launcher shortcuts for chat rooms") + val maxShortcuts = min(shortcutManager.maxShortcutCountPerActivity, 5) var count = 0 for (room in coreContext.core.chatRooms) { // Android can usually only have around 4-5 shortcuts at a time @@ -143,12 +144,13 @@ class ShortcutsHelper(val context: Context) { val shortcut: ShortcutInfo? = createChatRoomShortcut(context, room) if (shortcut != null) { - Log.i("[Shortcut Helper] Creating launcher shortcut for ${shortcut.shortLabel}") + Log.i("[Shortcut Helper] Created launcher shortcut for ${shortcut.shortLabel}") shortcuts.add(shortcut) count += 1 } } shortcutManager.dynamicShortcuts = shortcuts + Log.i("[Shortcut Helper] Created $count launcher shortcuts") } private fun createChatRoomShortcut(context: Context, chatRoom: ChatRoom): ShortcutInfo? { @@ -166,20 +168,24 @@ class ShortcutsHelper(val context: Context) { if (chatRoom.hasCapability(ChatRoomCapabilities.Basic.toInt())) { val contact = coreContext.contactsManager.findContactByAddress(chatRoom.peerAddress) - if (contact != null) { - personsList.add(contact.getPerson()) + val person = contact?.getPerson() + if (person != null) { + personsList.add(person) } + + icon = person?.icon ?: coreContext.contactsManager.contactAvatar subject = contact?.name ?: LinphoneUtils.getDisplayName(chatRoom.peerAddress) - icon = contact?.getPerson()?.icon ?: IconCompat.createWithResource(context, R.drawable.voip_single_contact_avatar_alt) } else if (chatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && chatRoom.participants.isNotEmpty()) { val address = chatRoom.participants.first().address val contact = coreContext.contactsManager.findContactByAddress(address) - if (contact != null) { - personsList.add(contact.getPerson()) + val person = contact?.getPerson() + if (person != null) { + personsList.add(person) } + subject = contact?.name ?: LinphoneUtils.getDisplayName(address) - icon = contact?.getPerson()?.icon ?: IconCompat.createWithResource(context, R.drawable.voip_single_contact_avatar_alt) + icon = person?.icon ?: coreContext.contactsManager.contactAvatar } else { for (participant in chatRoom.participants) { val contact = @@ -189,7 +195,7 @@ class ShortcutsHelper(val context: Context) { } } subject = chatRoom.subject.orEmpty() - icon = IconCompat.createWithResource(context, R.drawable.voip_multiple_contacts_avatar_alt) + icon = coreContext.contactsManager.groupAvatar } val persons = arrayOfNulls(personsList.size)