mirror of
https://github.com/SchildiChat/SchildiChat-android.git
synced 2025-02-18 13:00:18 +03:00
Show/hide save action button dynamically.
This commit is contained in:
parent
05e848244e
commit
bfebaa5c6c
6 changed files with 82 additions and 26 deletions
|
@ -23,4 +23,5 @@ sealed class RoomSettingsAction : VectorViewModelAction {
|
||||||
data class SetRoomTopic(val newTopic: String) : RoomSettingsAction()
|
data class SetRoomTopic(val newTopic: String) : RoomSettingsAction()
|
||||||
data class SetRoomAvatar(val newAvatarUrl: String) : RoomSettingsAction()
|
data class SetRoomAvatar(val newAvatarUrl: String) : RoomSettingsAction()
|
||||||
object EnableEncryption : RoomSettingsAction()
|
object EnableEncryption : RoomSettingsAction()
|
||||||
|
object Save : RoomSettingsAction()
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,28 @@ class RoomSettingsController @Inject constructor(
|
||||||
stringProvider.getString(R.string.settings)
|
stringProvider.getString(R.string.settings)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
formEditTextItem {
|
||||||
|
id("name")
|
||||||
|
/*enabled(enableFormElement)*/
|
||||||
|
value(data.newName ?: roomSummary.displayName)
|
||||||
|
hint(stringProvider.getString(R.string.room_settings_name_hint))
|
||||||
|
|
||||||
|
onTextChange { text ->
|
||||||
|
callback?.onNameChanged(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
formEditTextItem {
|
||||||
|
id("topic")
|
||||||
|
/*enabled(enableFormElement)*/
|
||||||
|
value(data.newTopic ?: roomSummary.topic)
|
||||||
|
hint(stringProvider.getString(R.string.room_settings_topic_hint))
|
||||||
|
|
||||||
|
onTextChange { text ->
|
||||||
|
callback?.onTopicChanged(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (roomSummary.isEncrypted) {
|
if (roomSummary.isEncrypted) {
|
||||||
buildProfileAction(
|
buildProfileAction(
|
||||||
id = "encryption",
|
id = "encryption",
|
||||||
|
@ -71,27 +93,5 @@ class RoomSettingsController @Inject constructor(
|
||||||
action = { callback?.onEnableEncryptionClicked() }
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
package im.vector.riotx.features.roomprofile.settings
|
package im.vector.riotx.features.roomprofile.settings
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.Menu
|
||||||
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
|
@ -46,6 +48,8 @@ class RoomSettingsFragment @Inject constructor(
|
||||||
|
|
||||||
override fun getLayoutResId() = R.layout.fragment_room_setting_generic
|
override fun getLayoutResId() = R.layout.fragment_room_setting_generic
|
||||||
|
|
||||||
|
override fun getMenuRes() = R.menu.vector_room_settings
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
controller.callback = this
|
controller.callback = this
|
||||||
|
@ -66,6 +70,20 @@ class RoomSettingsFragment @Inject constructor(
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||||
|
withState(viewModel) { state ->
|
||||||
|
menu.findItem(R.id.roomSettingsSaveAction).isVisible = state.showSaveAction
|
||||||
|
}
|
||||||
|
super.onPrepareOptionsMenu(menu)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
|
if (item.itemId == R.id.roomSettingsSaveAction) {
|
||||||
|
viewModel.handle(RoomSettingsAction.Save)
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item)
|
||||||
|
}
|
||||||
|
|
||||||
override fun invalidate() = withState(viewModel) { viewState ->
|
override fun invalidate() = withState(viewModel) { viewState ->
|
||||||
controller.setData(viewState)
|
controller.setData(viewState)
|
||||||
renderRoomSummary(viewState)
|
renderRoomSummary(viewState)
|
||||||
|
@ -97,5 +115,7 @@ class RoomSettingsFragment @Inject constructor(
|
||||||
roomSettingsToolbarTitleView.text = it.displayName
|
roomSettingsToolbarTitleView.text = it.displayName
|
||||||
avatarRenderer.render(it.toMatrixItem(), roomSettingsToolbarAvatarImageView)
|
avatarRenderer.render(it.toMatrixItem(), roomSettingsToolbarAvatarImageView)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
invalidateOptionsMenu()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,18 +55,43 @@ class RoomSettingsViewModel @AssistedInject constructor(@Assisted initialState:
|
||||||
room.rx().liveRoomSummary()
|
room.rx().liveRoomSummary()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.execute { async ->
|
.execute { async ->
|
||||||
copy(roomSummary = async)
|
val roomSummary = async.invoke()
|
||||||
|
copy(
|
||||||
|
roomSummary = async,
|
||||||
|
newName = roomSummary?.displayName,
|
||||||
|
newTopic = roomSummary?.topic
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(action: RoomSettingsAction) {
|
override fun handle(action: RoomSettingsAction) {
|
||||||
when (action) {
|
when (action) {
|
||||||
is RoomSettingsAction.EnableEncryption -> handleEnableEncryption()
|
is RoomSettingsAction.EnableEncryption -> handleEnableEncryption()
|
||||||
is RoomSettingsAction.SetRoomName -> setState { copy(newName = action.newName) }
|
is RoomSettingsAction.SetRoomName -> setState {
|
||||||
is RoomSettingsAction.SetRoomTopic -> setState { copy(newTopic = action.newTopic) }
|
copy(
|
||||||
|
newName = action.newName,
|
||||||
|
showSaveAction = shouldShowSaveAction(this)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
is RoomSettingsAction.SetRoomTopic -> setState {
|
||||||
|
copy(
|
||||||
|
newTopic = action.newTopic,
|
||||||
|
showSaveAction = shouldShowSaveAction(this)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
is RoomSettingsAction.Save -> saveSettings()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun shouldShowSaveAction(state: RoomSettingsViewState): Boolean {
|
||||||
|
val summary = state.roomSummary.invoke()
|
||||||
|
return summary?.displayName != state.newName ||
|
||||||
|
summary?.topic != state.newTopic
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveSettings() {
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleEnableEncryption() {
|
private fun handleEnableEncryption() {
|
||||||
setState {
|
setState {
|
||||||
copy(isLoading = true)
|
copy(isLoading = true)
|
||||||
|
|
|
@ -27,7 +27,8 @@ data class RoomSettingsViewState(
|
||||||
val roomSummary: Async<RoomSummary> = Uninitialized,
|
val roomSummary: Async<RoomSummary> = Uninitialized,
|
||||||
val isLoading: Boolean = false,
|
val isLoading: Boolean = false,
|
||||||
val newName: String? = null,
|
val newName: String? = null,
|
||||||
val newTopic: String? = null
|
val newTopic: String? = null,
|
||||||
|
val showSaveAction: Boolean = false
|
||||||
) : MvRxState {
|
) : MvRxState {
|
||||||
|
|
||||||
constructor(args: RoomProfileArgs) : this(roomId = args.roomId)
|
constructor(args: RoomProfileArgs) : this(roomId = args.roomId)
|
||||||
|
|
9
vector/src/main/res/menu/vector_room_settings.xml
Normal file
9
vector/src/main/res/menu/vector_room_settings.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<item
|
||||||
|
android:id="@+id/roomSettingsSaveAction"
|
||||||
|
android:title="@string/save"
|
||||||
|
app:iconTint="?attr/colorAccent"
|
||||||
|
app:showAsAction="ifRoom" />
|
||||||
|
</menu>
|
Loading…
Add table
Reference in a new issue