Widget: add room active widgets to RoomDetailViewState

This commit is contained in:
ganfra 2020-05-26 19:47:06 +02:00
parent ba46f10e3f
commit e32716aa48
4 changed files with 31 additions and 2 deletions

View File

@ -17,6 +17,7 @@
package im.vector.matrix.rx
import androidx.paging.PagedList
import im.vector.matrix.android.api.query.QueryStringValue
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo
import im.vector.matrix.android.api.session.group.GroupSummaryQueryParams
@ -35,6 +36,7 @@ import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.rest.DeviceInfo
import im.vector.matrix.android.internal.crypto.store.PrivateKeysInfo
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
import im.vector.matrix.android.internal.session.widgets.Widget
import io.reactivex.Observable
import io.reactivex.Single
@ -151,6 +153,13 @@ class RxSession(private val session: Session) {
session.getAccountDataEvents(types)
}
}
fun liveRoomWidgets(roomId: String, widgetId: QueryStringValue, widgetTypes: Set<String>? = null, excludedTypes: Set<String>? = null): Observable<List<Widget>> {
return session.widgetService().getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes).asObservable()
.startWithCallable {
session.widgetService().getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)
}
}
}
fun Session.rx(): RxSession {

View File

@ -23,5 +23,8 @@ data class Widget(
val widgetContent: WidgetContent,
val event: Event? = null,
val widgetId: String? = null
)
) {
val isActive = widgetContent.type != null && widgetContent.url != null
}

View File

@ -86,7 +86,7 @@ import java.util.concurrent.TimeUnit
import java.util.concurrent.atomic.AtomicBoolean
class RoomDetailViewModel @AssistedInject constructor(
@Assisted initialState: RoomDetailViewState,
@Assisted private val initialState: RoomDetailViewState,
userPreferencesProvider: UserPreferencesProvider,
private val vectorPreferences: VectorPreferences,
private val stringProvider: StringProvider,
@ -160,6 +160,7 @@ class RoomDetailViewModel @AssistedInject constructor(
observeDrafts()
observeUnreadState()
observeMyRoomMember()
observeActiveRoomWidgets()
room.getRoomSummaryLive()
room.markAsRead(ReadService.MarkAsReadParams.READ_RECEIPT, NoOpMatrixCallback())
room.rx().loadRoomMembersIfNeeded().subscribeLogError().disposeOnClear()
@ -167,6 +168,20 @@ class RoomDetailViewModel @AssistedInject constructor(
session.onRoomDisplayed(initialState.roomId)
}
private fun observeActiveRoomWidgets() {
session.rx()
.liveRoomWidgets(
roomId = initialState.roomId,
widgetId = QueryStringValue.NoCondition
)
.map { widgets ->
widgets.filter { it.isActive }
}
.execute {
copy(activeRoomWidgets = it)
}
}
private fun observeMyRoomMember() {
val queryParams = roomMemberQueryParams {
this.userId = QueryStringValue.Equals(session.myUserId, QueryStringValue.Case.SENSITIVE)

View File

@ -27,6 +27,7 @@ import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.sync.SyncState
import im.vector.matrix.android.api.session.user.model.User
import im.vector.matrix.android.api.util.MatrixItem
import im.vector.matrix.android.internal.session.widgets.Widget
/**
* Describes the current send mode:
@ -56,6 +57,7 @@ data class RoomDetailViewState(
val myRoomMember: Async<RoomMemberSummary> = Uninitialized,
val asyncInviter: Async<User> = Uninitialized,
val asyncRoomSummary: Async<RoomSummary> = Uninitialized,
val activeRoomWidgets: Async<List<Widget>> = Uninitialized,
val typingRoomMembers: List<MatrixItem.UserItem>? = null,
val typingMessage: String? = null,
val sendMode: SendMode = SendMode.REGULAR(""),