Merge pull request #3635 from vector-im/feature/bma/crash_room_aliases
Fix crash in room aliases
This commit is contained in:
commit
e9da63e3ee
|
@ -0,0 +1 @@
|
||||||
|
Crash when opening room addresses screen with no internet connection
|
|
@ -0,0 +1 @@
|
||||||
|
Add retry support in room addresses screen
|
|
@ -36,4 +36,7 @@ sealed class RoomAliasAction : VectorViewModelAction {
|
||||||
object ToggleAddLocalAliasForm : RoomAliasAction()
|
object ToggleAddLocalAliasForm : RoomAliasAction()
|
||||||
data class SetNewLocalAliasLocalPart(val aliasLocalPart: String) : RoomAliasAction()
|
data class SetNewLocalAliasLocalPart(val aliasLocalPart: String) : RoomAliasAction()
|
||||||
object AddLocalAlias : RoomAliasAction()
|
object AddLocalAlias : RoomAliasAction()
|
||||||
|
|
||||||
|
// Retry to fetch data in error
|
||||||
|
object Retry : RoomAliasAction()
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@ class RoomAliasController @Inject constructor(
|
||||||
fun setNewLocalAliasLocalPart(aliasLocalPart: String)
|
fun setNewLocalAliasLocalPart(aliasLocalPart: String)
|
||||||
fun addLocalAlias()
|
fun addLocalAlias()
|
||||||
fun openAliasDetail(alias: String)
|
fun openAliasDetail(alias: String)
|
||||||
|
fun retry()
|
||||||
}
|
}
|
||||||
|
|
||||||
var callback: Callback? = null
|
var callback: Callback? = null
|
||||||
|
@ -99,8 +100,10 @@ class RoomAliasController @Inject constructor(
|
||||||
}
|
}
|
||||||
is Fail -> {
|
is Fail -> {
|
||||||
errorWithRetryItem {
|
errorWithRetryItem {
|
||||||
|
id("rd_error")
|
||||||
text(host.stringProvider.getString(R.string.room_alias_publish_to_directory_error,
|
text(host.stringProvider.getString(R.string.room_alias_publish_to_directory_error,
|
||||||
host.errorFormatter.toHumanReadable(data.roomDirectoryVisibility.error)))
|
host.errorFormatter.toHumanReadable(data.roomDirectoryVisibility.error)))
|
||||||
|
listener { host.callback?.retry() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,7 +122,6 @@ class RoomAliasController @Inject constructor(
|
||||||
data.canonicalAlias
|
data.canonicalAlias
|
||||||
?.takeIf { it.isNotEmpty() }
|
?.takeIf { it.isNotEmpty() }
|
||||||
?.let { canonicalAlias ->
|
?.let { canonicalAlias ->
|
||||||
|
|
||||||
profileActionItem {
|
profileActionItem {
|
||||||
id("canonical")
|
id("canonical")
|
||||||
title(data.canonicalAlias)
|
title(data.canonicalAlias)
|
||||||
|
@ -224,6 +226,7 @@ class RoomAliasController @Inject constructor(
|
||||||
errorWithRetryItem {
|
errorWithRetryItem {
|
||||||
id("alt_error")
|
id("alt_error")
|
||||||
text(host.errorFormatter.toHumanReadable(localAliases.error))
|
text(host.errorFormatter.toHumanReadable(localAliases.error))
|
||||||
|
listener { host.callback?.retry() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,10 @@ class RoomAliasFragment @Inject constructor(
|
||||||
.show(childFragmentManager, "ROOM_ALIAS_ACTIONS")
|
.show(childFragmentManager, "ROOM_ALIAS_ACTIONS")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun retry() {
|
||||||
|
viewModel.handle(RoomAliasAction.Retry)
|
||||||
|
}
|
||||||
|
|
||||||
private fun removeLocalAlias(alias: String) {
|
private fun removeLocalAlias(alias: String) {
|
||||||
MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Vector_MaterialAlertDialog_Destructive)
|
MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Vector_MaterialAlertDialog_Destructive)
|
||||||
.setTitle(R.string.dialog_title_confirmation)
|
.setTitle(R.string.dialog_title_confirmation)
|
||||||
|
|
|
@ -25,8 +25,8 @@ import com.airbnb.mvrx.Success
|
||||||
import com.airbnb.mvrx.Uninitialized
|
import com.airbnb.mvrx.Uninitialized
|
||||||
import com.airbnb.mvrx.ViewModelContext
|
import com.airbnb.mvrx.ViewModelContext
|
||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedInject
|
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
|
import dagger.assisted.AssistedInject
|
||||||
import im.vector.app.core.extensions.exhaustive
|
import im.vector.app.core.extensions.exhaustive
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
|
import im.vector.app.features.powerlevel.PowerLevelsObservableFactory
|
||||||
|
@ -199,9 +199,19 @@ class RoomAliasViewModel @AssistedInject constructor(@Assisted initialState: Roo
|
||||||
RoomAliasAction.AddLocalAlias -> handleAddLocalAlias()
|
RoomAliasAction.AddLocalAlias -> handleAddLocalAlias()
|
||||||
is RoomAliasAction.RemoveLocalAlias -> handleRemoveLocalAlias(action)
|
is RoomAliasAction.RemoveLocalAlias -> handleRemoveLocalAlias(action)
|
||||||
is RoomAliasAction.PublishAlias -> handlePublishAlias(action)
|
is RoomAliasAction.PublishAlias -> handlePublishAlias(action)
|
||||||
|
RoomAliasAction.Retry -> handleRetry()
|
||||||
}.exhaustive
|
}.exhaustive
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleRetry() = withState { state ->
|
||||||
|
if (state.localAliases is Fail) {
|
||||||
|
fetchRoomAlias()
|
||||||
|
}
|
||||||
|
if (state.roomDirectoryVisibility is Fail) {
|
||||||
|
fetchRoomDirectoryVisibility()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleSetRoomDirectoryVisibility(action: RoomAliasAction.SetRoomDirectoryVisibility) {
|
private fun handleSetRoomDirectoryVisibility(action: RoomAliasAction.SetRoomDirectoryVisibility) {
|
||||||
postLoading(true)
|
postLoading(true)
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
|
|
Loading…
Reference in New Issue