Skip to content

Commit

Permalink
fix preserve edit preset name/star values in viewmodel
Browse files Browse the repository at this point in the history
  • Loading branch information
georg-jung committed Jul 2, 2020
1 parent e72684e commit b1bdb11
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ class PresetsViewModel internal constructor(
}
}

val currentEditPresetStarred = MutableLiveData<Boolean>()
val currentEditPresetName = MutableLiveData<String>()

suspend fun setPresetInfo(presetId: Int, content: HandAction, name: String?, isStarred: Boolean) {
presetRepository.saveHandDevicePreset(
connectedHandDeviceAddress.value!!, name, presetId, content, isStarred)
Expand Down

0 comments on commit b1bdb11

Please sign in to comment.