create room : add Knock feature flag
This commit is contained in:
parent
2c107eeab3
commit
5255b03aca
6 changed files with 50 additions and 10 deletions
|
|
@ -40,6 +40,7 @@ dependencies {
|
||||||
implementation(projects.libraries.usersearch.impl)
|
implementation(projects.libraries.usersearch.impl)
|
||||||
implementation(projects.services.analytics.api)
|
implementation(projects.services.analytics.api)
|
||||||
implementation(libs.coil.compose)
|
implementation(libs.coil.compose)
|
||||||
|
implementation(projects.libraries.featureflag.api)
|
||||||
api(projects.features.createroom.api)
|
api(projects.features.createroom.api)
|
||||||
|
|
||||||
testImplementation(libs.test.junit)
|
testImplementation(libs.test.junit)
|
||||||
|
|
@ -56,6 +57,7 @@ dependencies {
|
||||||
testImplementation(projects.libraries.permissions.test)
|
testImplementation(projects.libraries.permissions.test)
|
||||||
testImplementation(projects.libraries.usersearch.test)
|
testImplementation(projects.libraries.usersearch.test)
|
||||||
testImplementation(projects.features.createroom.test)
|
testImplementation(projects.features.createroom.test)
|
||||||
|
testImplementation(projects.libraries.featureflag.test)
|
||||||
testImplementation(projects.tests.testutils)
|
testImplementation(projects.tests.testutils)
|
||||||
testImplementation(libs.androidx.compose.ui.test.junit)
|
testImplementation(libs.androidx.compose.ui.test.junit)
|
||||||
testReleaseImplementation(libs.androidx.compose.ui.test.manifest)
|
testReleaseImplementation(libs.androidx.compose.ui.test.manifest)
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runUpdatingState
|
import io.element.android.libraries.architecture.runUpdatingState
|
||||||
import io.element.android.libraries.core.mimetype.MimeTypes
|
import io.element.android.libraries.core.mimetype.MimeTypes
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||||
|
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
import io.element.android.libraries.matrix.api.createroom.CreateRoomParameters
|
||||||
|
|
@ -49,6 +51,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
private val mediaPreProcessor: MediaPreProcessor,
|
private val mediaPreProcessor: MediaPreProcessor,
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
permissionsPresenterFactory: PermissionsPresenter.Factory,
|
||||||
|
private val featureFlagService: FeatureFlagService,
|
||||||
) : Presenter<ConfigureRoomState> {
|
) : Presenter<ConfigureRoomState> {
|
||||||
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
||||||
private var pendingPermissionRequest = false
|
private var pendingPermissionRequest = false
|
||||||
|
|
@ -58,6 +61,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
val cameraPermissionState = cameraPermissionPresenter.present()
|
val cameraPermissionState = cameraPermissionPresenter.present()
|
||||||
val createRoomConfig = dataStore.createRoomConfig.collectAsState(CreateRoomConfig())
|
val createRoomConfig = dataStore.createRoomConfig.collectAsState(CreateRoomConfig())
|
||||||
val homeserverName = remember { matrixClient.userIdServerName() }
|
val homeserverName = remember { matrixClient.userIdServerName() }
|
||||||
|
val isKnockFeatureEnabled by featureFlagService.isFeatureEnabledFlow(FeatureFlags.Knock).collectAsState(initial = false)
|
||||||
|
|
||||||
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker(
|
val cameraPhotoPicker = mediaPickerProvider.registerCameraPhotoPicker(
|
||||||
onResult = { uri -> if (uri != null) dataStore.setAvatarUri(uri = uri, cached = true) },
|
onResult = { uri -> if (uri != null) dataStore.setAvatarUri(uri = uri, cached = true) },
|
||||||
|
|
@ -119,6 +123,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
return ConfigureRoomState(
|
return ConfigureRoomState(
|
||||||
|
isKnockFeatureEnabled = isKnockFeatureEnabled,
|
||||||
config = createRoomConfig.value,
|
config = createRoomConfig.value,
|
||||||
avatarActions = avatarActions,
|
avatarActions = avatarActions,
|
||||||
createRoomAction = createRoomAction.value,
|
createRoomAction = createRoomAction.value,
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.permissions.api.PermissionsState
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
|
||||||
data class ConfigureRoomState(
|
data class ConfigureRoomState(
|
||||||
|
val isKnockFeatureEnabled: Boolean,
|
||||||
val config: CreateRoomConfig,
|
val config: CreateRoomConfig,
|
||||||
val avatarActions: ImmutableList<AvatarAction>,
|
val avatarActions: ImmutableList<AvatarAction>,
|
||||||
val createRoomAction: AsyncAction<RoomId>,
|
val createRoomAction: AsyncAction<RoomId>,
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,10 @@ package io.element.android.features.createroom.impl.configureroom
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.createroom.impl.CreateRoomConfig
|
import io.element.android.features.createroom.impl.CreateRoomConfig
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
import io.element.android.libraries.matrix.ui.components.aMatrixUserList
|
||||||
|
import io.element.android.libraries.matrix.ui.media.AvatarAction
|
||||||
|
import io.element.android.libraries.permissions.api.PermissionsState
|
||||||
import io.element.android.libraries.permissions.api.aPermissionsState
|
import io.element.android.libraries.permissions.api.aPermissionsState
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
|
@ -19,7 +22,20 @@ open class ConfigureRoomStateProvider : PreviewParameterProvider<ConfigureRoomSt
|
||||||
override val values: Sequence<ConfigureRoomState>
|
override val values: Sequence<ConfigureRoomState>
|
||||||
get() = sequenceOf(
|
get() = sequenceOf(
|
||||||
aConfigureRoomState(),
|
aConfigureRoomState(),
|
||||||
aConfigureRoomState().copy(
|
aConfigureRoomState(
|
||||||
|
config = CreateRoomConfig(
|
||||||
|
roomName = "Room 101",
|
||||||
|
topic = "Room topic for this room when the text goes onto multiple lines and is really long, there shouldn’t be more than 3 lines",
|
||||||
|
invites = aMatrixUserList().toImmutableList(),
|
||||||
|
roomVisibility = RoomVisibilityState.Public(
|
||||||
|
roomAddress = RoomAddress.AutoFilled("Room 101"),
|
||||||
|
roomAccess = RoomAccess.Knocking,
|
||||||
|
roomAddressErrorState = RoomAddressErrorState.None,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
aConfigureRoomState(
|
||||||
|
isKnockFeatureEnabled = false,
|
||||||
config = CreateRoomConfig(
|
config = CreateRoomConfig(
|
||||||
roomName = "Room 101",
|
roomName = "Room 101",
|
||||||
topic = "Room topic for this room when the text goes onto multiple lines and is really long, there shouldn’t be more than 3 lines",
|
topic = "Room topic for this room when the text goes onto multiple lines and is really long, there shouldn’t be more than 3 lines",
|
||||||
|
|
@ -34,11 +50,20 @@ open class ConfigureRoomStateProvider : PreviewParameterProvider<ConfigureRoomSt
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun aConfigureRoomState() = ConfigureRoomState(
|
fun aConfigureRoomState(
|
||||||
config = CreateRoomConfig(),
|
config: CreateRoomConfig = CreateRoomConfig(),
|
||||||
avatarActions = persistentListOf(),
|
isKnockFeatureEnabled: Boolean = true,
|
||||||
createRoomAction = AsyncAction.Uninitialized,
|
avatarActions: List<AvatarAction> = emptyList(),
|
||||||
cameraPermissionState = aPermissionsState(showDialog = false),
|
createRoomAction: AsyncAction<RoomId> = AsyncAction.Uninitialized,
|
||||||
homeserverName = "matrix.org",
|
cameraPermissionState: PermissionsState = aPermissionsState(showDialog = false),
|
||||||
eventSink = { },
|
homeserverName: String = "matrix.org",
|
||||||
|
eventSink: (ConfigureRoomEvents) -> Unit = { },
|
||||||
|
) = ConfigureRoomState(
|
||||||
|
config = config,
|
||||||
|
isKnockFeatureEnabled = isKnockFeatureEnabled,
|
||||||
|
avatarActions = avatarActions.toImmutableList(),
|
||||||
|
createRoomAction = createRoomAction,
|
||||||
|
cameraPermissionState = cameraPermissionState,
|
||||||
|
homeserverName = homeserverName,
|
||||||
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -127,7 +127,7 @@ fun ConfigureRoomView(
|
||||||
state.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(it))
|
state.eventSink(ConfigureRoomEvents.RoomVisibilityChanged(it))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if (state.config.roomVisibility is RoomVisibilityState.Public) {
|
if (state.config.roomVisibility is RoomVisibilityState.Public && state.isKnockFeatureEnabled) {
|
||||||
RoomAccessOptions(
|
RoomAccessOptions(
|
||||||
selected = when (state.config.roomVisibility.roomAccess) {
|
selected = when (state.config.roomVisibility.roomAccess) {
|
||||||
RoomAccess.Anyone -> RoomAccessItem.Anyone
|
RoomAccess.Anyone -> RoomAccessItem.Anyone
|
||||||
|
|
|
||||||
|
|
@ -124,5 +124,12 @@ enum class FeatureFlags(
|
||||||
" You'll have to stop and re-open the app manually for that setting to take effect.",
|
" You'll have to stop and re-open the app manually for that setting to take effect.",
|
||||||
defaultValue = { false },
|
defaultValue = { false },
|
||||||
isFinished = false,
|
isFinished = false,
|
||||||
)
|
),
|
||||||
|
Knock(
|
||||||
|
key = "feature.knock",
|
||||||
|
title = "Ask to join",
|
||||||
|
description = "Allow creating rooms which users can request access to.",
|
||||||
|
defaultValue = { false },
|
||||||
|
isFinished = false,
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue