Skip to content

Commit 58fc1f9

Browse files
committed
change (preferences) : hide invite avatars (room and sender)
1 parent 546cd20 commit 58fc1f9

File tree

17 files changed

+74
-10
lines changed

17 files changed

+74
-10
lines changed

features/joinroom/impl/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dependencies {
3535
implementation(projects.features.invite.api)
3636
implementation(projects.features.roomdirectory.api)
3737
implementation(projects.services.analytics.api)
38+
implementation(projects.libraries.preferences.api)
3839

3940
testImplementation(libs.test.junit)
4041
testImplementation(libs.coroutines.test)
@@ -45,5 +46,7 @@ dependencies {
4546
testImplementation(projects.libraries.matrix.test)
4647
testImplementation(projects.tests.testutils)
4748
testImplementation(libs.androidx.compose.ui.test.junit)
49+
testImplementation(projects.libraries.preferences.test)
4850
testReleaseImplementation(libs.androidx.compose.ui.test.manifest)
51+
4952
}

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import io.element.android.libraries.matrix.api.room.join.JoinRoom
5050
import io.element.android.libraries.matrix.api.room.join.JoinRule
5151
import io.element.android.libraries.matrix.api.room.preview.RoomPreviewInfo
5252
import io.element.android.libraries.matrix.ui.model.toInviteSender
53+
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
5354
import kotlinx.coroutines.CoroutineScope
5455
import kotlinx.coroutines.launch
5556
import java.util.Optional
@@ -67,6 +68,7 @@ class JoinRoomPresenter @AssistedInject constructor(
6768
private val forgetRoom: ForgetRoom,
6869
private val acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState>,
6970
private val buildMeta: BuildMeta,
71+
private val appPreferencesStore: AppPreferencesStore,
7072
) : Presenter<JoinRoomState> {
7173
interface Factory {
7274
fun create(
@@ -89,6 +91,7 @@ class JoinRoomPresenter @AssistedInject constructor(
8991
val forgetRoomAction: MutableState<AsyncAction<Unit>> = remember { mutableStateOf(AsyncAction.Uninitialized) }
9092
var knockMessage by rememberSaveable { mutableStateOf("") }
9193
var isDismissingContent by remember { mutableStateOf(false) }
94+
val shouldHideAvatars by appPreferencesStore.getHideInviteAvatarsFlow().collectAsState(initial = false)
9295
val contentState by produceState<ContentState>(
9396
initialValue = ContentState.Loading,
9497
key1 = roomInfo,
@@ -193,6 +196,7 @@ class JoinRoomPresenter @AssistedInject constructor(
193196
cancelKnockAction = cancelKnockAction.value,
194197
applicationName = buildMeta.applicationName,
195198
knockMessage = knockMessage,
199+
shouldHideAvatars = shouldHideAvatars,
196200
eventSink = ::handleEvents
197201
)
198202
}

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ data class JoinRoomState(
3131
val cancelKnockAction: AsyncAction<Unit>,
3232
private val applicationName: String,
3333
val knockMessage: String,
34+
val shouldHideAvatars: Boolean,
3435
val eventSink: (JoinRoomEvents) -> Unit
3536
) {
3637
val isJoinActionUnauthorized = joinAction is AsyncAction.Failure && joinAction.error is JoinRoomFailures.UnauthorizedJoin

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomStateProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ fun aJoinRoomState(
171171
forgetAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
172172
cancelKnockAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
173173
knockMessage: String = "",
174+
shouldHideAvatars: Boolean = false,
174175
eventSink: (JoinRoomEvents) -> Unit = {}
175176
) = JoinRoomState(
176177
roomIdOrAlias = roomIdOrAlias,
@@ -182,6 +183,7 @@ fun aJoinRoomState(
182183
forgetAction = forgetAction,
183184
applicationName = "AppName",
184185
knockMessage = knockMessage,
186+
shouldHideAvatars = shouldHideAvatars,
185187
eventSink = eventSink
186188
)
187189

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/JoinRoomView.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ fun JoinRoomView(
9797
roomIdOrAlias = state.roomIdOrAlias,
9898
contentState = state.contentState,
9999
knockMessage = state.knockMessage,
100+
shouldHideAvatars = state.shouldHideAvatars,
100101
onKnockMessageUpdate = { state.eventSink(JoinRoomEvents.UpdateKnockMessage(it)) },
101102
)
102103
},
@@ -371,6 +372,7 @@ private fun JoinRoomContent(
371372
roomIdOrAlias: RoomIdOrAlias,
372373
contentState: ContentState,
373374
knockMessage: String,
375+
shouldHideAvatars: Boolean,
374376
onKnockMessageUpdate: (String) -> Unit,
375377
modifier: Modifier = Modifier,
376378
) {
@@ -385,13 +387,14 @@ private fun JoinRoomContent(
385387
Column(horizontalAlignment = Alignment.CenterHorizontally) {
386388
val inviteSender = (contentState.joinAuthorisationStatus as? JoinAuthorisationStatus.IsInvited)?.inviteSender
387389
if (inviteSender != null) {
388-
InviteSenderView(inviteSender = inviteSender)
390+
InviteSenderView(inviteSender = inviteSender, hideAvatarImage = shouldHideAvatars)
389391
Spacer(modifier = Modifier.height(32.dp))
390392
}
391393
DefaultLoadedContent(
392394
modifier = Modifier.verticalScroll(rememberScrollState()),
393395
contentState = contentState,
394396
knockMessage = knockMessage,
397+
shouldHideAvatars = shouldHideAvatars,
395398
onKnockMessageUpdate = onKnockMessageUpdate
396399
)
397400
}
@@ -474,13 +477,14 @@ private fun IsKnockedLoadedContent(modifier: Modifier = Modifier) {
474477
private fun DefaultLoadedContent(
475478
contentState: ContentState.Loaded,
476479
knockMessage: String,
480+
shouldHideAvatars: Boolean,
477481
onKnockMessageUpdate: (String) -> Unit,
478482
modifier: Modifier = Modifier,
479483
) {
480484
RoomPreviewOrganism(
481485
modifier = modifier,
482486
avatar = {
483-
Avatar(contentState.avatarData(AvatarSize.RoomHeader))
487+
Avatar(contentState.avatarData(AvatarSize.RoomHeader), hideImage = shouldHideAvatars)
484488
},
485489
title = {
486490
if (contentState.name != null) {

features/joinroom/impl/src/main/kotlin/io/element/android/features/joinroom/impl/di/JoinRoomModule.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import io.element.android.libraries.matrix.api.MatrixClient
2121
import io.element.android.libraries.matrix.api.core.RoomId
2222
import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
2323
import io.element.android.libraries.matrix.api.room.join.JoinRoom
24+
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
2425
import java.util.Optional
2526

2627
@Module
@@ -35,6 +36,7 @@ object JoinRoomModule {
3536
forgetRoom: ForgetRoom,
3637
acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState>,
3738
buildMeta: BuildMeta,
39+
appPreferencesStore: AppPreferencesStore,
3840
): JoinRoomPresenter.Factory {
3941
return object : JoinRoomPresenter.Factory {
4042
override fun create(
@@ -57,6 +59,7 @@ object JoinRoomModule {
5759
cancelKnockRoom = cancelKnockRoom,
5860
acceptDeclineInvitePresenter = acceptDeclineInvitePresenter,
5961
buildMeta = buildMeta,
62+
appPreferencesStore = appPreferencesStore,
6063
)
6164
}
6265
}

features/joinroom/impl/src/test/kotlin/io/element/android/features/joinroom/impl/JoinRoomPresenterTest.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import io.element.android.libraries.matrix.test.room.aRoomPreviewInfo
4545
import io.element.android.libraries.matrix.test.room.aRoomSummary
4646
import io.element.android.libraries.matrix.test.room.join.FakeJoinRoom
4747
import io.element.android.libraries.matrix.ui.model.toInviteSender
48+
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
49+
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
4850
import io.element.android.tests.testutils.WarmUpRule
4951
import io.element.android.tests.testutils.lambda.any
5052
import io.element.android.tests.testutils.lambda.assert
@@ -759,7 +761,8 @@ class JoinRoomPresenterTest {
759761
cancelKnockRoom: CancelKnockRoom = FakeCancelKnockRoom(),
760762
forgetRoom: ForgetRoom = FakeForgetRoom(),
761763
buildMeta: BuildMeta = aBuildMeta(applicationName = "AppName"),
762-
acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState> = Presenter { anAcceptDeclineInviteState() }
764+
acceptDeclineInvitePresenter: Presenter<AcceptDeclineInviteState> = Presenter { anAcceptDeclineInviteState() },
765+
appPreferencesStore: AppPreferencesStore = InMemoryAppPreferencesStore()
763766
): JoinRoomPresenter {
764767
return JoinRoomPresenter(
765768
roomId = roomId,
@@ -773,7 +776,8 @@ class JoinRoomPresenterTest {
773776
cancelKnockRoom = cancelKnockRoom,
774777
forgetRoom = forgetRoom,
775778
buildMeta = buildMeta,
776-
acceptDeclineInvitePresenter = acceptDeclineInvitePresenter
779+
acceptDeclineInvitePresenter = acceptDeclineInvitePresenter,
780+
appPreferencesStore = appPreferencesStore,
777781
)
778782
}
779783

features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ class RoomListPresenter @Inject constructor(
117117

118118
// Avatar indicator
119119
val showAvatarIndicator by indicatorService.showRoomListTopBarIndicator()
120+
val hideInvitesAvatar by remember {
121+
appPreferencesStore.getHideInviteAvatarsFlow()
122+
}.collectAsState(initial = false)
120123

121124
val contextMenu = remember { mutableStateOf<RoomListState.ContextMenu>(RoomListState.ContextMenu.Hidden) }
122125

@@ -171,6 +174,7 @@ class RoomListPresenter @Inject constructor(
171174
contentState = contentState,
172175
acceptDeclineInviteState = acceptDeclineInviteState,
173176
directLogoutState = directLogoutState,
177+
hideInvitesAvatars = hideInvitesAvatar,
174178
eventSink = ::handleEvents,
175179
)
176180
}

features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ data class RoomListState(
3434
val contentState: RoomListContentState,
3535
val acceptDeclineInviteState: AcceptDeclineInviteState,
3636
val directLogoutState: DirectLogoutState,
37+
val hideInvitesAvatars: Boolean,
3738
val eventSink: (RoomListEvents) -> Unit,
3839
) {
3940
val displayFilters = contentState is RoomListContentState.Rooms

features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ internal fun aRoomListState(
6161
contentState: RoomListContentState = aRoomsContentState(),
6262
acceptDeclineInviteState: AcceptDeclineInviteState = anAcceptDeclineInviteState(),
6363
directLogoutState: DirectLogoutState = aDirectLogoutState(),
64+
hideInvitesAvatars: Boolean = false,
6465
eventSink: (RoomListEvents) -> Unit = {}
6566
) = RoomListState(
6667
matrixUser = matrixUser,
@@ -75,6 +76,7 @@ internal fun aRoomListState(
7576
contentState = contentState,
7677
acceptDeclineInviteState = acceptDeclineInviteState,
7778
directLogoutState = directLogoutState,
79+
hideInvitesAvatars = hideInvitesAvatars,
7880
eventSink = eventSink,
7981
)
8082

0 commit comments

Comments
 (0)