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.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()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user