diff --git a/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt b/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt index d5bc728bd9..a8f424bd08 100644 --- a/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt +++ b/appconfig/src/main/kotlin/io/element/android/appconfig/MatrixConfiguration.kt @@ -10,7 +10,4 @@ package io.element.android.appconfig object MatrixConfiguration { const val MATRIX_TO_PERMALINK_BASE_URL: String = "https://matrix.to/#/" val clientPermalinkBaseUrl: String? = null - - // TODO remove this when report is fixed - const val CAN_REPORT_ROOM = false } diff --git a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt index a234bb019b..cbe710b2dd 100644 --- a/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt +++ b/features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.setValue import dagger.assisted.Assisted import dagger.assisted.AssistedInject import im.vector.app.features.analytics.plan.JoinedRoom -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteState @@ -100,6 +99,8 @@ class JoinRoomPresenter @AssistedInject constructor( val hideInviteAvatars by remember { appPreferencesStore.getHideInviteAvatarsFlow() }.collectAsState(initial = false) + val canReportRoom by produceState(false) { value = matrixClient.canReportRoom() } + val contentState by produceState( initialValue = ContentState.Loading, key1 = roomInfo, @@ -212,7 +213,7 @@ class JoinRoomPresenter @AssistedInject constructor( applicationName = buildMeta.applicationName, knockMessage = knockMessage, hideInviteAvatars = hideInviteAvatars, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt index e70430c8bf..51fda0f7bc 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/RoomDetailsPresenter.kt @@ -17,7 +17,6 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import im.vector.app.features.analytics.plan.Interaction -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.leaveroom.api.LeaveRoomEvent import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.messages.api.pinned.IsPinnedMessagesFeatureEnabled @@ -180,6 +179,8 @@ class RoomDetailsPresenter @Inject constructor( .launchIn(this) } + val canReportRoom by produceState(false) { value = client.canReportRoom() } + return RoomDetailsState( roomId = room.roomId, roomName = roomName, @@ -208,7 +209,7 @@ class RoomDetailsPresenter @Inject constructor( knockRequestsCount = knockRequestsCount, canShowSecurityAndPrivacy = canShowSecurityAndPrivacy, hasMemberVerificationViolations = hasMemberVerificationViolations, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents, ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 07029b7026..98b5e742a2 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshotFlow import im.vector.app.features.analytics.plan.Interaction -import io.element.android.appconfig.MatrixConfiguration import io.element.android.features.invite.api.SeenInvitesStore import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.AcceptInvite import io.element.android.features.invite.api.acceptdecline.AcceptDeclineInviteEvents.DeclineInvite @@ -165,6 +164,8 @@ class RoomListPresenter @Inject constructor( val contentState = roomListContentState(securityBannerDismissed) + val canReportRoom by produceState(false) { value = client.canReportRoom() } + return RoomListState( matrixUser = matrixUser.value, showAvatarIndicator = showAvatarIndicator, @@ -180,7 +181,7 @@ class RoomListPresenter @Inject constructor( acceptDeclineInviteState = acceptDeclineInviteState, directLogoutState = directLogoutState, hideInvitesAvatars = hideInvitesAvatar, - canReportRoom = MatrixConfiguration.CAN_REPORT_ROOM, + canReportRoom = canReportRoom, eventSink = ::handleEvents, ) } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index a1b2079809..56d3bfa1e2 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -162,6 +162,11 @@ interface MatrixClient { fun canDeactivateAccount(): Boolean suspend fun deactivateAccount(password: String, eraseData: Boolean): Result + + /** + * Check if the user can report a room. + */ + suspend fun canReportRoom(): Boolean } /** diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 9dba6fc589..5f1176b081 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -666,6 +666,12 @@ class RustMatrixClient( } } + override suspend fun canReportRoom(): Boolean = withContext(sessionDispatcher) { + runCatching { + innerClient.isReportRoomApiSupported() + }.getOrDefault(false) + } + private suspend fun File.getCacheSize( includeCryptoDb: Boolean = false, ): Long = withContext(sessionDispatcher) { diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 6ef4eec136..bc4fc085df 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -88,6 +88,7 @@ class FakeMatrixClient( private val availableSlidingSyncVersionsLambda: () -> Result> = { lambdaError() }, private val ignoreUserResult: (UserId) -> Result = { lambdaError() }, private var unIgnoreUserResult: (UserId) -> Result = { Result.success(Unit) }, + private val canReportRoomLambda: () -> Boolean = { false }, override val ignoredUsersFlow: StateFlow> = MutableStateFlow(persistentListOf()), ) : MatrixClient { var setDisplayNameCalled: Boolean = false @@ -329,4 +330,8 @@ class FakeMatrixClient( override suspend fun availableSlidingSyncVersions(): Result> { return availableSlidingSyncVersionsLambda() } + + override suspend fun canReportRoom(): Boolean { + return canReportRoomLambda() + } }