Adding save button and view actions
This commit is contained in:
parent
33cf3d3032
commit
b134d35dd6
@ -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()
|
||||||
|
}
|
@ -20,11 +20,10 @@ import android.os.Bundle
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.core.widget.doOnTextChanged
|
||||||
import com.airbnb.mvrx.fragmentViewModel
|
import com.airbnb.mvrx.fragmentViewModel
|
||||||
import com.airbnb.mvrx.withState
|
import com.airbnb.mvrx.withState
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import im.vector.app.R
|
|
||||||
import im.vector.app.core.platform.VectorBaseFragment
|
import im.vector.app.core.platform.VectorBaseFragment
|
||||||
import im.vector.app.databinding.FragmentSessionRenameBinding
|
import im.vector.app.databinding.FragmentSessionRenameBinding
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -50,6 +49,8 @@ class RenameSessionFragment :
|
|||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
observeViewEvents()
|
observeViewEvents()
|
||||||
initToolbar()
|
initToolbar()
|
||||||
|
initEditText()
|
||||||
|
initSaveButton()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initToolbar() {
|
private fun initToolbar() {
|
||||||
@ -57,6 +58,18 @@ class RenameSessionFragment :
|
|||||||
.allowBack(useCross = true)
|
.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() {
|
private fun observeViewEvents() {
|
||||||
viewModel.observeViewEvents {
|
viewModel.observeViewEvents {
|
||||||
when (it) {
|
when (it) {
|
||||||
@ -72,5 +85,6 @@ class RenameSessionFragment :
|
|||||||
views.renameSessionEditText.setText(state.deviceName)
|
views.renameSessionEditText.setText(state.deviceName)
|
||||||
renameEditTextInitialized = true
|
renameEditTextInitialized = true
|
||||||
}
|
}
|
||||||
|
views.renameSessionSave.isEnabled = state.deviceName.isNotEmpty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import dagger.assisted.AssistedFactory
|
|||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
import im.vector.app.core.di.MavericksAssistedViewModelFactory
|
||||||
import im.vector.app.core.di.hiltMavericksViewModelFactory
|
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.core.platform.VectorViewModel
|
||||||
import im.vector.app.features.settings.devices.v2.overview.GetDeviceFullInfoUseCase
|
import im.vector.app.features.settings.devices.v2.overview.GetDeviceFullInfoUseCase
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
@ -32,7 +31,7 @@ import kotlinx.coroutines.flow.onEach
|
|||||||
class RenameSessionViewModel @AssistedInject constructor(
|
class RenameSessionViewModel @AssistedInject constructor(
|
||||||
@Assisted val initialState: RenameSessionViewState,
|
@Assisted val initialState: RenameSessionViewState,
|
||||||
private val getDeviceFullInfoUseCase: GetDeviceFullInfoUseCase,
|
private val getDeviceFullInfoUseCase: GetDeviceFullInfoUseCase,
|
||||||
) : VectorViewModel<RenameSessionViewState, EmptyAction, RenameSessionViewEvent>(initialState) {
|
) : VectorViewModel<RenameSessionViewState, RenameSessionAction, RenameSessionViewEvent>(initialState) {
|
||||||
|
|
||||||
companion object : MavericksViewModelFactory<RenameSessionViewModel, RenameSessionViewState> by hiltMavericksViewModelFactory()
|
companion object : MavericksViewModelFactory<RenameSessionViewModel, RenameSessionViewState> by hiltMavericksViewModelFactory()
|
||||||
|
|
||||||
@ -51,7 +50,19 @@ class RenameSessionViewModel @AssistedInject constructor(
|
|||||||
.launchIn(viewModelScope)
|
.launchIn(viewModelScope)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handle(action: EmptyAction) {
|
override fun handle(action: RenameSessionAction) {
|
||||||
// do nothing
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,17 @@
|
|||||||
android:id="@+id/renameSessionToolbar"
|
android:id="@+id/renameSessionToolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?actionBarSize"
|
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.appbar.AppBarLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
Loading…
Reference in New Issue
Block a user