From 370b786ed0325b83075b71e45be19a88c3e308e8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Sat, 18 Nov 2023 16:43:26 +0100 Subject: [PATCH] Remove chat room shortcut after deleting it --- .../ui/main/chat/model/ConversationModel.kt | 2 ++ .../java/org/linphone/utils/ShortcutUtils.kt | 25 ++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt index db882ac73..05606279c 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/model/ConversationModel.kt @@ -36,6 +36,7 @@ import org.linphone.core.tools.Log import org.linphone.ui.main.contacts.model.ContactAvatarModel import org.linphone.utils.AppUtils import org.linphone.utils.LinphoneUtils +import org.linphone.utils.ShortcutUtils import org.linphone.utils.TimestampUtils class ConversationModel @WorkerThread constructor(val chatRoom: ChatRoom) { @@ -214,6 +215,7 @@ class ConversationModel @WorkerThread constructor(val chatRoom: ChatRoom) { @UiThread fun delete() { coreContext.postOnCoreThread { core -> + ShortcutUtils.removeShortcutToChatRoom(chatRoom) core.deleteChatRoom(chatRoom) Log.i("$TAG Conversation [$id] has been deleted") } diff --git a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt index 8f9b9995b..b7817bee1 100644 --- a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt +++ b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt @@ -30,7 +30,6 @@ import androidx.core.content.LocusIdCompat import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.graphics.drawable.IconCompat -import kotlin.math.min import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.contacts.AvatarGenerator @@ -44,31 +43,33 @@ class ShortcutUtils { companion object { private const val TAG = "[Shortcut Utils]" + @WorkerThread + fun removeShortcutToChatRoom(chatRoom: ChatRoom) { + val id = LinphoneUtils.getChatRoomId(chatRoom) + Log.i("$TAG Removing shortcut to chat room [$id]") + ShortcutManagerCompat.removeLongLivedShortcuts(coreContext.context, arrayListOf(id)) + } + @WorkerThread suspend fun createShortcutsToChatRooms(context: Context) { - val shortcuts = ArrayList() if (ShortcutManagerCompat.isRateLimitingActive(context)) { Log.e("$TAG Rate limiting is active, aborting") return } Log.i("$TAG Creating launcher shortcuts for chat rooms") - val maxShortcuts = min(ShortcutManagerCompat.getMaxShortcutCountPerActivity(context), 5) var count = 0 for (room in coreContext.core.chatRooms) { - // Android can usually only have around 4-5 shortcuts at a time - if (count >= maxShortcuts) { - Log.w("$TAG Max amount of shortcuts reached ($count)") - break - } - val shortcut: ShortcutInfoCompat? = createChatRoomShortcut(context, room) if (shortcut != null) { Log.i("$TAG Created launcher shortcut for ${shortcut.shortLabel}") - shortcuts.add(shortcut) - count += 1 + val keepGoing = ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) + if (!keepGoing) { + count += 1 + } else { + break + } } } - ShortcutManagerCompat.setDynamicShortcuts(context, shortcuts) Log.i("$TAG Created $count launcher shortcuts") }