From ad014e143e925d3f4cf1537b51f0ea205e7434ab Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Mar 2020 10:56:33 +0300 Subject: [PATCH] Updated on 2026-08-14 --- tangem-demo/build.gradle | 3 +- .../{models => domain}/CardContext.kt | 2 +- .../card_action}/card_actions.kt | 26 ++++++---- .../params_manager}/factory.kt | 2 +- .../modifiers/after_action_modifiers.kt | 8 +-- .../modifiers/param_change_consequence.kt | 4 +- .../params_manager}/params_managers.kt | 21 ++++---- .../ui/BaseCardActionFragment.kt | 16 ++++-- .../ui/widgets/ParameterWidget.kt | 16 +++--- .../view_models/ParamsViewModel.kt | 4 +- .../main/res/layout/fg_action_card_scan.xml | 6 ++- .../main/res/layout/fg_action_card_sign.xml | 6 ++- .../main/res/layout/w_card_incoming_param.xml | 52 ++++++------------- 13 files changed, 84 insertions(+), 82 deletions(-) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models => domain}/CardContext.kt (92%) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models/params/manager => domain/card_action}/card_actions.kt (68%) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models/params/manager => domain/params_manager}/factory.kt (88%) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models/params/manager => domain/params_manager}/modifiers/after_action_modifiers.kt (74%) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models/params/manager => domain/params_manager}/modifiers/param_change_consequence.kt (86%) rename tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/{models/params/manager => domain/params_manager}/params_managers.kt (81%) diff --git a/tangem-demo/build.gradle b/tangem-demo/build.gradle index baed8de1b6..e489a1ec36 100644 --- a/tangem-demo/build.gradle +++ b/tangem-demo/build.gradle @@ -48,9 +48,10 @@ dependencies { implementation "androidx.navigation:navigation-ui-ktx:2.2.1" implementation "androidx.recyclerview:recyclerview:1.2.0-alpha01" implementation "com.google.android.material:material:1.2.0-alpha05" + implementation "androidx.viewpager2:viewpager2:1.0.0" implementation 'com.google.code.gson:gson:2.8.6' - implementation 'com.github.gbIxaHue:eu4d:0.2.3' + implementation 'com.github.gbIxaHue:eu4d:0.3.1' implementation 'io.reactivex.rxjava2:rxjava:2.2.6' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/CardContext.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/CardContext.kt similarity index 92% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/CardContext.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/CardContext.kt index 22af4ca879..f0137ce272 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/CardContext.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/CardContext.kt @@ -1,4 +1,4 @@ -package com.tangem.tangemtest.card_use_cases.models +package com.tangem.tangemtest.card_use_cases.domain import androidx.fragment.app.FragmentActivity import com.tangem.CardManager diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/card_actions.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/card_action/card_actions.kt similarity index 68% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/card_actions.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/card_action/card_actions.kt index 79df4fa6bd..51ed8731de 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/card_actions.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/card_action/card_actions.kt @@ -1,10 +1,13 @@ -package com.tangem.tangemtest.card_use_cases.models.params.manager +package com.tangem.tangemtest.card_use_cases.domain.card_action import com.tangem.CardManager import com.tangem.common.tlv.TlvTag -import com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers.AfterActionModification -import com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers.AfterScanModifier -import com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers.ParamsChangeConsequence +import com.tangem.tangemtest.card_use_cases.domain.params_manager.ActionCallback +import com.tangem.tangemtest.card_use_cases.domain.params_manager.IncomingParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.findParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers.AfterActionModification +import com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers.AfterScanModifier +import com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers.ParamsChangeConsequence import com.tangem.tasks.TaskEvent import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf @@ -49,9 +52,12 @@ class ScanAction : BaseCardAction() { class SignAction : BaseCardAction() { override fun executeMainAction(attrs: AttrForAction, callback: ActionCallback) { - val hashes = findHashes() - val cardId = ParamsManager.findParameter(TlvTag.CardId, attrs.paramsList)?.data - attrs.cardManager.sign(hashes, stringOf(cardId)) { handleResponse(it, null, attrs, callback) } + val dataForHashing = attrs.paramsList.findParameter(TlvTag.TransactionOutHash) ?: return + + val arHashes = createHashes(stringOf(dataForHashing.data)) + val cardId = attrs.paramsList.findParameter(TlvTag.CardId)?.data ?: return + + attrs.cardManager.sign(arHashes, stringOf(cardId)) { handleResponse(it, null, attrs, callback) } } override fun getActionByTag(tag: TlvTag, attrs: AttrForAction): ((ActionCallback) -> Unit)? { @@ -61,9 +67,7 @@ class SignAction : BaseCardAction() { } } - private fun findHashes(): Array { - val hash1 = ByteArray(32) { 1 } - val hash2 = ByteArray(32) { 2 } - return arrayOf(hash1, hash2) + private fun createHashes(value: String): Array { + return arrayOf(value.toByteArray()) } } \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/factory.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/factory.kt similarity index 88% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/factory.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/factory.kt index 5e9bc9624f..54a3784a7c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/factory.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/factory.kt @@ -1,4 +1,4 @@ -package com.tangem.tangemtest.card_use_cases.models.params.manager +package com.tangem.tangemtest.card_use_cases.domain.params_manager import com.tangem.tangemtest.commons.ActionType import ru.dev.gbixahue.eu4d.lib.kotlin.common.BaseTypedHolder diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/after_action_modifiers.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/after_action_modifiers.kt similarity index 74% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/after_action_modifiers.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/after_action_modifiers.kt index 8a72f0b514..c504238c0f 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/after_action_modifiers.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/after_action_modifiers.kt @@ -1,8 +1,8 @@ -package com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers +package com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers import com.tangem.common.tlv.TlvTag -import com.tangem.tangemtest.card_use_cases.models.params.manager.IncomingParameter -import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManager +import com.tangem.tangemtest.card_use_cases.domain.params_manager.IncomingParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.findParameter import com.tangem.tasks.ScanEvent import com.tangem.tasks.TaskEvent @@ -19,7 +19,7 @@ interface AfterActionModification { class AfterScanModifier : AfterActionModification { override fun modify(taskEvent: TaskEvent<*>, paramsList: List): List { - val parameter = ParamsManager.findParameter(TlvTag.CardId, paramsList) ?: return listOf() + val parameter = paramsList.findParameter(TlvTag.CardId) ?: return listOf() return if (taskEvent is TaskEvent.Event && taskEvent.data is ScanEvent.OnReadEvent) { parameter.data = (taskEvent.data as ScanEvent.OnReadEvent).card.cardId diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/param_change_consequence.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/param_change_consequence.kt similarity index 86% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/param_change_consequence.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/param_change_consequence.kt index 60707484b7..e2c2148bd9 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/modifiers/param_change_consequence.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/modifiers/param_change_consequence.kt @@ -1,7 +1,7 @@ -package com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers +package com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers import com.tangem.common.tlv.TlvTag -import com.tangem.tangemtest.card_use_cases.models.params.manager.IncomingParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.IncomingParameter /** [REDACTED_AUTHOR] diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/params_managers.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/params_managers.kt similarity index 81% rename from tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/params_managers.kt rename to tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/params_managers.kt index a5f4e070d9..c22861de59 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/models/params/manager/params_managers.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/domain/params_manager/params_managers.kt @@ -1,9 +1,12 @@ -package com.tangem.tangemtest.card_use_cases.models.params.manager +package com.tangem.tangemtest.card_use_cases.domain.params_manager import com.tangem.CardManager import com.tangem.common.tlv.TlvTag -import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManager.Companion.findParameter -import com.tangem.tangemtest.card_use_cases.models.params.manager.modifiers.ParamsChangeConsequence +import com.tangem.tangemtest.card_use_cases.domain.card_action.AttrForAction +import com.tangem.tangemtest.card_use_cases.domain.card_action.CardAction +import com.tangem.tangemtest.card_use_cases.domain.card_action.ScanAction +import com.tangem.tangemtest.card_use_cases.domain.card_action.SignAction +import com.tangem.tangemtest.card_use_cases.domain.params_manager.modifiers.ParamsChangeConsequence import com.tangem.tasks.TaskEvent /** @@ -26,10 +29,10 @@ interface ParamsManager { fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) fun getActionByTag(tag: TlvTag, cardManager: CardManager): ((ActionCallback) -> Unit)? - companion object { - fun findParameter(tlvTag: TlvTag, paramsList: List) - : IncomingParameter? = paramsList.firstOrNull { it.tlvTag == tlvTag } - } +} + +fun List.findParameter(tag: TlvTag): IncomingParameter? { + return firstOrNull { it.tlvTag == tag } } abstract class BaseParamsManager(protected val action: CardAction) : ParamsManager { @@ -40,7 +43,7 @@ abstract class BaseParamsManager(protected val action: CardAction) : ParamsManag override fun parameterChanged(tag: TlvTag, value: Any?, callback: AffectedParamsCallback?) { if (paramsList.isEmpty()) return - val foundParam = findParameter(tag, paramsList) ?: return + val foundParam = paramsList.findParameter(tag) ?: return foundParam.data = value applyChangesByAffectedParams(foundParam, callback) @@ -75,7 +78,7 @@ class SignParamsManager : BaseParamsManager(SignAction()) { override fun createParamsList(): List { return listOf( IncomingParameter(TlvTag.CardId, null), - IncomingParameter(TlvTag.TransactionOutHash, "") + IncomingParameter(TlvTag.TransactionOutHash, "Data used for hashing") ) } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/BaseCardActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/BaseCardActionFragment.kt index 6ae2504a1b..f59884a96c 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/BaseCardActionFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/BaseCardActionFragment.kt @@ -15,8 +15,8 @@ import com.google.android.material.snackbar.Snackbar import com.tangem.CardManager import com.tangem.tangem_sdk_new.extensions.init import com.tangem.tangemtest.R -import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManager -import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManagerFactory +import com.tangem.tangemtest.card_use_cases.domain.params_manager.ParamsManager +import com.tangem.tangemtest.card_use_cases.domain.params_manager.ParamsManagerFactory import com.tangem.tangemtest.card_use_cases.ui.widgets.ParameterWidget import com.tangem.tangemtest.card_use_cases.view_models.ActionViewModelFactory import com.tangem.tangemtest.card_use_cases.view_models.ParamsViewModel @@ -29,14 +29,20 @@ import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder */ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { - protected val mainView: View by lazy { view!! } protected val incomingParamsContainer: ViewGroup by lazy { mainView.findViewById(R.id.ll_incoming_params_container) } protected val viewModel: ParamsViewModel by viewModels { ActionViewModelFactory(paramsManager) } + protected lateinit var mainView: View private val paramsManager: ParamsManager by lazy { ParamsManagerFactory.createFactory().get(getAction())!! } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + Log.d(this, "onCreateView") + mainView = inflater.inflate(getLayoutId(), container, false) + return mainView + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) Log.d(this, "onViewCreated") @@ -87,12 +93,12 @@ abstract class BaseCardActionFragment : Fragment(), LayoutHolder { Snackbar.make(mainView, message, BaseTransientBottomBar.LENGTH_SHORT).show() } - private fun inflateParamView(where: ViewGroup): View { + 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) inflater.inflate(R.layout.m_divider_h, where, true) - return view + return view as ViewGroup } abstract fun getAction(): ActionType diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/widgets/ParameterWidget.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/widgets/ParameterWidget.kt index 9e8333d0a2..67915dfc31 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/widgets/ParameterWidget.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/ui/widgets/ParameterWidget.kt @@ -5,13 +5,13 @@ import android.text.TextWatcher import android.view.View import android.view.ViewGroup import android.widget.Button -import android.widget.EditText -import android.widget.TextView import androidx.transition.AutoTransition import androidx.transition.TransitionManager +import com.google.android.material.textfield.TextInputEditText +import com.google.android.material.textfield.TextInputLayout import com.tangem.common.tlv.TlvTag import com.tangem.tangemtest.R -import com.tangem.tangemtest.card_use_cases.models.params.manager.IncomingParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.IncomingParameter import com.tangem.tangemtest.commons.ActionType import ru.dev.gbixahue.eu4d.lib.android.global.log.Log import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf @@ -19,7 +19,7 @@ import ru.dev.gbixahue.eu4d.lib.kotlin.stringOf /** [REDACTED_AUTHOR] */ -class ParameterWidget(parent: View, model: IncomingParameter) { +class ParameterWidget(private val parent: ViewGroup, model: IncomingParameter) { val tlvTag: TlvTag = model.tlvTag @@ -30,8 +30,8 @@ class ParameterWidget(parent: View, model: IncomingParameter) { toggleActionBtnVisibility() } - private val tvName: TextView = parent.findViewById(R.id.tv_param_name) - private val etValue: EditText = parent.findViewById(R.id.tv_param_value) + private val tilValue: TextInputLayout = parent.findViewById(R.id.til_param) + private val etValue: TextInputEditText = parent.findViewById(R.id.et_param) private val btnAction: Button = parent.findViewById(R.id.btn_action) private val valueWatcher: TextWatcher by lazy { getWatcher() } @@ -39,7 +39,7 @@ class ParameterWidget(parent: View, model: IncomingParameter) { private var value: Any? = model.data init { - tvName.text = model.tlvTag.name + tilValue.hint = model.tlvTag.name etValue.setText(stringOf(model.data)) etValue.addTextChangedListener(valueWatcher) btnAction.setOnClickListener { onActionBtnClickListener?.invoke() } @@ -86,7 +86,7 @@ class ParameterWidget(parent: View, model: IncomingParameter) { private fun toggleActionBtnVisibility() { fun switchVisibilityState(newState: Int) { actionBtnVisibilityState = newState - TransitionManager.beginDelayedTransition(etValue.parent as ViewGroup, AutoTransition()) + TransitionManager.beginDelayedTransition(parent, AutoTransition()) btnAction.visibility = actionBtnVisibilityState } when { diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/view_models/ParamsViewModel.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/view_models/ParamsViewModel.kt index deebec0cf5..974c2e0453 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/view_models/ParamsViewModel.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/card_use_cases/view_models/ParamsViewModel.kt @@ -9,8 +9,8 @@ import com.tangem.CardManager import com.tangem.commands.Card import com.tangem.common.tlv.TlvTag import com.tangem.tangemtest._arch.SingleLiveEvent -import com.tangem.tangemtest.card_use_cases.models.params.manager.IncomingParameter -import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManager +import com.tangem.tangemtest.card_use_cases.domain.params_manager.IncomingParameter +import com.tangem.tangemtest.card_use_cases.domain.params_manager.ParamsManager import com.tangem.tangemtest.commons.performAction import com.tangem.tasks.ScanEvent import com.tangem.tasks.TaskError 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 2a3ad5529a..bb8668ecf6 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 @@ -22,7 +22,11 @@ - + diff --git a/tangem-demo/src/main/res/layout/fg_action_card_sign.xml b/tangem-demo/src/main/res/layout/fg_action_card_sign.xml index 2a3ad5529a..bb8668ecf6 100644 --- a/tangem-demo/src/main/res/layout/fg_action_card_sign.xml +++ b/tangem-demo/src/main/res/layout/fg_action_card_sign.xml @@ -22,7 +22,11 @@ - + diff --git a/tangem-demo/src/main/res/layout/w_card_incoming_param.xml b/tangem-demo/src/main/res/layout/w_card_incoming_param.xml index 8e60a09379..554f39f7bf 100644 --- a/tangem-demo/src/main/res/layout/w_card_incoming_param.xml +++ b/tangem-demo/src/main/res/layout/w_card_incoming_param.xml @@ -3,47 +3,27 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="48dp"> + android:layout_height="wrap_content"> - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + +