From b1bdb11ed31bbcba0e0aa78070123f6544d6fd75 Mon Sep 17 00:00:00 2001 From: Georg Jung Date: Thu, 2 Jul 2020 15:09:37 +0300 Subject: [PATCH] fix preserve edit preset name/star values in viewmodel --- .../haifa3d/ui/presets/EditPresetFragment.kt | 40 ++++++++++++++----- .../haifa3d/ui/presets/PresetsFragment.kt | 4 ++ .../haifa3d/ui/presets/PresetsViewModel.kt | 3 ++ 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/EditPresetFragment.kt b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/EditPresetFragment.kt index c4afce8..002be0a 100644 --- a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/EditPresetFragment.kt +++ b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/EditPresetFragment.kt @@ -3,6 +3,7 @@ package com.gjung.haifa3d.ui.presets import android.os.Bundle import android.os.UserManager import android.view.* +import androidx.core.widget.doOnTextChanged import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels @@ -108,10 +109,16 @@ class EditPresetFragment : BleFragment(), MovementsAdapter.OnItemClickListener { hideKeyboard(requireActivity()) GlobalScope.launch(Dispatchers.IO) { presetService!!.writePreset(args.presetId, HandAction(movements)) - var name: String? = binding.presetNameEdit.text.toString() + var name: String? = presetsViewModel.currentEditPresetName.value if (name.isNullOrBlank()) name = null - presetsViewModel.setPresetInfo(args.presetId, HandAction(movements), name, binding.starredCheck.isChecked) + var starred = presetsViewModel.currentEditPresetStarred.value ?: false + presetsViewModel.setPresetInfo( + args.presetId, + HandAction(movements), + name, + starred + ) withContext(Dispatchers.Main) { val navController = this@EditPresetFragment.findNavController(); navController.navigateUp() @@ -152,15 +159,30 @@ class EditPresetFragment : BleFragment(), MovementsAdapter.OnItemClickListener { names[preset] } }.observe(viewLifecycleOwner, Observer { - binding.presetNameEdit.setText(it) + if (presetsViewModel.currentEditPresetName.value.isNullOrBlank()) { + presetsViewModel.currentEditPresetName.postValue(it) + } }) - Transformations.switchMap(presetsViewModel.starredPresets) { starred -> - Transformations.map(preset) { preset -> - starred.contains(preset) - } - }.observe(viewLifecycleOwner, Observer { - binding.starredCheck.isChecked = it + binding.presetNameEdit.doOnTextChanged { text, _, _, _ -> + val tx: String = text.toString() + if (presetsViewModel.currentEditPresetName.value != tx) + presetsViewModel.currentEditPresetName.postValue(tx) + } + + presetsViewModel.currentEditPresetName.observe(viewLifecycleOwner, Observer { + if (binding.presetNameEdit.text?.toString() != it) + binding.presetNameEdit.setText(it) + }) + + binding.starredCheck.setOnCheckedChangeListener { _, isChecked -> + if (presetsViewModel.currentEditPresetStarred.value != isChecked) + presetsViewModel.currentEditPresetStarred.postValue(isChecked) + } + + presetsViewModel.currentEditPresetStarred.observe(viewLifecycleOwner, Observer { + if (binding.starredCheck.isChecked != it) + binding.starredCheck.isChecked = it }) return binding.root diff --git a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsFragment.kt b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsFragment.kt index ca6a986..0357ca1 100644 --- a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsFragment.kt +++ b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsFragment.kt @@ -97,6 +97,10 @@ class PresetsFragment : BleFragment() { } catch(ex: Throwable) { preset.handAction = HandAction.Empty } + presetsViewModel.currentEditPresetName.value = + presetsViewModel.presetNames.value!![preset] + presetsViewModel.currentEditPresetStarred.value = + presetsViewModel.starredPresets.value!!.contains(preset) presetsViewModel.presets.notifyObserver() val act = PresetsFragmentDirections.editPreset(preset.id) this@PresetsFragment.findNavController().navigate(act) diff --git a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsViewModel.kt b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsViewModel.kt index 52f253a..39a2e71 100644 --- a/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsViewModel.kt +++ b/src/android/Haifa3d/app/src/main/java/com/gjung/haifa3d/ui/presets/PresetsViewModel.kt @@ -38,6 +38,9 @@ class PresetsViewModel internal constructor( } } + val currentEditPresetStarred = MutableLiveData() + val currentEditPresetName = MutableLiveData() + suspend fun setPresetInfo(presetId: Int, content: HandAction, name: String?, isStarred: Boolean) { presetRepository.saveHandDevicePreset( connectedHandDeviceAddress.value!!, name, presetId, content, isStarred)