Merge pull request #3635 from vector-im/feature/bma/crash_room_aliases

Fix crash in room aliases
This commit is contained in:
Benoit Marty 2021-07-06 12:15:37 +02:00 committed by GitHub
commit e9da63e3ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 24 additions and 2 deletions

1
changelog.d/3634.bugfix Normal file
View File

@ -0,0 +1 @@
Crash when opening room addresses screen with no internet connection

1
changelog.d/3635.feature Normal file
View File

@ -0,0 +1 @@
Add retry support in room addresses screen

View File

@ -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()
} }

View File

@ -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() }
} }
} }
} }

View File

@ -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)

View File

@ -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 {