Skip to content

Commit d851bf2

Browse files
committed
Introduce createShortcutId to enforce the same computation of shortcut ids.
Fixes #5192 (comment)
1 parent d1b8f31 commit d851bf2

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/conversations/DefaultNotificationConversationService.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import io.element.android.libraries.matrix.ui.media.InitialsAvatarBitmapGenerato
3333
import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader
3434
import io.element.android.libraries.push.api.notifications.conversations.NotificationConversationService
3535
import io.element.android.libraries.push.impl.intent.IntentProvider
36+
import io.element.android.libraries.push.impl.notifications.shortcut.createShortcutId
3637
import io.element.android.libraries.sessionstorage.api.observer.SessionListener
3738
import io.element.android.libraries.sessionstorage.api.observer.SessionObserver
3839
import io.element.android.libraries.ui.strings.CommonStrings
@@ -106,7 +107,7 @@ class DefaultNotificationConversationService(
106107
.generateBitmap(defaultShortcutIconSize, AvatarData(id = roomId.value, name = roomName, size = AvatarSize.RoomHeader))
107108
?.let(IconCompat::createWithAdaptiveBitmap)
108109

109-
val shortcutInfo = ShortcutInfoCompat.Builder(context, "$sessionId-$roomId")
110+
val shortcutInfo = ShortcutInfoCompat.Builder(context, createShortcutId(sessionId, roomId))
110111
.setShortLabel(roomName)
111112
.setIcon(icon)
112113
.setIntent(intentProvider.getViewRoomIntent(sessionId, roomId, threadId = null))
@@ -127,7 +128,7 @@ class DefaultNotificationConversationService(
127128
}
128129

129130
override suspend fun onLeftRoom(sessionId: SessionId, roomId: RoomId) {
130-
val shortcutsToRemove = listOf("$sessionId-$roomId")
131+
val shortcutsToRemove = listOf(createShortcutId(sessionId, roomId))
131132
runCatchingExceptions {
132133
ShortcutManagerCompat.removeDynamicShortcuts(context, shortcutsToRemove)
133134
if (isRequestPinShortcutSupported) {

libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/notifications/factories/NotificationCreator.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import io.element.android.libraries.push.impl.notifications.model.FallbackNotifi
4141
import io.element.android.libraries.push.impl.notifications.model.InviteNotifiableEvent
4242
import io.element.android.libraries.push.impl.notifications.model.NotifiableMessageEvent
4343
import io.element.android.libraries.push.impl.notifications.model.SimpleNotifiableEvent
44+
import io.element.android.libraries.push.impl.notifications.shortcut.createShortcutId
4445
import io.element.android.services.toolbox.api.strings.StringProvider
4546

4647
interface NotificationCreator {
@@ -140,7 +141,7 @@ class DefaultNotificationCreator(
140141
// Must match those created in the ShortcutInfoCompat.Builder()
141142
// for the notification to appear as a "Conversation":
142143
// https://developer.android.com/develop/ui/views/notifications/conversations
143-
.setShortcutId("${roomInfo.sessionId.value}-${roomInfo.roomId.value}")
144+
.setShortcutId(createShortcutId(roomInfo.sessionId, roomInfo.roomId))
144145
// Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
145146
// devices and all Wear devices. But we want a custom grouping, so we specify the groupID
146147
.setGroup(roomInfo.sessionId.value)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/*
2+
* Copyright 2025 New Vector Ltd.
3+
*
4+
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
* Please see LICENSE files in the repository root for full details.
6+
*/
7+
8+
package io.element.android.libraries.push.impl.notifications.shortcut
9+
10+
import io.element.android.libraries.matrix.api.core.RoomId
11+
import io.element.android.libraries.matrix.api.core.SessionId
12+
13+
internal fun createShortcutId(sessionId: SessionId, roomId: RoomId) = "$sessionId-$roomId"

0 commit comments

Comments
 (0)