Skip to content

Commit 3a81c10

Browse files
committed
Remove (disable) shortcut if a room is left
1 parent f166348 commit 3a81c10

File tree

1 file changed

+31
-11
lines changed

1 file changed

+31
-11
lines changed

vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ import io.reactivex.disposables.Disposable
2626
import io.reactivex.disposables.Disposables
2727
import org.matrix.android.sdk.api.session.room.RoomSortOrder
2828
import org.matrix.android.sdk.api.session.room.model.Membership
29+
import org.matrix.android.sdk.api.session.room.model.RoomSummary
2930
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
3031
import org.matrix.android.sdk.rx.asObservable
32+
import timber.log.Timber
3133
import javax.inject.Inject
3234

3335
class 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

Comments
 (0)