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 a599bcb479..a50da93a68 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,7 +2,7 @@ package com.tangem.tangemtest._main import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.tangem.tasks.TaskEvent +import com.tangem.commands.CommandResponse import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** @@ -11,16 +11,16 @@ import ru.dev.gbixahue.eu4d.lib.android.global.log.Log class MainViewModel : ViewModel() { val ldDescriptionSwitch = MutableLiveData(false) - var responseEvent: TaskEvent<*>? = null + var commandResponse: CommandResponse? = null fun switchToggled(state: Boolean) { ldDescriptionSwitch.postValue(state) } - fun changeResponseEvent(event: TaskEvent<*>?) { + fun changeResponseEvent(commandResponse: CommandResponse?) { Log.d(this, "changeResponseEvent") - val reqEvent = event ?: return + val response = commandResponse ?: return - responseEvent = reqEvent + this.commandResponse = response } } \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt index 9edef2267e..6ddbc6a916 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/BaseItemsManager.kt @@ -47,8 +47,8 @@ open class BaseItemsManager(protected val action: Action) : ItemsManager, Lifecy this.changeConsequence = consequence } - override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { - action.executeMainAction(this, getAttrsForAction(cardManager), callback) + override fun invokeMainAction(tangemSdk: TangemSdk, callback: ActionCallback) { + action.executeMainAction(this, getAttrsForAction(tangemSdk), callback) } override fun getActionByTag(id: Id, tangemSdk: TangemSdk): ((ActionCallback) -> Unit)? { diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/DepersonalizeItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/DepersonalizeItemsManager.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt index e67e278aca..1652cd2833 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizationItemsManager.kt @@ -2,7 +2,7 @@ package com.tangem.tangemtest.ucase.domain.paramsManager.managers import androidx.lifecycle.Lifecycle import androidx.lifecycle.OnLifecycleEvent -import com.tangem.CardManager +import com.tangem.TangemSdk import com.tangem.tangemtest.commons.Store import com.tangem.tangemtest.ucase.domain.actions.PersonalizeAction import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback @@ -23,8 +23,8 @@ class PersonalizationItemsManager( setItems(converter.convert(config)) } - override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { - action.executeMainAction(this, getAttrsForAction(cardManager), callback) + override fun invokeMainAction(tangemSdk: TangemSdk, callback: ActionCallback) { + action.executeMainAction(this, getAttrsForAction(tangemSdk), callback) } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizeItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/PersonalizeItemsManager.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/ScanItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/ScanItemsManager.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SignItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SignItemsManager.kt deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt index 84695d90fb..d54bc08a5d 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/responses/ResponseJsonConverter.kt @@ -1,12 +1,8 @@ package com.tangem.tangemtest.ucase.domain.responses import com.google.gson.* -import com.tangem.commands.ProductMask -import com.tangem.commands.Settings -import com.tangem.commands.SettingsMask -import com.tangem.commands.SigningMethod +import com.tangem.commands.* import com.tangem.common.extensions.toHexString -import com.tangem.tasks.TaskEvent import java.lang.reflect.Type import java.text.DateFormat import java.util.* @@ -29,12 +25,7 @@ class ResponseJsonConverter { return builder.create() } - fun convertTaskEvent(task: TaskEvent<*>?): String = gson.toJson(task) - - fun convertEvent(task: TaskEvent<*>?): String { - val event = task as? TaskEvent.Event ?: "" - return gson.toJson(event) - } + fun convertResponse(response: CommandResponse?): String = gson.toJson(response) } class ByteTypeAdapter : JsonSerializer { diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt index d8bf8829d0..ea37c478fd 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/ActionViewModel.kt @@ -14,7 +14,6 @@ import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.Payload import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest._arch.structure.abstraction.iterate -import com.tangem.tangemtest.commons.performAction import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager import com.tangem.tangemtest.ucase.domain.responses.ResponseJsonConverter import com.tangem.tangemtest.ucase.tunnel.ViewScreen @@ -29,9 +28,9 @@ class ActionViewModelFactory(private val manager: ItemsManager) : ViewModelProvi class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), LifecycleObserver { - val seResponseEvent = SingleLiveEvent>() - val seReadResponse = SingleLiveEvent() - val seResponse = SingleLiveEvent() + val seResponse = SingleLiveEvent() + val seResponseData = SingleLiveEvent() + val seResponseCardData = SingleLiveEvent() val ldItemList = MutableLiveData(itemsManager.getItems()) val seError: MutableLiveData = SingleLiveEvent() @@ -55,11 +54,13 @@ class ActionViewModel(private val itemsManager: ItemsManager) : ViewModel(), Lif //invokes Scan, Sign etc... fun invokeMainAction() { - performAction(itemsManager, tangemSdk) { paramsManager, tangemSdk -> - paramsManager.invokeMainAction(tangemSdk) { response, listOfChangedParams -> - notifier.handleActionResult(response, listOfChangedParams) - } - }) + if (!::tangemSdk.isInitialized) { + Log.e(this, "TangemSdk isn't initialized") + return + } + itemsManager.invokeMainAction(tangemSdk) { response, listOfChangedParams -> + notifier.handleActionResult(response, listOfChangedParams) + } } fun getItemAction(id: Id): (() -> Unit)? { @@ -95,9 +96,9 @@ internal class Notifier(private val vm: ActionViewModel) { private var notShowedError: SessionError? = null private val gson: Gson = ResponseJsonConverter().gson - fun handleActionResult(response: CompletionResult<*>, list: List) { + fun handleActionResult(result: CompletionResult<*>, list: List) { if (list.isNotEmpty()) notifyItemsChanged(list) - handleResponse(response) + handleCompletionResult(result) } @UiThread @@ -105,30 +106,25 @@ internal class Notifier(private val vm: ActionViewModel) { vm.seChangedItems.postValue(list) } - fun handleResponse(response: CompletionResult<*>) { - val commandResponse = response as? CompletionResult ?: return + fun handleCompletionResult(result: CompletionResult<*>) { + val commandResponse = result as? CompletionResult ?: return when (commandResponse) { + is CompletionResult.Success -> handleData(commandResponse.data) is CompletionResult.Failure -> handleError(commandResponse.error) - is CompletionResult.Success -> { - handleDataEvent(commandResponse.data) - vm.seResponseEvent.postValue(commandResponse) - } } } - private fun handleDataEvent(data: CommandResponse?) { - when (data) { - is Card -> { - vm.ldCard.postValue(data) - vm.seReadResponse.postValue(gson.toJson(data)) - } - else -> vm.seResponse.postValue(gson.toJson(data)) + private fun handleData(event: CommandResponse?) { + vm.seResponse.postValue(event) + when (event) { + is Card -> vm.seResponseCardData.postValue(event) + else -> vm.seResponseData.postValue(event) } } private fun handleError(error: SessionError) { - Log.d(this, "error = ${error}") + Log.d(this, "error = $error") when (error) { is SessionError.UserCancelled -> { if (notShowedError == null) { 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 36acc2c199..7e50f755ef 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 @@ -9,9 +9,8 @@ import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Observer import com.google.android.material.floatingactionbutton.FloatingActionButton -import com.google.android.material.snackbar.BaseTransientBottomBar -import com.google.android.material.snackbar.Snackbar import com.tangem.TangemSdk +import com.tangem.commands.Card import com.tangem.tangem_sdk_new.extensions.init import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id @@ -77,28 +76,37 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { protected open fun subscribeToViewModelChanges() { Log.d(this, "subscribeToViewModelChanges") - listenEvent() - listenReadResponse() listenResponse() + listenResponseData() + listenResponseCardData() listenError() listenChangedItems() listenDescriptionSwitchChanges() } - protected open fun listenEvent() { - actionVM.seResponseEvent.observe(viewLifecycleOwner, Observer { + private fun listenResponse() { + actionVM.seResponse.observe(viewLifecycleOwner, Observer { + Log.d(this, "listen response: $it") mainActivityVM.changeResponseEvent(it) }) } - protected open fun listenReadResponse() {} - - protected open fun listenResponse() { - actionVM.seResponse.observe(viewLifecycleOwner, Observer { + protected open fun listenResponseData() { + actionVM.seResponseData.observe(viewLifecycleOwner, Observer { + Log.d(this, "listen responseData: $it") navigateTo(R.id.action_nav_card_action_to_response_screen) }) } + protected open fun listenResponseCardData() { + actionVM.seResponseCardData.observe(viewLifecycleOwner, Observer { + Log.d(this, "listen responseCardData: $it") + responseCardDataHandled(it) + }) + } + + protected open fun responseCardDataHandled(card: Card?) {} + protected open fun listenError() { actionVM.seError.observe(viewLifecycleOwner, Observer { showSnackbar(it) }) } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizationFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizationFragment.kt index d0216c725b..4b950d8b57 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizationFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/ui/PersonalizationFragment.kt @@ -3,6 +3,7 @@ package com.tangem.tangemtest.ucase.variants.personalize.ui import android.os.Bundle import android.view.View import androidx.lifecycle.Observer +import com.tangem.commands.Card import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.abstraction.Item @@ -52,20 +53,6 @@ class PersonalizationFragment : BaseCardActionFragment() { }) } - override fun subscribeToViewModelChanges() { - Log.d(this, "subscribeToViewModelChanges") - listenEvent() - listenError() - listenDescriptionSwitchChanges() - } - - override fun listenEvent() { - actionVM.seResponseEvent.observe(viewLifecycleOwner, Observer { - mainActivityVM.changeResponseEvent(it) - navigateTo(R.id.action_nav_card_action_to_response_screen) - }) - } - override fun showSnackbar(id: Id, additionalHandler: ((Id) -> Int)?) { super.showSnackbar(id) { when (id) { @@ -75,4 +62,9 @@ class PersonalizationFragment : BaseCardActionFragment() { } } } + + override fun responseCardDataHandled(card: Card?) { + super.responseCardDataHandled(card) + navigateTo(R.id.action_nav_card_action_to_response_screen) + } } \ No newline at end of file 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 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ResponseViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ResponseViewModel.kt index 6216ffbddc..dae8eef20d 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ResponseViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ResponseViewModel.kt @@ -3,6 +3,7 @@ package com.tangem.tangemtest.ucase.variants.responses import android.view.View import androidx.lifecycle.ViewModel import com.tangem.commands.Card +import com.tangem.commands.CommandResponse import com.tangem.commands.SignResponse import com.tangem.commands.personalization.DepersonalizeResponse import com.tangem.tangemtest.R @@ -10,8 +11,6 @@ import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest._arch.structure.abstraction.ModelToItems import com.tangem.tangemtest._arch.structure.abstraction.iterate import com.tangem.tangemtest.ucase.variants.responses.converter.ConvertersStore -import com.tangem.tasks.ScanEvent -import com.tangem.tasks.TaskEvent import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** @@ -22,13 +21,13 @@ class ResponseViewModel : ViewModel() { private val convertersHolder = ConvertersStore() private var itemList: List? = null - fun createItemList(taskEvent: TaskEvent<*>?): List { + fun createItemList(response: CommandResponse?): List { Log.d(this, "createItemList: itemList size: ${itemList?.size ?: 0}") - val event = taskEvent as? TaskEvent.Event ?: return emptyList() - val type = event.data::class.java + val responseEvent = response ?: return emptyList() + val type = responseEvent::class.java val converter = convertersHolder.get(type) as? ModelToItems ?: return emptyList() - itemList = converter.convert(event.data) + itemList = converter.convert(responseEvent) return itemList!! } @@ -38,13 +37,12 @@ class ResponseViewModel : ViewModel() { } } - fun determineTitleId(taskEvent: TaskEvent<*>?): Int { - val event = taskEvent as? TaskEvent.Event ?: return R.string.unknown + fun determineTitleId(response: CommandResponse?): Int { + val responseEvent = response ?: return R.string.unknown - return when (event.data) { - is ScanEvent.OnReadEvent -> R.string.fg_name_response_scan - is SignResponse -> R.string.fg_name_response_sign + return when (responseEvent) { is Card -> R.string.fg_name_response_personalization + is SignResponse -> R.string.fg_name_response_sign is DepersonalizeResponse -> R.string.fg_name_response_depersonalization else -> R.string.unknown } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt index 9b1dc76a49..067d47027c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/ConvertersStore.kt @@ -3,13 +3,12 @@ package com.tangem.tangemtest.ucase.variants.responses.converter import com.tangem.commands.Card import com.tangem.commands.SignResponse import com.tangem.commands.personalization.DepersonalizeResponse -import com.tangem.tasks.ScanEvent import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder import java.lang.reflect.Type class ConvertersStore : BaseTypedHolder() { init { - register(ScanEvent.OnReadEvent::class.java, ReadEventConverter()) +// register(CompletionResult.Success::class.java, ReadEventConverter()) register(SignResponse::class.java, SignResponseConverter()) register(Card::class.java, CardConverter()) register(DepersonalizeResponse::class.java, DepersonalizeResponseConverter()) diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt index a1c997465b..b0c43734b1 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/converter/SimpleConverters.kt @@ -1,19 +1,20 @@ package com.tangem.tangemtest.ucase.variants.responses.converter +import com.tangem.commands.Card import com.tangem.commands.SignResponse import com.tangem.commands.personalization.DepersonalizeResponse +import com.tangem.common.CompletionResult import com.tangem.tangemtest._arch.structure.StringId import com.tangem.tangemtest._arch.structure.abstraction.Item import com.tangem.tangemtest._arch.structure.abstraction.ModelToItems import com.tangem.tangemtest._arch.structure.impl.TextItem -import com.tangem.tasks.ScanEvent import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf /** [REDACTED_AUTHOR] */ -class ReadEventConverter : ModelToItems { - override fun convert(from: ScanEvent.OnReadEvent): List = CardConverter().convert(from.card) +class ReadEventConverter : ModelToItems> { + override fun convert(from: CompletionResult.Success): List = CardConverter().convert(from.data) } class SignResponseConverter : ModelToItems { diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt index 4477f12894..a42d51e237 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/responses/ui/ResponseFragment.kt @@ -33,7 +33,7 @@ open class ResponseFragment : BaseFragment() { } private fun setTittle() { - val titleId = selfVM.determineTitleId(mainActivityVM.responseEvent) + val titleId = selfVM.determineTitleId(mainActivityVM.commandResponse) activity?.setTitle(titleId) } @@ -47,7 +47,7 @@ open class ResponseFragment : BaseFragment() { private fun buildWidgets() { val builder = WidgetBuilder(ResponseItemBuilder()) - val itemList = selfVM.createItemList(mainActivityVM.responseEvent) + val itemList = selfVM.createItemList(mainActivityVM.commandResponse) itemList.forEach { builder.build(it, itemContainer) } } @@ -67,7 +67,7 @@ open class ResponseFragment : BaseFragment() { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_share -> { - shareText(ResponseJsonConverter().convertEvent(mainActivityVM.responseEvent)) + shareText(ResponseJsonConverter().convertResponse(mainActivityVM.commandResponse)) } } return super.onOptionsItemSelected(item) 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 1e5ed5eb9b..90e3931375 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,6 @@ package com.tangem.tangemtest.ucase.variants.scan.ui -import android.os.Bundle -import android.view.View -import androidx.lifecycle.Observer +import com.tangem.commands.Card import com.tangem.tangemtest.R import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager import com.tangem.tangemtest.ucase.domain.paramsManager.managers.ScanItemsManager @@ -17,14 +15,12 @@ class ScanActionFragment : BaseCardActionFragment() { override fun getLayoutId(): Int = R.layout.fg_action_card_scan - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - enableActionFab(true) + override fun initFab() { + actionFab.setOnClickListener { actionVM.invokeMainAction() } } - override fun listenReadResponse() { - actionVM.seReadResponse.observe(viewLifecycleOwner, Observer { - navigateTo(R.id.action_nav_card_action_to_response_screen) - }) + override fun responseCardDataHandled(card: Card?) { + super.responseCardDataHandled(card) + navigateTo(R.id.action_nav_card_action_to_response_screen) } } \ No newline at end of file