diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt index 17ce97d8f9..a7d2eef283 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/_main/MainViewModel.kt @@ -2,14 +2,24 @@ package com.tangem.tangemtest._main import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.tangem.tasks.TaskEvent +import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** [REDACTED_AUTHOR] */ class MainViewModel : ViewModel() { val ldDescriptionSwitch = MutableLiveData(false) + val ldResponseEvent = MutableLiveData>() fun switchToggled(state: Boolean) { ldDescriptionSwitch.postValue(state) } + + fun changeResponseEvent(event: TaskEvent<*>?) { + Log.d(this, "changeResponseEvent") + val reqEvent = event ?: return + + ldResponseEvent.value = reqEvent + } } \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt index 000e9a53c5..c71097292c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt @@ -5,16 +5,22 @@ import com.tangem.tangemtest.ucase.domain.paramsManager.managers.PersonalizeItem import com.tangem.tangemtest.ucase.domain.paramsManager.managers.ScanItemsManager import com.tangem.tangemtest.ucase.domain.paramsManager.managers.SignItemsManager import com.tangem.tangemtest.ucase.resources.ActionType +import ru.dev.gbixahue.eu4d.lib.android.global.log.Log import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder /** [REDACTED_AUTHOR] */ -class ParamsManagerFactory : BaseTypedHolder() { +class ItemManagersStore : BaseTypedHolder() { companion object { - fun createFactory(): ParamsManagerFactory { - return ParamsManagerFactory().apply { + val instance: ItemManagersStore + get() = createFactory() + + private fun createFactory(): ItemManagersStore { + Log.d(this, "New instance was created") + + return ItemManagersStore().apply { register(ActionType.Scan, ScanItemsManager()) register(ActionType.Sign, SignItemsManager()) register(ActionType.Personalize, PersonalizeItemsManager()) diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt similarity index 95% rename from tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt index 0c0dc21908..8ffcb80328 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ParamsViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt @@ -24,10 +24,10 @@ import ru.dev.gbixahue.eu4d.lib.android.global.log.Log [REDACTED_AUTHOR] */ class ActionViewModelFactory(private val manager: ItemsManager) : ViewModelProvider.NewInstanceFactory() { - override fun create(modelClass: Class): T = ParamsViewModel(manager) as T + override fun create(modelClass: Class): T = ActionViewModel(manager) as T } -class ParamsViewModel(private val itemsManager: ItemsManager) : ViewModel(), LifecycleObserver { +class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), LifecycleObserver { val seResponseEvent = SingleLiveEvent>() val seReadResponse = SingleLiveEvent() @@ -44,6 +44,7 @@ class ParamsViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif this.cardManager = cardManager } + @Deprecated("Events must be send directly from the Widget") fun userChangedItem(id: Id, value: Any?) { itemChanged(id, value) } @@ -90,7 +91,7 @@ class ParamsViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif } } -internal class Notifier(private val vm: ParamsViewModel) { +internal class Notifier(private val vm: ActionViewModel) { private var notShowedError: TaskError? = null private val gson: Gson = GsonInitializer().gson 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 eba8eec1d6..63e2c8be82 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 @@ -4,6 +4,7 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.plusAssign import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Observer @@ -14,8 +15,8 @@ import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.abstraction.BaseItem import com.tangem.tangemtest._main.MainViewModel +import com.tangem.tangemtest.ucase.domain.paramsManager.ItemManagersStore import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager -import com.tangem.tangemtest.ucase.domain.paramsManager.ParamsManagerFactory import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey import com.tangem.tangemtest.ucase.resources.ActionType import com.tangem.tangemtest.ucase.tunnel.ActionView @@ -36,9 +37,12 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { get() = mainView.findViewById(R.id.fab_action) protected val mainActivityVM by activityViewModels() - protected val paramsVM: ParamsViewModel by viewModels { ActionViewModelFactory(itemsManager) } + protected val actionVM: ActionViewModel by viewModels { ActionViewModelFactory(itemsManager) } - protected val itemsManager: ItemsManager by lazy { ParamsManagerFactory.createFactory().get(getAction())!! } + protected val itemsManager: ItemsManager by lazy { + Log.d(this, "create ItemManager") + ItemManagersStore.instance.get(getAction())!! + } private val paramsWidgetList = mutableListOf() @@ -46,9 +50,9 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { super.onViewCreated(view, savedInstanceState) Log.d(this, "onViewCreated") - viewLifecycleOwner.lifecycle.addObserver(paramsVM) - paramsVM.setCardManager(CardManager.init(requireActivity())) - paramsVM.attachToPayload(mutableMapOf(PayloadKey.actionView to this as ActionView)) + viewLifecycleOwner.lifecycle.addObserver(actionVM) + actionVM.setCardManager(CardManager.init(requireActivity())) + actionVM.attachToPayload(mutableMapOf(PayloadKey.actionView to this as ActionView)) initFab() createWidgets { subscribeToViewModelChanges() } @@ -56,16 +60,16 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { protected open fun initFab() { enableActionFab(false) - actionFab.setOnClickListener { paramsVM.invokeMainAction() } + actionFab.setOnClickListener { actionVM.invokeMainAction() } } protected open fun createWidgets(widgetCreatedCallback: () -> Unit) { Log.d(this, "createWidgets") - paramsVM.ldItemList.observe(viewLifecycleOwner, Observer { itemList -> + actionVM.ldItemList.observe(viewLifecycleOwner, Observer { itemList -> itemList.forEach { param -> val widget = ParameterWidget(inflateParamView(itemContainer), param) - widget.onValueChanged = { id, value -> paramsVM.userChangedItem(id, value) } - widget.onActionBtnClickListener = paramsVM.getItemAction(param.id) + widget.onValueChanged = { id, value -> actionVM.userChangedItem(id, value) } + widget.onActionBtnClickListener = actionVM.getItemAction(param.id) paramsWidgetList.add(widget) } widgetCreatedCallback() @@ -83,7 +87,7 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { } protected open fun listenEvent() { - paramsVM.seResponseEvent.observe(viewLifecycleOwner, Observer { + actionVM.seResponseEvent.observe(viewLifecycleOwner, Observer { mainActivityVM.changeResponseEvent(it) }) } @@ -91,18 +95,18 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { protected open fun listenReadResponse() {} protected open fun listenResponse() { - paramsVM.seResponse.observe(viewLifecycleOwner, Observer { + actionVM.seResponse.observe(viewLifecycleOwner, Observer { navigateTo(R.id.action_nav_card_action_to_response_screen) }) } protected open fun listenError() { - paramsVM.seError.observe(viewLifecycleOwner, Observer { showSnackbar(it) }) + actionVM.seError.observe(viewLifecycleOwner, Observer { showSnackbar(it) }) } @Deprecated("Start to use itemViewModel") protected open fun listenChangedItems() { - paramsVM.seChangedItems.observe(viewLifecycleOwner, Observer { itemList -> + actionVM.seChangedItems.observe(viewLifecycleOwner, Observer { itemList -> itemList.forEach { item -> Log.d(this, "item changed from VM - name: ${item.id}") val dataItem = item as? BaseItem ?: return@Observer @@ -114,14 +118,14 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { protected open fun listenDescriptionSwitchChanges() { mainActivityVM.ldDescriptionSwitch.observe(viewLifecycleOwner, Observer { - paramsVM.toggleDescriptionVisibility(it) + actionVM.toggleDescriptionVisibility(it) }) } private fun inflateParamView(where: ViewGroup): ViewGroup { val inflater = LayoutInflater.from(where.context) val view = inflater.inflate(R.layout.w_card_incoming_param, where, false) - where.addView(view) + where.plusAssign(view) return view as ViewGroup } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizeFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizeFragment.kt index 0a18a0989f..ebf8b92c2a 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizeFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizeFragment.kt @@ -22,19 +22,19 @@ class PersonalizeFragment : BaseCardActionFragment() { override fun getLayoutId(): Int = R.layout.fg_personalize override fun initFab() { - actionFab.setOnClickListener { paramsVM.invokeMainAction() } + actionFab.setOnClickListener { actionVM.invokeMainAction() } } override fun createWidgets(widgetCreatedCallback: () -> Unit) { Log.d(this, "createWidgets") val itemList = mutableListOf() - paramsVM.ldItemList.observe(viewLifecycleOwner, Observer { list -> + actionVM.ldItemList.observe(viewLifecycleOwner, Observer { list -> Log.d(this, "ldBlockList size: ${list.size}") itemList.clear() itemList.addAll(list) itemList.forEach { WidgetBuilder(PersonalizeItemBuilder()).build(it, itemContainer) } - paramsVM.attachToPayload(mutableMapOf( + actionVM.attachToPayload(mutableMapOf( PayloadKey.actionView to this as ActionView, PayloadKey.itemList to itemList )) @@ -50,7 +50,7 @@ class PersonalizeFragment : BaseCardActionFragment() { } override fun listenEvent() { - paramsVM.seResponseEvent.observe(viewLifecycleOwner, Observer { + actionVM.seResponseEvent.observe(viewLifecycleOwner, Observer { mainActivityVM.changeResponseEvent(it) navigateTo(R.id.action_nav_card_action_to_response_screen) }) 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 ff1428465b..c878382e63 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 @@ -24,7 +24,7 @@ class ScanActionFragment : BaseCardActionFragment() { } override fun listenReadResponse() { - paramsVM.seReadResponse.observe(viewLifecycleOwner, Observer { + actionVM.seReadResponse.observe(viewLifecycleOwner, Observer { navigateTo( R.id.action_nav_card_action_to_response_screen, bundleOf(Pair(BaseCardResponseFragment.response, it))