diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt index b5418a724c..16d0d5b945 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt @@ -36,6 +36,7 @@ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { } protected val viewModel: ParamsViewModel by viewModels { ActionViewModelFactory(itemsManager) } protected lateinit var mainView: View + protected val widgetList = mutableListOf() private val itemsManager: ItemsManager by lazy { ParamsManagerFactory.createFactory().get(getAction())!! } @@ -51,7 +52,7 @@ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { viewModel.setCardManager(CardManager.init(requireActivity())) initFab() - createWidgets { subscribeToViewModelChanges(it) } + createWidgets { subscribeToViewModelChanges() } } private fun initFab() { @@ -59,29 +60,40 @@ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { mainView.find(R.id.fab_action)?.setOnClickListener { viewModel.invokeMainAction() } } - private fun createWidgets(callback: (List) -> Unit) { + private fun createWidgets(widgetCreatedCallback: () -> Unit) { Log.d(this, "createWidgets") viewModel.ldParams.observe(viewLifecycleOwner, Observer { itemList -> - val widgetList = mutableListOf() itemList.forEach { param -> val widget = ParameterWidget(inflateParamView(incomingParamsContainer), param) widget.onValueChanged = { id, value -> viewModel.userChangedItem(id, value) } widget.onActionBtnClickListener = viewModel.getItemAction(param.id) widgetList.add(widget) } - callback(widgetList) + widgetCreatedCallback() }) } - private fun subscribeToViewModelChanges(widgetList: List) { + private fun subscribeToViewModelChanges() { Log.d(this, "subscribeToViewModelChanges") + listenResponse() + listenError() + listenChangedItems() + listenDescriptionSwitchChanges() + } + protected open fun listenResponse() { val tvResponse by lazy { mainView.findViewById(R.id.tv_action_response_json) } viewModel.ldResponse.observe(viewLifecycleOwner, Observer { Log.d(this, "action response: ${if (it.length > 50) it.substring(0..50) else it}") tvResponse.text = it }) + } + + protected open fun listenError() { viewModel.seError.observe(viewLifecycleOwner, Observer { showSnackbarMessage(it) }) + } + + protected open fun listenChangedItems() { viewModel.seChangedItems.observe(viewLifecycleOwner, Observer { itemList -> itemList.forEach { item -> Log.d(this, "item changed from VM - name: ${item.id}") @@ -90,6 +102,9 @@ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { widgetList.firstOrNull { it.id == item.id }?.changeParamValue(item.viewModel.data) } }) + } + + protected open fun listenDescriptionSwitchChanges() { val mainActViewModel by activityViewModels() mainActViewModel.ldDescriptionSwitch.observe(viewLifecycleOwner, Observer { isEnabled -> widgetList.forEach { it.toggleDescriptionVisibility(isEnabled) } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/scan/ui/ScanActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/scan/ui/ScanActionFragment.kt index 8ea13a4516..532519981c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/scan/ui/ScanActionFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/scan/ui/ScanActionFragment.kt @@ -1,8 +1,12 @@ package com.tangem.tangemtest.ucase.variants.scan.ui +import android.widget.TextView +import androidx.lifecycle.Observer import com.tangem.tangemtest.R import com.tangem.tangemtest.ucase.resources.ActionType import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment +import ru.dev.gbixahue.eu4d.lib.android._android.views.show +import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** [REDACTED_AUTHOR] @@ -12,4 +16,14 @@ class ScanActionFragment : BaseCardActionFragment() { override fun getLayoutId(): Int = R.layout.fg_action_card_scan override fun getAction(): ActionType = ActionType.Scan + + override fun listenResponse() { + val tvStub = mainView.findViewById(R.id.tv_screen_stub) + val tvResponse by lazy { mainView.findViewById(R.id.tv_action_response_json) } + viewModel.ldResponse.observe(viewLifecycleOwner, Observer { + Log.d(this, "action response: ${if (it.length > 50) it.substring(0..50) else it}") + tvStub.show(false) + tvResponse.text = it + }) + } } \ No newline at end of file diff --git a/tangem-demo/src/main/res/layout/fg_action_card_scan.xml b/tangem-demo/src/main/res/layout/fg_action_card_scan.xml index 684c317b94..aa343731bc 100644 --- a/tangem-demo/src/main/res/layout/fg_action_card_scan.xml +++ b/tangem-demo/src/main/res/layout/fg_action_card_scan.xml @@ -29,6 +29,7 @@