Skip to content
Snippets Groups Projects
Commit 8fa87c70 authored by Taras's avatar Taras
Browse files

Observe create room progress with loading dialog

parent 2067c790
No related branches found
No related tags found
No related merge requests found
......@@ -19,9 +19,16 @@ import org.futo.circles.core.extensions.observeResponse
import org.futo.circles.core.extensions.onBackPressed
import org.futo.circles.core.extensions.setIsVisible
import org.futo.circles.core.feature.picker.helper.MediaPickerHelper
import org.futo.circles.core.feature.room.create.CreateRoomProgressStage.CreateRoom
import org.futo.circles.core.feature.room.create.CreateRoomProgressStage.CreateTimeline
import org.futo.circles.core.feature.room.create.CreateRoomProgressStage.SetParentRelations
import org.futo.circles.core.feature.room.create.CreateRoomProgressStage.SetTimelineRelations
import org.futo.circles.core.feature.select_users.SelectUsersFragment
import org.futo.circles.core.model.AccessLevel
import org.futo.circles.core.model.CircleRoomTypeArg
import org.futo.circles.core.model.MessageLoadingData
import org.futo.circles.core.model.ResLoadingData
import org.futo.circles.core.view.LoadingDialog
import org.matrix.android.sdk.api.session.room.powerlevels.Role
......@@ -36,6 +43,7 @@ class CreateRoomDialogFragment :
private val args: CreateRoomDialogFragmentArgs by navArgs()
private val mediaPickerHelper = MediaPickerHelper(this)
private var selectedUsersFragment: SelectUsersFragment? = null
private val createRoomLoadingDialog by lazy { LoadingDialog(requireContext()) }
private val circleTypeList = AccessLevel.entries.toTypedArray()
private val circleTypeAdapter by lazy {
......@@ -92,6 +100,19 @@ class CreateRoomDialogFragment :
viewModel.createRoomResponseLiveData.observeResponse(this,
success = { onBackPressed() }
)
viewModel.createRoomProgressEventLiveData.observeData(this) { event ->
val loadingData = when (event) {
CreateRoom -> MessageLoadingData(
getString(R.string.creating_room_format, getRoomTypeName())
)
CreateTimeline -> ResLoadingData(R.string.creating_timeline_room)
SetParentRelations -> ResLoadingData(R.string.creating_relations_to_parent)
SetTimelineRelations -> ResLoadingData(R.string.creating_timeline_relations)
else -> ResLoadingData(isLoading = false)
}
createRoomLoadingDialog.handleLoading(loadingData)
}
}
private fun getRoomTypeName() = getString(
......
......@@ -22,6 +22,13 @@ class CreateRoomViewModel @Inject constructor(
val selectedImageLiveData = MutableLiveData<Uri>()
val createRoomResponseLiveData = SingleEventLiveData<Response<String>>()
val createRoomProgressEventLiveData = SingleEventLiveData<CreateRoomProgressStage>()
private val createRoomProgressListener = object : CreateRoomProgressListener {
override fun onProgressUpdated(event: CreateRoomProgressStage) {
createRoomProgressEventLiveData.postValue(event)
}
}
fun setImageUri(uri: Uri) {
selectedImageLiveData.value = uri
......@@ -57,12 +64,14 @@ class CreateRoomViewModel @Inject constructor(
)
}
}
createRoomProgressEventLiveData.postValue(CreateRoomProgressStage.Finished)
createRoomResponseLiveData.postValue(result)
}
}
private suspend fun createGroup(
name: String, topic: String,
name: String,
topic: String,
inviteIds: List<String>?,
defaultUserAccessLevel: AccessLevel
) = dataSource.createRoom(
......@@ -71,7 +80,8 @@ class CreateRoomViewModel @Inject constructor(
name = name,
topic = topic,
inviteIds = inviteIds,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue
defaultUserPowerLevel = defaultUserAccessLevel.levelValue,
progressObserver = createRoomProgressListener
)
private suspend fun createCircle(
......@@ -83,19 +93,22 @@ class CreateRoomViewModel @Inject constructor(
name = name,
iconUri = selectedImageLiveData.value,
inviteIds = inviteIds,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue
defaultUserPowerLevel = defaultUserAccessLevel.levelValue,
progressObserver = createRoomProgressListener
)
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
)
) = dataSource.createRoom(
circlesRoom = Gallery(),
name = name,
iconUri = selectedImageLiveData.value,
inviteIds = inviteIds,
defaultUserPowerLevel = defaultUserAccessLevel.levelValue,
progressObserver = createRoomProgressListener
)
}
\ No newline at end of file
......@@ -253,6 +253,10 @@
<string name="create_your_first_circle_to_be_able_to_invite">Create your first Circle to be able to invite</string>
<string name="create_new_circle">Create new circle</string>
<string name="requests_for_invitation">Request for invitation</string>
<string name="creating_relations_to_parent">Creating relations to parent space</string>
<string name="creating_timeline_relations">Creating timeline room relations</string>
<string name="creating_room_format">Creating %s</string>
<string name="creating_timeline_room">Creating timeline room</string>
<plurals name="invitations_count_format">
<item quantity="one">%d invitation</item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment