diff --git a/CHANGES.md b/CHANGES.md index 3f2657a65c..337e61afb4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Improvements 🙌: - "Add Matrix app" menu is now always visible (#1495) - Handle `/op`, `/deop`, and `/nick` commands (#12) - Prioritising Recovery key over Recovery passphrase (#1463) + - Room Settings: Name, Topic, Photo, Aliases, History Visibility (#1455) Bugfix 🐛: - Fix dark theme issue on login screen (#1097) diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsController.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsController.kt index fdd127e68b..3bf1daba77 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsController.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsController.kt @@ -22,6 +22,7 @@ import im.vector.riotx.core.epoxy.profiles.buildProfileAction import im.vector.riotx.core.epoxy.profiles.buildProfileSection import im.vector.riotx.core.resources.ColorProvider import im.vector.riotx.core.resources.StringProvider +import im.vector.riotx.features.form.formEditTextItem import javax.inject.Inject // TODO Add other feature here (waiting for design) @@ -32,6 +33,8 @@ class RoomSettingsController @Inject constructor( interface Callback { fun onEnableEncryptionClicked() + fun onNameChanged(name: String) + fun onTopicChanged(topic: String) } private val dividerColor = colorProvider.getColorFromAttribute(R.attr.vctr_list_divider_color) @@ -68,5 +71,27 @@ class RoomSettingsController @Inject constructor( action = { callback?.onEnableEncryptionClicked() } ) } + + formEditTextItem { + id("name") + /*enabled(enableFormElement)*/ + value(roomSummary.displayName) + hint(stringProvider.getString(R.string.room_settings_name_hint)) + + onTextChange { text -> + callback?.onNameChanged(text) + } + } + + formEditTextItem { + id("topic") + /*enabled(enableFormElement)*/ + value(roomSummary.topic) + hint(stringProvider.getString(R.string.room_settings_topic_hint)) + + onTextChange { text -> + callback?.onTopicChanged(text) + } + } } } diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt index d2e06f30e7..072ada6179 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsFragment.kt @@ -82,6 +82,14 @@ class RoomSettingsFragment @Inject constructor( .show() } + override fun onNameChanged(name: String) { + viewModel.handle(RoomSettingsAction.SetRoomName(name)) + } + + override fun onTopicChanged(topic: String) { + viewModel.handle(RoomSettingsAction.SetRoomTopic(topic)) + } + private fun renderRoomSummary(state: RoomSettingsViewState) { waiting_view.isVisible = state.isLoading diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt index f1dee87005..09f0157acc 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewModel.kt @@ -62,6 +62,8 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState: override fun handle(action: RoomSettingsAction) { when (action) { is RoomSettingsAction.EnableEncryption -> handleEnableEncryption() + is RoomSettingsAction.SetRoomName -> setState { copy(newName = action.newName) } + is RoomSettingsAction.SetRoomTopic -> setState { copy(newTopic = action.newTopic) } } } diff --git a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewState.kt b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewState.kt index d68ed6853e..5c2e984192 100644 --- a/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewState.kt +++ b/vector/src/main/java/im/vector/riotx/features/roomprofile/settings/RoomSettingsViewState.kt @@ -25,7 +25,9 @@ import im.vector.riotx.features.roomprofile.RoomProfileArgs data class RoomSettingsViewState( val roomId: String, val roomSummary: Async = Uninitialized, - val isLoading: Boolean = false + val isLoading: Boolean = false, + val newName: String? = null, + val newTopic: String? = null ) : MvRxState { constructor(args: RoomProfileArgs) : this(roomId = args.roomId) diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 5ac50b2484..98d8c3323e 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2496,4 +2496,8 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming Save your Security Key Store your Security Key somewhere safe, like a password manager or a safe. - \ No newline at end of file + + Room Name + Topic + +