From 04c52c5a375b000cc178aba8b9388668e6528b19 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Mon, 4 Mar 2024 18:27:33 +0200 Subject: [PATCH] Set power level on create room --- .../room/create/CreateRoomDataSource.kt | 28 +++++--- .../room/create/CreateRoomDialogFragment.kt | 4 +- .../room/create/CreateRoomViewModel.kt | 69 ++++++++++++++----- 3 files changed, 73 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDataSource.kt index f29bb8878..f902c5d10 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDataSource.kt @@ -6,6 +6,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import org.futo.circles.core.feature.room.RoomRelationsBuilder import org.futo.circles.core.feature.workspace.SharedCircleDataSource import org.futo.circles.core.feature.workspace.SpacesTreeAccountDataSource +import org.futo.circles.core.model.AccessLevel import org.futo.circles.core.model.Circle import org.futo.circles.core.model.CirclesRoom import org.futo.circles.core.model.Timeline @@ -39,18 +40,23 @@ class CreateRoomDataSource @Inject constructor( topic: String? = null, iconUri: Uri? = null, inviteIds: List<String>? = null, - isPublicCircle: Boolean = false + isPublicCircle: Boolean = false, + defaultUserPowerLevel: Int = AccessLevel.User.levelValue ): String { val id = session.roomService().createRoom( - getParams(circlesRoom, name, topic, iconUri, inviteIds) + getParams(circlesRoom, name, topic, iconUri, inviteIds, defaultUserPowerLevel) ) circlesRoom.parentAccountDataKey?.let { key -> val parentId = spacesTreeAccountDataSource.getRoomIdByKey(key) parentId?.let { roomRelationsBuilder.setRelations(id, it) } } if (circlesRoom is Circle) { - val timelineId = createCircleTimeline(id, - name ?: circlesRoom.nameId?.let { context.getString(it) }, iconUri, inviteIds + val timelineId = createCircleTimeline( + id, + name ?: circlesRoom.nameId?.let { context.getString(it) }, + iconUri, + inviteIds, + defaultUserPowerLevel ) if (isPublicCircle) sharedCircleDataSource.addToSharedCircles(timelineId) } @@ -61,9 +67,11 @@ class CreateRoomDataSource @Inject constructor( circleId: String, name: String? = null, iconUri: Uri? = null, - inviteIds: List<String>? = null + inviteIds: List<String>? = null, + defaultUserPowerLevel: Int = AccessLevel.User.levelValue ): String { - val timelineId = createRoom(Timeline(), name, null, iconUri, inviteIds) + val timelineId = + createRoom(Timeline(), name, null, iconUri, inviteIds, false, defaultUserPowerLevel) roomRelationsBuilder.setRelations(timelineId, circleId) return timelineId } @@ -73,7 +81,8 @@ class CreateRoomDataSource @Inject constructor( name: String? = null, topic: String? = null, iconUri: Uri? = null, - inviteIds: List<String>? = null + inviteIds: List<String>? = null, + defaultUserPowerLevel: Int = AccessLevel.User.levelValue ): CreateRoomParams { val params = if (circlesRoom.isSpace()) { CreateSpaceParams() @@ -81,7 +90,10 @@ class CreateRoomDataSource @Inject constructor( CreateRoomParams().apply { visibility = RoomDirectoryVisibility.PRIVATE historyVisibility = RoomHistoryVisibility.SHARED - powerLevelContentOverride = PowerLevelsContent(invite = Role.Moderator.value) + powerLevelContentOverride = PowerLevelsContent( + invite = Role.Moderator.value, + usersDefault = defaultUserPowerLevel + ) enableEncryption() } } diff --git a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDialogFragment.kt b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDialogFragment.kt index 0846b1902..ab605d6b6 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDialogFragment.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomDialogFragment.kt @@ -118,7 +118,9 @@ class CreateRoomDialogFragment : binding.tilTopic.getText(), selectedUsersFragment?.getSelectedUsersIds(), roomType, - binding.btnPublic.isChecked + binding.btnPublic.isChecked, + AccessLevel.entries.getOrNull(binding.spUserRole.selectedItemPosition) + ?: AccessLevel.User ) } diff --git a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomViewModel.kt b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomViewModel.kt index cda1c6088..a596c514f 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomViewModel.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/create/CreateRoomViewModel.kt @@ -8,6 +8,7 @@ import org.futo.circles.core.base.SingleEventLiveData import org.futo.circles.core.extensions.Response import org.futo.circles.core.extensions.createResult import org.futo.circles.core.extensions.launchBg +import org.futo.circles.core.model.AccessLevel import org.futo.circles.core.model.Circle import org.futo.circles.core.model.CircleRoomTypeArg import org.futo.circles.core.model.Gallery @@ -31,44 +32,74 @@ class CreateRoomViewModel @Inject constructor( topic: String, inviteIds: List<String>?, roomType: CircleRoomTypeArg, - isPublicCircle: Boolean + isPublicCircle: Boolean, + defaultUserAccessLevel: AccessLevel ) { launchBg { val result = createResult { when (roomType) { - CircleRoomTypeArg.Circle -> createCircle(name, inviteIds, isPublicCircle) - CircleRoomTypeArg.Group -> createGroup(name, topic, inviteIds) - CircleRoomTypeArg.Photo -> createGallery(name) + CircleRoomTypeArg.Circle -> createCircle( + name, + inviteIds, + isPublicCircle, + defaultUserAccessLevel + ) + + CircleRoomTypeArg.Group -> createGroup( + name, + topic, + inviteIds, + defaultUserAccessLevel + ) + + CircleRoomTypeArg.Photo -> createGallery( + name, + inviteIds, + defaultUserAccessLevel + ) } } createRoomResponseLiveData.postValue(result) } } - private suspend fun createGroup(name: String, topic: String, inviteIds: List<String>?) = - dataSource.createRoom( - circlesRoom = Group(), - iconUri = selectedImageLiveData.value, - name = name, - topic = topic, - inviteIds = inviteIds - ) + private suspend fun createGroup( + name: String, topic: String, + inviteIds: List<String>?, + defaultUserAccessLevel: AccessLevel + ) = dataSource.createRoom( + circlesRoom = Group(), + iconUri = selectedImageLiveData.value, + name = name, + topic = topic, + inviteIds = inviteIds, + defaultUserPowerLevel = defaultUserAccessLevel.levelValue + ) private suspend fun createCircle( name: String, inviteIds: List<String>?, - isPublicCircle: Boolean + isPublicCircle: Boolean, + defaultUserAccessLevel: AccessLevel ) = dataSource.createRoom( circlesRoom = Circle(), name = name, iconUri = selectedImageLiveData.value, inviteIds = inviteIds, - isPublicCircle = isPublicCircle + isPublicCircle = isPublicCircle, + defaultUserPowerLevel = defaultUserAccessLevel.levelValue ) - private suspend fun createGallery(name: String) = dataSource.createRoom( - circlesRoom = Gallery(), - name = name, - iconUri = selectedImageLiveData.value - ) + private suspend fun createGallery( + name: String, + inviteIds: List<String>?, + defaultUserAccessLevel: AccessLevel + ) = + dataSource.createRoom( + circlesRoom = Gallery(), + name = name, + iconUri = selectedImageLiveData.value, + inviteIds = inviteIds, + defaultUserPowerLevel = defaultUserAccessLevel.levelValue + ) } \ No newline at end of file -- GitLab