1
0
mirror of https://github.com/vector-im/riotX-android synced 2025-10-05 15:52:47 +02:00

misc : clean up after PR review

This commit is contained in:
ganfra
2025-08-04 18:19:25 +02:00
parent fe0b54e898
commit a239f5fb08
24 changed files with 81 additions and 115 deletions

View File

@@ -54,7 +54,6 @@ import im.vector.app.features.home.room.typing.TypingHelper
import im.vector.app.features.location.live.StopLiveLocationShareUseCase
import im.vector.app.features.location.live.tracking.LocationSharingServiceConnection
import im.vector.app.features.notifications.NotificationDrawerManager
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.raw.wellknown.CryptoConfig
import im.vector.app.features.raw.wellknown.getOutboundSessionKeySharingStrategyOrDefault
import im.vector.app.features.raw.wellknown.withElementWellKnown
@@ -302,7 +301,7 @@ class TimelineViewModel @AssistedInject constructor(
private fun observePowerLevel() {
if (room == null) return
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { powerLevels ->
val canInvite = powerLevels.isUserAbleToInvite(session.myUserId)
val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId)

View File

@@ -30,7 +30,6 @@ import im.vector.app.features.home.room.detail.ChatEffect
import im.vector.app.features.home.room.detail.composer.rainbow.RainbowGenerator
import im.vector.app.features.home.room.detail.composer.voice.VoiceMessageRecorderView
import im.vector.app.features.home.room.detail.toMessageType
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.session.coroutineScope
import im.vector.app.features.settings.VectorPreferences
import im.vector.app.features.voice.VoiceFailure
@@ -179,7 +178,7 @@ class MessageComposerViewModel @AssistedInject constructor(
private fun observePowerLevelAndEncryption(room: Room) {
combine(
PowerLevelsFlowFactory(room).createFlow(),
room.flow().liveRoomPowerLevels(),
room.flow().liveRoomSummary().unwrap()
) { pl, sum ->
val canSendMessage = pl.isUserAllowedToSend(session.myUserId, false, EventType.MESSAGE)

View File

@@ -23,7 +23,6 @@ import im.vector.app.features.home.room.detail.timeline.format.NoticeEventFormat
import im.vector.app.features.html.EventHtmlRenderer
import im.vector.app.features.html.PillsPostProcessor
import im.vector.app.features.html.VectorHtmlCompressor
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.reactions.data.EmojiDataSource
import im.vector.app.features.settings.VectorPreferences
import im.vector.lib.strings.CommonStrings
@@ -115,7 +114,7 @@ class MessageActionsViewModel @AssistedInject constructor(
if (room == null) {
return
}
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val canReact = roomPowerLevels.isUserAllowedToSend(session.myUserId, false, EventType.REACTION)
val canRedact = roomPowerLevels.isUserAbleToRedact(session.myUserId)

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.utils.PermissionChecker
import im.vector.app.features.home.room.detail.timeline.helper.LocationPinProvider
import im.vector.app.features.location.domain.usecase.CompareLocationsUseCase
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.settings.VectorPreferences
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -35,6 +34,7 @@ import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.session.getUserOrDefault
import org.matrix.android.sdk.api.util.toMatrixItem
import org.matrix.android.sdk.flow.flow
import timber.log.Timber
/**
@@ -72,7 +72,7 @@ class LocationSharingViewModel @AssistedInject constructor(
}
private fun observePowerLevelsForLiveLocationSharing() {
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.distinctUntilChanged()
.setOnEach { roomPowerLevels ->
val canShareLiveLocation = EventType.STATE_ROOM_BEACON_INFO.values

View File

@@ -1,47 +0,0 @@
/*
* Copyright 2020-2024 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package im.vector.app.features.powerlevel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flowOn
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.model.PowerLevelsContent
import org.matrix.android.sdk.api.session.room.model.create.getRoomCreateContentWithSender
import org.matrix.android.sdk.api.session.room.powerlevels.RoomPowerLevels
import org.matrix.android.sdk.flow.flow
import org.matrix.android.sdk.flow.mapOptional
class PowerLevelsFlowFactory(private val room: Room) {
fun createFlow(): Flow<RoomPowerLevels> {
val flowRoom = room.flow()
val powerLevelsFlow = flowRoom
.liveStateEvent(EventType.STATE_ROOM_POWER_LEVELS, QueryStringValue.IsEmpty)
.mapOptional { it.content.toModel<PowerLevelsContent>() }
.flowOn(Dispatchers.Default)
val roomCreateFlow = flowRoom
.liveStateEvent(EventType.STATE_ROOM_CREATE, QueryStringValue.IsEmpty)
.mapOptional { event ->
event.getRoomCreateContentWithSender()
}
.flowOn(Dispatchers.Default)
return combine(powerLevelsFlow, roomCreateFlow) { powerLevelsContent, roomCreateContent ->
RoomPowerLevels(
powerLevelsContent = powerLevelsContent.getOrNull(),
roomCreateContent = roomCreateContent.getOrNull()
)
}
}
}

View File

@@ -22,7 +22,7 @@ fun Role.isOwner() = this == Role.Creator || this == Role.SuperAdmin
fun Room.membersByRoleFlow(): Flow<Map<Role, List<RoomMemberSummary>>> {
val roomMembersFlow = flow().liveRoomMembers(roomMemberQueryParams())
val roomPowerLevelsFlow = PowerLevelsFlowFactory(this).createFlow()
val roomPowerLevelsFlow = flow().liveRoomPowerLevels()
return combine(roomMembersFlow, roomPowerLevelsFlow) { roomMembers, roomPowerLevels ->
roomMembers.groupBy { roomPowerLevels.getSuggestedRole(it.userId) }
}.distinctUntilChanged()

View File

@@ -23,7 +23,6 @@ import im.vector.app.core.resources.StringProvider
import im.vector.app.features.createdirect.DirectRoomHelper
import im.vector.app.features.displayname.getBestName
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.lib.strings.CommonStrings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.combine
@@ -361,7 +360,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
private fun observeRoomSummaryAndPowerLevels(room: Room) {
val roomSummaryLive = room.flow().liveRoomSummary().unwrap()
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->
val permissions = ActionPermissions(

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.resources.StringProvider
import im.vector.app.features.analytics.AnalyticsTracker
import im.vector.app.features.analytics.plan.Interaction
import im.vector.app.features.home.ShortcutCreator
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.powerlevel.isLastAdminFlow
import im.vector.app.features.session.coroutineScope
import im.vector.lib.strings.CommonStrings
@@ -121,7 +120,7 @@ class RoomProfileViewModel @AssistedInject constructor(
}
private fun observePowerLevels() {
val powerLevelsContentLive = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsContentLive = room.flow().liveRoomPowerLevels()
powerLevelsContentLive
.onEach { roomPowerLevels ->
val canUpdateRoomState = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)
@@ -163,8 +162,7 @@ class RoomProfileViewModel @AssistedInject constructor(
}
private fun observePermissions() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.setOnEach { roomPowerLevels ->
val permissions = RoomProfileViewState.ActionPermissions(
canEnableEncryption = roomPowerLevels.isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION)

View File

@@ -18,7 +18,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -124,8 +123,7 @@ class RoomAliasViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = RoomAliasViewState.ActionPermissions(
canChangeCanonicalAlias = roomPowerLevels.isUserAllowedToSend(

View File

@@ -15,7 +15,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.lib.strings.CommonStrings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -61,7 +60,7 @@ class RoomBannedMemberListViewModel @AssistedInject constructor(
)
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.setOnEach { roomPowerLevels ->
copy(canUserBan = roomPowerLevels.isUserAbleToBan(session.myUserId))

View File

@@ -16,7 +16,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
@@ -72,7 +71,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
memberships = Membership.activeMemberships()
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
combine(
roomFlow.liveRoomMembers(roomMemberQueryParams),
powerLevelsFlow,
@@ -137,7 +136,7 @@ class RoomMemberListViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room).createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = ActionPermissions(
canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId),

View File

@@ -16,7 +16,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
@@ -59,8 +58,7 @@ class RoomPermissionsViewModel @AssistedInject constructor(
}
private fun observePowerLevel() {
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val permissions = RoomPermissionsViewState.ActionPermissions(
canChangePowerLevels = roomPowerLevels.isUserAllowedToSend(

View File

@@ -15,7 +15,6 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.settings.VectorPreferences
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.mapNotNull
@@ -114,7 +113,7 @@ class RoomSettingsViewModel @AssistedInject constructor(
)
}
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->
val permissions = RoomSettingsViewState.ActionPermissions(

View File

@@ -20,7 +20,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyViewEvents
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.session.coroutineScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
@@ -71,8 +70,7 @@ class SpaceMenuViewModel @AssistedInject constructor(
}
}.launchIn(viewModelScope)
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
val canInvite = roomPowerLevels.isUserAbleToInvite(session.myUserId)

View File

@@ -21,7 +21,6 @@ import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.analytics.AnalyticsTracker
import im.vector.app.features.analytics.extensions.toAnalyticsJoinedRoom
import im.vector.app.features.analytics.plan.JoinedRoom
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
@@ -95,7 +94,7 @@ class SpaceDirectoryViewModel @AssistedInject constructor(
private fun observePermissions() {
val room = session.getRoom(initialState.spaceId) ?: return
val powerLevelsFlow = PowerLevelsFlowFactory(room).createFlow()
val powerLevelsFlow = room.flow().liveRoomPowerLevels()
powerLevelsFlow
.onEach { roomPowerLevels ->

View File

@@ -16,13 +16,13 @@ import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.getRoom
import org.matrix.android.sdk.api.session.getRoomSummary
import org.matrix.android.sdk.flow.flow
class ShareSpaceViewModel @AssistedInject constructor(
@Assisted private val initialState: ShareSpaceViewState,
@@ -49,8 +49,7 @@ class ShareSpaceViewModel @AssistedInject constructor(
private fun observePowerLevel() {
val room = session.getRoom(initialState.spaceId) ?: return
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.onEach { roomPowerLevels ->
setState {
copy(

View File

@@ -19,7 +19,6 @@ import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.core.resources.StringProvider
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
import im.vector.app.features.widgets.permissions.WidgetPermissionsHelper
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
@@ -97,8 +96,7 @@ class WidgetViewModel @AssistedInject constructor(
if (room == null) {
return
}
PowerLevelsFlowFactory(room)
.createFlow()
room.flow().liveRoomPowerLevels()
.map { roomPowerLevels ->
roomPowerLevels.isUserAllowedToSend(session.myUserId, true, null)
}