Adding save button and view actions

This commit is contained in:
Maxime NATUREL 2022-09-19 17:27:06 +02:00
parent 33cf3d3032
commit b134d35dd6
4 changed files with 66 additions and 8 deletions

View File

@ -0,0 +1,24 @@
/*
* Copyright (c) 2020 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.settings.devices.v2.rename
import im.vector.app.core.platform.VectorViewModelAction
sealed class RenameSessionAction : VectorViewModelAction {
object SaveModifications : RenameSessionAction()
data class EditLocally(val editedName: String) : RenameSessionAction()
}

View File

@ -20,11 +20,10 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.doOnTextChanged
import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState
import dagger.hilt.android.AndroidEntryPoint
import im.vector.app.R
import im.vector.app.core.platform.VectorBaseFragment
import im.vector.app.databinding.FragmentSessionRenameBinding
import javax.inject.Inject
@ -50,6 +49,8 @@ class RenameSessionFragment :
super.onViewCreated(view, savedInstanceState)
observeViewEvents()
initToolbar()
initEditText()
initSaveButton()
}
private fun initToolbar() {
@ -57,6 +58,18 @@ class RenameSessionFragment :
.allowBack(useCross = true)
}
private fun initEditText() {
views.renameSessionEditText.doOnTextChanged { text, _, _, _ ->
viewModel.handle(RenameSessionAction.EditLocally(text.toString()))
}
}
private fun initSaveButton() {
views.renameSessionSave.debouncedClicks {
viewModel.handle(RenameSessionAction.SaveModifications)
}
}
private fun observeViewEvents() {
viewModel.observeViewEvents {
when (it) {
@ -72,5 +85,6 @@ class RenameSessionFragment :
views.renameSessionEditText.setText(state.deviceName)
renameEditTextInitialized = true
}
views.renameSessionSave.isEnabled = state.deviceName.isNotEmpty()
}
}

View File

@ -22,7 +22,6 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import im.vector.app.core.di.MavericksAssistedViewModelFactory
import im.vector.app.core.di.hiltMavericksViewModelFactory
import im.vector.app.core.platform.EmptyAction
import im.vector.app.core.platform.VectorViewModel
import im.vector.app.features.settings.devices.v2.overview.GetDeviceFullInfoUseCase
import kotlinx.coroutines.flow.launchIn
@ -32,7 +31,7 @@ import kotlinx.coroutines.flow.onEach
class RenameSessionViewModel @AssistedInject constructor(
@Assisted val initialState: RenameSessionViewState,
private val getDeviceFullInfoUseCase: GetDeviceFullInfoUseCase,
) : VectorViewModel<RenameSessionViewState, EmptyAction, RenameSessionViewEvent>(initialState) {
) : VectorViewModel<RenameSessionViewState, RenameSessionAction, RenameSessionViewEvent>(initialState) {
companion object : MavericksViewModelFactory<RenameSessionViewModel, RenameSessionViewState> by hiltMavericksViewModelFactory()
@ -51,7 +50,19 @@ class RenameSessionViewModel @AssistedInject constructor(
.launchIn(viewModelScope)
}
override fun handle(action: EmptyAction) {
// do nothing
override fun handle(action: RenameSessionAction) {
when (action) {
is RenameSessionAction.EditLocally -> handleEditLocally(action.editedName)
is RenameSessionAction.SaveModifications -> handleSaveModifications()
}
}
private fun handleEditLocally(editedName: String) {
setState { copy(deviceName = editedName) }
}
private fun handleSaveModifications() {
// TODO call use case to save the modifications
_viewEvents.post(RenameSessionViewEvent.SessionRenamed)
}
}

View File

@ -14,8 +14,17 @@
android:id="@+id/renameSessionToolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
app:title="@string/device_manager_session_rename"/>
app:title="@string/device_manager_session_rename">
<Button
android:id="@+id/renameSessionSave"
style="@style/Widget.Vector.Button.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="@string/action_save" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<com.google.android.material.textfield.TextInputLayout