diff --git a/changelog.d/3634.bugfix b/changelog.d/3634.bugfix new file mode 100644 index 0000000000..0b1f007030 --- /dev/null +++ b/changelog.d/3634.bugfix @@ -0,0 +1 @@ +Crash when opening room addresses screen with no internet connection \ No newline at end of file diff --git a/changelog.d/3635.feature b/changelog.d/3635.feature new file mode 100644 index 0000000000..30d2cc64b4 --- /dev/null +++ b/changelog.d/3635.feature @@ -0,0 +1 @@ +Add retry support in room addresses screen \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasAction.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasAction.kt index 80e1603453..e83f9f4aa2 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasAction.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasAction.kt @@ -36,4 +36,7 @@ sealed class RoomAliasAction : VectorViewModelAction { object ToggleAddLocalAliasForm : RoomAliasAction() data class SetNewLocalAliasLocalPart(val aliasLocalPart: String) : RoomAliasAction() object AddLocalAlias : RoomAliasAction() + + // Retry to fetch data in error + object Retry : RoomAliasAction() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasController.kt index 4a683b6292..a14bb61606 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasController.kt @@ -57,6 +57,7 @@ class RoomAliasController @Inject constructor( fun setNewLocalAliasLocalPart(aliasLocalPart: String) fun addLocalAlias() fun openAliasDetail(alias: String) + fun retry() } var callback: Callback? = null @@ -99,8 +100,10 @@ class RoomAliasController @Inject constructor( } is Fail -> { errorWithRetryItem { + id("rd_error") text(host.stringProvider.getString(R.string.room_alias_publish_to_directory_error, host.errorFormatter.toHumanReadable(data.roomDirectoryVisibility.error))) + listener { host.callback?.retry() } } } } @@ -119,7 +122,6 @@ class RoomAliasController @Inject constructor( data.canonicalAlias ?.takeIf { it.isNotEmpty() } ?.let { canonicalAlias -> - profileActionItem { id("canonical") title(data.canonicalAlias) @@ -224,6 +226,7 @@ class RoomAliasController @Inject constructor( errorWithRetryItem { id("alt_error") text(host.errorFormatter.toHumanReadable(localAliases.error)) + listener { host.callback?.retry() } } } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt index 3f429737f2..36dbf7bf8c 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasFragment.kt @@ -181,6 +181,10 @@ class RoomAliasFragment @Inject constructor( .show(childFragmentManager, "ROOM_ALIAS_ACTIONS") } + override fun retry() { + viewModel.handle(RoomAliasAction.Retry) + } + private fun removeLocalAlias(alias: String) { MaterialAlertDialogBuilder(requireContext(), R.style.ThemeOverlay_Vector_MaterialAlertDialog_Destructive) .setTitle(R.string.dialog_title_confirmation) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt index b8a0149198..aa9981997c 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/alias/RoomAliasViewModel.kt @@ -25,8 +25,8 @@ import com.airbnb.mvrx.Success import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import dagger.assisted.Assisted -import dagger.assisted.AssistedInject import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.powerlevel.PowerLevelsObservableFactory @@ -199,9 +199,19 @@ class RoomAliasViewModel @AssistedInject constructor(@Assisted initialState: Roo RoomAliasAction.AddLocalAlias -> handleAddLocalAlias() is RoomAliasAction.RemoveLocalAlias -> handleRemoveLocalAlias(action) is RoomAliasAction.PublishAlias -> handlePublishAlias(action) + RoomAliasAction.Retry -> handleRetry() }.exhaustive } + private fun handleRetry() = withState { state -> + if (state.localAliases is Fail) { + fetchRoomAlias() + } + if (state.roomDirectoryVisibility is Fail) { + fetchRoomDirectoryVisibility() + } + } + private fun handleSetRoomDirectoryVisibility(action: RoomAliasAction.SetRoomDirectoryVisibility) { postLoading(true) viewModelScope.launch {