diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt index db396cf990..879efcaf19 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt @@ -17,6 +17,7 @@ package im.vector.app.features.home import android.content.Context +import android.content.pm.ShortcutInfo import android.graphics.Bitmap import android.os.Build import androidx.annotation.WorkerThread @@ -67,9 +68,12 @@ class ShortcutCreator @Inject constructor( .setShortLabel(roomSummary.displayName) .setIcon(bitmap?.toProfileImageIcon()) .setIntent(intent) + .setLongLived(true) // Make it show up in the direct share menu - .setCategories(setOf(directShareCategory)) + .setCategories(setOf( + directShareCategory, + ShortcutInfo.SHORTCUT_CATEGORY_CONVERSATION)) .build() } diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt index 4a2d001e1d..62595389eb 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt @@ -24,7 +24,6 @@ import androidx.core.content.pm.ShortcutManagerCompat import im.vector.app.core.di.ActiveSessionHolder import io.reactivex.disposables.Disposable import io.reactivex.disposables.Disposables -import org.matrix.android.sdk.api.query.RoomTagQueryFilter import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.rx.asObservable @@ -46,17 +45,23 @@ class ShortcutsHandler @Inject constructor( ?.getPagedRoomSummariesLive( roomSummaryQueryParams { memberships = listOf(Membership.JOIN) - roomTagQueryFilter = RoomTagQueryFilter(isFavorite = true, null, null) } ) ?.asObservable() ?.subscribe { rooms -> val shortcuts = rooms - .take(n = 4) // Android only allows us to create 4 shortcuts + .sortedBy { room -> + // pushDynamicShortcut adds each shortcut to the top of the shortcut ranking, + // so higher priority rooms should be at the end of this list to get pushed on last. + if (room.isFavorite) 2 + else if (room.isLowPriority) 0 + else 1 + } .map { shortcutCreator.create(it) } - ShortcutManagerCompat.removeAllDynamicShortcuts(context) - ShortcutManagerCompat.addDynamicShortcuts(context, shortcuts) + shortcuts.forEach { shortcut -> + ShortcutManagerCompat.pushDynamicShortcut(context, shortcut) + } } ?: Disposables.empty() } diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt index 33f419857b..d5eb80261e 100755 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt @@ -550,6 +550,9 @@ class NotificationUtils @Inject constructor(private val context: Context, // that can be displayed in not disturb mode if white listed (the later will need compat28.x) .setCategory(NotificationCompat.CATEGORY_MESSAGE) + // ID of the corresponding shortcut, for conversation features under API 30+ + .setShortcutId(roomInfo.roomId) + // Title for API < 16 devices. .setContentTitle(roomInfo.roomDisplayName) // Content for API < 16 devices.