Use presenter factory

This commit is contained in:
Benoit Marty 2023-03-22 12:04:22 +01:00 committed by Benoit Marty
parent 9c6bc8d872
commit 08fa22069b
9 changed files with 67 additions and 38 deletions

View file

@ -48,6 +48,7 @@ dependencies {
implementation(projects.libraries.designsystem)
implementation(projects.libraries.elementresources)
implementation(projects.libraries.permissions.api)
implementation(projects.libraries.permissions.noop)
implementation(projects.libraries.testtags)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.dateformatter.api)

View file

@ -46,7 +46,7 @@ import io.element.android.libraries.matrix.api.verification.SessionVerificationS
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
import io.element.android.libraries.matrix.ui.model.MatrixUser
import io.element.android.libraries.permissions.api.PermissionsPresenter
import io.element.android.libraries.permissions.api.createDummyPostNotificationPermissionsState
import io.element.android.libraries.permissions.noop.NoopPermissionsPresenter
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
@ -63,11 +63,20 @@ class RoomListPresenter @Inject constructor(
private val roomLastMessageFormatter: RoomLastMessageFormatter,
private val sessionVerificationService: SessionVerificationService,
private val snackbarDispatcher: SnackbarDispatcher,
private val permissionsPresenter: PermissionsPresenter,
private val permissionsPresenterFactory: PermissionsPresenter.Factory,
) : Presenter<RoomListState> {
private val roomMembershipObserver: RoomMembershipObserver = client.roomMembershipObserver()
private val postNotificationPermissionsPresenter by lazy {
// Ask for POST_NOTIFICATION PERMISSION on Android 13+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissionsPresenterFactory.create(Manifest.permission.POST_NOTIFICATIONS)
} else {
NoopPermissionsPresenter()
}
}
@Composable
override fun present(): RoomListState {
val matrixUser: MutableState<MatrixUser?> = remember {
@ -110,13 +119,7 @@ class RoomListPresenter @Inject constructor(
val snackbarMessage = handleSnackbarMessage(snackbarDispatcher)
// Ask for POST_NOTIFICATION PERMISSION on Android 13+
val permissionsState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissionsPresenter.setParameter(Manifest.permission.POST_NOTIFICATIONS)
permissionsPresenter.present()
} else {
createDummyPostNotificationPermissionsState()
}
val permissionsState = postNotificationPermissionsPresenter.present()
return RoomListState(
matrixUser = matrixUser.value,

View file

@ -37,7 +37,7 @@ import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.room.FakeRoomSummaryDataSource
import io.element.android.libraries.matrix.test.room.aRoomSummaryFilled
import io.element.android.libraries.matrix.test.verification.FakeSessionVerificationService
import io.element.android.libraries.permissions.noop.NoopPermissionsPresenter
import io.element.android.libraries.permissions.noop.NoopPermissionsPresenterFactory
import kotlinx.coroutines.test.runTest
import org.junit.Test
@ -51,7 +51,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -79,7 +79,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -101,7 +101,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -127,7 +127,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -158,7 +158,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -194,7 +194,7 @@ class RoomListPresenterTests {
FakeRoomLastMessageFormatter(),
FakeSessionVerificationService(),
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()
@ -244,7 +244,7 @@ class RoomListPresenterTests {
givenVerifiedStatus(SessionVerifiedStatus.NotVerified)
},
SnackbarDispatcher(),
NoopPermissionsPresenter(),
NoopPermissionsPresenterFactory(),
)
moleculeFlow(RecompositionClock.Immediate) {
presenter.present()