diff --git a/.gitignore b/.gitignore index d741153000..39d65ab0a1 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,9 @@ local.properties .idea/*.xml .idea/codeStyles +# LayoutInspector files +.captures + # OS-specific files .DS_Store .DS_Store? diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt new file mode 100644 index 0000000000..f5f02c0ace --- /dev/null +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/commons/Abstractions.kt @@ -0,0 +1,9 @@ +package com.tangem.tangemtest.commons + +/** +[REDACTED_AUTHOR] + */ +interface Store { + fun save(config: M) + fun restore(): M +} \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt index 285c8de4b6..a5f736fe1f 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/actions/Action.kt @@ -43,4 +43,6 @@ abstract class BaseAction : Action { } callback(taskEvent, modifiedItems) } + + override fun getActionByTag(payload: PayloadHolder, id: Id, attrs: AttrForAction): ((ActionCallback) -> Unit)? = null } \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt index f97013d6f8..42b92174ad 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/ItemsManager.kt @@ -19,12 +19,12 @@ typealias ActionCallback = (ActionResponse, AffectedList) -> Unit interface ItemsManager : PayloadHolder { fun itemChanged(id: Id, value: Any?, callback: AffectedItemsCallback? = null) + fun setItems(items: List) fun getItems(): List + fun setItemChangeConsequences(consequence: ItemsChangeConsequence?) fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? fun attachPayload(payload: Payload) - - val consequence: ItemsChangeConsequence? } interface PayloadKey { 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 03ccaf4728..bfb987742d 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 @@ -1,5 +1,6 @@ package com.tangem.tangemtest.ucase.domain.paramsManager.managers +import androidx.lifecycle.LifecycleObserver import com.tangem.CardManager import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.Payload @@ -11,18 +12,22 @@ import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback import com.tangem.tangemtest.ucase.domain.paramsManager.AffectedItemsCallback import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence +import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** [REDACTED_AUTHOR] */ -abstract class BaseItemsManager(protected val action: Action) : ItemsManager { +open class BaseItemsManager(protected val action: Action) : ItemsManager, LifecycleObserver { - protected val itemList: List by lazy { createItemsList() } - - override val consequence: ItemsChangeConsequence? = null + init { + Log.d(this, "new instance created") + } override val payload: MutableMap = mutableMapOf() + protected var changeConsequence: ItemsChangeConsequence? = null + protected val itemList: MutableList = mutableListOf() + override fun itemChanged(id: Id, value: Any?, callback: AffectedItemsCallback?) { if (itemList.isEmpty()) return val foundItem = itemList.findDataItem(id) ?: return @@ -31,9 +36,24 @@ abstract class BaseItemsManager(protected val action: Action) : ItemsManager { applyChangesByAffectedItems(foundItem, callback) } + override fun setItems(items: List) { + itemList.clear() + itemList.addAll(items) + } + override fun getItems(): List = itemList - override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? = null + override fun setItemChangeConsequences(consequence: ItemsChangeConsequence?) { + this.changeConsequence = consequence + } + + override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { + action.executeMainAction(this, getAttrsForAction(cardManager), callback) + } + + override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? { + return action.getActionByTag(this, id, getAttrsForAction(cardManager)) + } override fun attachPayload(payload: Payload) { payload.forEach { this.payload[it.key] = it.value } @@ -41,11 +61,9 @@ abstract class BaseItemsManager(protected val action: Action) : ItemsManager { // Use it if current item needs to be affect any other items protected open fun applyChangesByAffectedItems(param: Item, callback: AffectedItemsCallback?) { - consequence?.affectChanges(this, param, itemList)?.let { callback?.invoke(it) } + changeConsequence?.affectChanges(this, param, itemList)?.let { callback?.invoke(it) } } protected fun getAttrsForAction(cardManager: CardManager) - : AttrForAction = AttrForAction(cardManager, itemList, payload, consequence) - - abstract fun createItemsList(): List + : AttrForAction = AttrForAction(cardManager, itemList, payload, changeConsequence) } \ No newline at end of file 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 8267c86bb6..0000000000 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/DepersonalizeItemsManager.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.tangem.tangemtest.ucase.domain.paramsManager.managers - -import com.tangem.CardManager -import com.tangem.tangemtest._arch.structure.Id -import com.tangem.tangemtest._arch.structure.abstraction.Item -import com.tangem.tangemtest._arch.structure.impl.EditTextItem -import com.tangem.tangemtest.ucase.domain.actions.DepersonalizeAction -import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback -import com.tangem.tangemtest.ucase.variants.TlvId - -/** -[REDACTED_AUTHOR] - */ -class DepersonalizeItemsManager : BaseItemsManager(DepersonalizeAction()) { - override fun createItemsList(): List { - return listOf(EditTextItem(TlvId.CardId, null)) - } - - override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { - action.executeMainAction(this, getAttrsForAction(cardManager), callback) - } - - override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? { - return action.getActionByTag(this, id, getAttrsForAction(cardManager)) - } -} \ No newline at end of file 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 index c0381252bb..a483cfe69d 100644 --- 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 @@ -1,31 +1,26 @@ package com.tangem.tangemtest.ucase.domain.paramsManager.managers import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent import com.tangem.CardManager -import com.tangem.tangemtest._arch.structure.abstraction.Item +import com.tangem.tangemtest.commons.Store import com.tangem.tangemtest.ucase.domain.actions.PersonalizeAction import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback import com.tangem.tangemtest.ucase.variants.personalize.converter.PersonalizeConfigConverter import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizeConfig -import ru.dev.gbixahue.eu4d.lib.android.global.log.Log /** [REDACTED_AUTHOR] */ class PersonalizeItemsManager( private val store: Store -) : BaseItemsManager(PersonalizeAction()), LifecycleObserver { +) : BaseItemsManager(PersonalizeAction()) { - init { - Log.d(this, "new instance created") - } private val converter = PersonalizeConfigConverter() - override fun createItemsList(): List { + init { val config = store.restore() - return converter.convert(config) + setItems(converter.convert(config)) } override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { @@ -37,9 +32,4 @@ class PersonalizeItemsManager( val config = converter.convert(itemList, PersonalizeConfig()) store.save(config) } -} - -interface Store { - fun save(config: M) - fun restore(): M } \ No newline at end of file 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 1d9c973786..0000000000 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/ScanItemsManager.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.tangem.tangemtest.ucase.domain.paramsManager.managers - -import com.tangem.CardManager -import com.tangem.tangemtest._arch.structure.abstraction.Item -import com.tangem.tangemtest.ucase.domain.actions.ScanAction -import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback - -/** -[REDACTED_AUTHOR] - */ -class ScanItemsManager : BaseItemsManager(ScanAction()) { - override fun createItemsList(): List = listOf() - - override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { - action.executeMainAction(this, getAttrsForAction(cardManager), callback) - } -} \ No newline at end of file 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 7d5d77a912..0000000000 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SignItemsManager.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.tangem.tangemtest.ucase.domain.paramsManager.managers - -import com.tangem.CardManager -import com.tangem.tangemtest._arch.structure.Id -import com.tangem.tangemtest._arch.structure.abstraction.Item -import com.tangem.tangemtest._arch.structure.impl.EditTextItem -import com.tangem.tangemtest.ucase.domain.actions.SignAction -import com.tangem.tangemtest.ucase.domain.paramsManager.ActionCallback -import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.ItemsChangeConsequence -import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.SignScanConsequence -import com.tangem.tangemtest.ucase.variants.TlvId - -/** -[REDACTED_AUTHOR] - */ -class SignItemsManager : BaseItemsManager(SignAction()) { - - override val consequence: ItemsChangeConsequence? by lazy { SignScanConsequence() } - - override fun createItemsList(): List { - return listOf( - EditTextItem(TlvId.CardId, null), - EditTextItem(TlvId.TransactionOutHash, "Data used for hashing") - ) - } - - override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { - action.executeMainAction(this, getAttrsForAction(cardManager), callback) - } - - override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? { - return action.getActionByTag(this, id, getAttrsForAction(cardManager)) - } -} \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt new file mode 100644 index 0000000000..c892b6761b --- /dev/null +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/managers/SimpleManagers.kt @@ -0,0 +1,31 @@ +package com.tangem.tangemtest.ucase.domain.paramsManager.managers + +import com.tangem.tangemtest._arch.structure.impl.EditTextItem +import com.tangem.tangemtest.ucase.domain.actions.DepersonalizeAction +import com.tangem.tangemtest.ucase.domain.actions.ScanAction +import com.tangem.tangemtest.ucase.domain.actions.SignAction +import com.tangem.tangemtest.ucase.domain.paramsManager.triggers.changeConsequence.SignScanConsequence +import com.tangem.tangemtest.ucase.variants.TlvId + +/** +[REDACTED_AUTHOR] + */ +class ScanItemsManager : BaseItemsManager(ScanAction()) + +class DepersonalizeItemsManager : BaseItemsManager(DepersonalizeAction()) { + + init { + setItems(listOf(EditTextItem(TlvId.CardId, null))) + } +} + +class SignItemsManager : BaseItemsManager(SignAction()) { + + init { + setItemChangeConsequences(SignScanConsequence()) + setItems(listOf( + EditTextItem(TlvId.CardId, null), + EditTextItem(TlvId.TransactionOutHash, "Data used for hashing") + )) + } +} \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt new file mode 100644 index 0000000000..6f7acaba65 --- /dev/null +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/personalize/PersonalizationConfigStore.kt @@ -0,0 +1,26 @@ +package com.tangem.tangemtest.ucase.variants.personalize + +import android.content.Context +import android.content.SharedPreferences +import androidx.core.content.edit +import com.google.gson.Gson +import com.tangem.tangemtest.AppTangemDemo +import com.tangem.tangemtest.commons.Store +import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizeConfig + +class PersonalizationConfigStore(context: Context) : Store { + + private val key = "personalization_config" + + private val sp: SharedPreferences = (context.applicationContext as AppTangemDemo).sharedPreferences() + private val gson: Gson = Gson() + + override fun save(config: PersonalizeConfig) { + sp.edit(true) { putString(key, gson.toJson(config)) } + } + + override fun restore(): PersonalizeConfig { + val json = sp.getString(key, gson.toJson(PersonalizeConfig())) + return gson.fromJson(json, PersonalizeConfig::class.java) + } +} \ 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 index 788d196392..740eeb0dde 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 @@ -1,13 +1,8 @@ package com.tangem.tangemtest.ucase.variants.personalize.ui -import android.content.Context -import android.content.SharedPreferences import android.os.Bundle import android.view.View -import androidx.core.content.edit import androidx.lifecycle.Observer -import com.google.gson.Gson -import com.tangem.tangemtest.AppTangemDemo import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id import com.tangem.tangemtest._arch.structure.abstraction.Item @@ -15,12 +10,11 @@ import com.tangem.tangemtest._arch.widget.WidgetBuilder import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager import com.tangem.tangemtest.ucase.domain.paramsManager.PayloadKey import com.tangem.tangemtest.ucase.domain.paramsManager.managers.PersonalizeItemsManager -import com.tangem.tangemtest.ucase.domain.paramsManager.managers.Store import com.tangem.tangemtest.ucase.tunnel.ActionView import com.tangem.tangemtest.ucase.tunnel.CardError import com.tangem.tangemtest.ucase.tunnel.ItemError import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment -import com.tangem.tangemtest.ucase.variants.personalize.dto.PersonalizeConfig +import com.tangem.tangemtest.ucase.variants.personalize.PersonalizationConfigStore import com.tangem.tangemtest.ucase.variants.personalize.ui.widgets.PersonalizeItemBuilder import ru.dev.gbixahue.eu4d.lib.android.global.log.Log @@ -81,27 +75,4 @@ class PersonalizeFragment : BaseCardActionFragment() { else -> showSnackbar(requireContext().getString(R.string.unknown)) } } -} - -class PersonalizationConfigStore(context: Context) : Store { - - private val key = "personalization_config" - - private val sp: SharedPreferences = (context.applicationContext as AppTangemDemo).sharedPreferences() - private val gson: Gson = Gson() - - override fun save(config: PersonalizeConfig) { - sp.edit(true) { putString(key, gson.toJson(config)) } - } - - override fun restore(): PersonalizeConfig { - val json = sp.getString(key, gson.toJson(PersonalizeConfig())) - return gson.fromJson(json, PersonalizeConfig::class.java) - } -} - - - - - - +} \ No newline at end of file