diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionAction.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionAction.kt new file mode 100644 index 0000000000..d175d1ea4a --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionAction.kt @@ -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() +} diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionFragment.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionFragment.kt index ade23b5ee2..964fef1a99 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionFragment.kt @@ -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) { @@ -68,9 +81,10 @@ class RenameSessionFragment : } override fun invalidate() = withState(viewModel) { state -> - if(renameEditTextInitialized.not()) { + if (renameEditTextInitialized.not()) { views.renameSessionEditText.setText(state.deviceName) renameEditTextInitialized = true } + views.renameSessionSave.isEnabled = state.deviceName.isNotEmpty() } } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionViewModel.kt b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionViewModel.kt index ebd30b7ef6..7e50ecce34 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/v2/rename/RenameSessionViewModel.kt @@ -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(initialState) { +) : VectorViewModel(initialState) { companion object : MavericksViewModelFactory 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) } } diff --git a/vector/src/main/res/layout/fragment_session_rename.xml b/vector/src/main/res/layout/fragment_session_rename.xml index 8ce1cbc453..93b36566b1 100644 --- a/vector/src/main/res/layout/fragment_session_rename.xml +++ b/vector/src/main/res/layout/fragment_session_rename.xml @@ -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"> +