Widget: add room active widgets to RoomDetailViewState
This commit is contained in:
parent
ba46f10e3f
commit
e32716aa48
@ -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 {
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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(""),
|
||||
|
Loading…
x
Reference in New Issue
Block a user