@@ -26,8 +26,10 @@ import io.reactivex.disposables.Disposable
2626import io.reactivex.disposables.Disposables
2727import org.matrix.android.sdk.api.session.room.RoomSortOrder
2828import org.matrix.android.sdk.api.session.room.model.Membership
29+ import org.matrix.android.sdk.api.session.room.model.RoomSummary
2930import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
3031import org.matrix.android.sdk.rx.asObservable
32+ import timber.log.Timber
3133import javax.inject.Inject
3234
3335class ShortcutsHandler @Inject constructor(
@@ -52,20 +54,38 @@ class ShortcutsHandler @Inject constructor(
5254 .asObservable()
5355 .subscribe { rooms ->
5456 // Remove dead shortcuts (i.e. deleted rooms)
55- val roomIds = rooms.map { it.roomId }
56- val deadShortcutIds = ShortcutManagerCompat .getShortcuts(context, ShortcutManagerCompat .FLAG_MATCH_DYNAMIC )
57- .map { it.id }
58- .filter { ! roomIds.contains(it) }
59- ShortcutManagerCompat .removeLongLivedShortcuts(context, deadShortcutIds)
57+ removeDeadShortcut(rooms.map { it.roomId })
58+
59+ // Create shortcuts
60+ createShortcuts(rooms)
61+ }
62+ }
6063
61- val shortcuts = rooms.mapIndexed { index, room ->
62- shortcutCreator.create(room, index)
63- }
6464
65- shortcuts.forEach { shortcut ->
66- ShortcutManagerCompat .pushDynamicShortcut(context, shortcut)
67- }
65+ private fun removeDeadShortcut (roomIds : List <String >) {
66+ val deadShortcutIds = ShortcutManagerCompat .getShortcuts(context, ShortcutManagerCompat .FLAG_MATCH_DYNAMIC )
67+ .map { it.id }
68+ .filter { ! roomIds.contains(it) }
69+
70+ if (deadShortcutIds.isNotEmpty()) {
71+ Timber .d(" Removing shortcut(s) $deadShortcutIds " )
72+ ShortcutManagerCompat .removeLongLivedShortcuts(context, deadShortcutIds)
73+ if (ShortcutManagerCompat .isRequestPinShortcutSupported(context)) {
74+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .N_MR1 ) {
75+ context.getSystemService<ShortcutManager >()?.disableShortcuts(deadShortcutIds)
6876 }
77+ }
78+ }
79+ }
80+
81+ private fun createShortcuts (rooms : List <RoomSummary >) {
82+ val shortcuts = rooms.mapIndexed { index, room ->
83+ shortcutCreator.create(room, index)
84+ }
85+
86+ shortcuts.forEach { shortcut ->
87+ ShortcutManagerCompat .pushDynamicShortcut(context, shortcut)
88+ }
6989 }
7090
7191 fun clearShortcuts () {
0 commit comments