From 273f02f256704cf91286e6958e6129eb7284b75b Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Apr 2020 03:02:10 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tangemtest/AppTangemDemo.kt | 6 +++ .../ucase/domain/paramsManager/Factory.kt | 31 ---------------- .../managers/BaseItemsManager.kt | 2 +- .../managers/PersonalizeItemsManager.kt | 30 ++++++++++++++- .../ucase/ui/BaseCardActionFragment.kt | 23 +++++------- .../ui/DepersonalizeActionFragment.kt | 8 ++-- .../personalize/ui/PersonalizeFragment.kt | 37 +++++++++++++++++-- .../variants/scan/ui/ScanActionFragment.kt | 7 ++-- .../variants/sign/ui/SignActionFragment.kt | 7 ++-- 9 files changed, 90 insertions(+), 61 deletions(-) delete mode 100644 tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt index c9fc162b6a..ab604ee506 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/AppTangemDemo.kt @@ -1,6 +1,8 @@ package com.tangem.tangemtest import android.app.Application +import android.content.Context +import android.content.SharedPreferences import com.tangem.tangemtest._arch.structure.ILog import com.tangem.tangemtest._arch.structure.ItemLogger import com.tangem.tangemtest.commons.TangemLogger @@ -23,6 +25,10 @@ class AppTangemDemo : Application() { ILog.setLogger(ItemLogger()) } + fun sharedPreferences(name: String = "DevKitApp", mode: Int = Context.MODE_PRIVATE): SharedPreferences { + return getSharedPreferences(name, mode) + } + companion object { lateinit var appInstance: AppTangemDemo } 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 deleted file mode 100644 index c71097292c..0000000000 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/domain/paramsManager/Factory.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.tangem.tangemtest.ucase.domain.paramsManager - -import com.tangem.tangemtest.ucase.domain.paramsManager.managers.DepersonalizeItemsManager -import com.tangem.tangemtest.ucase.domain.paramsManager.managers.PersonalizeItemsManager -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 ItemManagersStore : BaseTypedHolder() { - - companion object { - 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()) - register(ActionType.Depersonalize, DepersonalizeItemsManager()) - } - } - } -} \ 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 c9016165ac..03ccaf4728 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 @@ -31,7 +31,7 @@ abstract class BaseItemsManager(protected val action: Action) : ItemsManager { applyChangesByAffectedItems(foundItem, callback) } - override fun getItems(): MutableList = itemList.toMutableList() + override fun getItems(): List = itemList override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? = null 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 c8c0b07380..c0381252bb 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,19 +1,45 @@ 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.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 : BaseItemsManager(PersonalizeAction()) { - override fun createItemsList(): List = PersonalizeConfigConverter().convert(PersonalizeConfig()) +class PersonalizeItemsManager( + private val store: Store +) : BaseItemsManager(PersonalizeAction()), LifecycleObserver { + + init { + Log.d(this, "new instance created") + } + private val converter = PersonalizeConfigConverter() + + override fun createItemsList(): List { + val config = store.restore() + return converter.convert(config) + } override fun invokeMainAction(cardManager: CardManager, callback: ActionCallback) { action.executeMainAction(this, getAttrsForAction(cardManager), callback) } + + @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) + fun onDestroy() { + 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/ui/BaseCardActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/ui/BaseCardActionFragment.kt index 63e2c8be82..67242ae326 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 @@ -15,10 +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.PayloadKey -import com.tangem.tangemtest.ucase.resources.ActionType import com.tangem.tangemtest.ucase.tunnel.ActionView import com.tangem.tangemtest.ucase.tunnel.CardError import com.tangem.tangemtest.ucase.ui.widgets.ParameterWidget @@ -30,26 +28,20 @@ import ru.dev.gbixahue.eu4d.lib.android.global.log.Log */ abstract class BaseCardActionFragment : BaseFragment(), ActionView { - protected val itemContainer: ViewGroup - get() = mainView.findViewById(R.id.ll_container) - - protected val actionFab: FloatingActionButton - get() = mainView.findViewById(R.id.fab_action) + protected lateinit var itemContainer: ViewGroup + protected lateinit var actionFab: FloatingActionButton + protected abstract val itemsManager: ItemsManager protected val mainActivityVM by activityViewModels() protected val actionVM: ActionViewModel by viewModels { ActionViewModelFactory(itemsManager) } - protected val itemsManager: ItemsManager by lazy { - Log.d(this, "create ItemManager") - ItemManagersStore.instance.get(getAction())!! - } - private val paramsWidgetList = mutableListOf() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) Log.d(this, "onViewCreated") + bindViews() viewLifecycleOwner.lifecycle.addObserver(actionVM) actionVM.setCardManager(CardManager.init(requireActivity())) actionVM.attachToPayload(mutableMapOf(PayloadKey.actionView to this as ActionView)) @@ -58,6 +50,11 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { createWidgets { subscribeToViewModelChanges() } } + protected open fun bindViews() { + itemContainer = mainView.findViewById(R.id.ll_container) + actionFab = mainView.findViewById(R.id.fab_action) + } + protected open fun initFab() { enableActionFab(false) actionFab.setOnClickListener { actionVM.invokeMainAction() } @@ -140,6 +137,4 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { else -> showSnackbar(requireContext().getString(R.string.unknown)) } } - - abstract fun getAction(): ActionType } \ No newline at end of file diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt index 6567e465b1..e2ae9cdbdd 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/depersonalize/ui/DepersonalizeActionFragment.kt @@ -1,7 +1,8 @@ package com.tangem.tangemtest.ucase.variants.depersonalize.ui import com.tangem.tangemtest.R -import com.tangem.tangemtest.ucase.resources.ActionType +import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager +import com.tangem.tangemtest.ucase.domain.paramsManager.managers.DepersonalizeItemsManager import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment /** @@ -9,8 +10,7 @@ import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment */ class DepersonalizeActionFragment : BaseCardActionFragment() { + override val itemsManager: ItemsManager by lazy { DepersonalizeItemsManager() } + override fun getLayoutId(): Int = R.layout.fg_depersonalize - - override fun getAction(): ActionType = ActionType.Depersonalize - } \ 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 ebf8b92c2a..788d196392 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,16 +1,26 @@ 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 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.resources.ActionType +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.ui.widgets.PersonalizeItemBuilder import ru.dev.gbixahue.eu4d.lib.android.global.log.Log @@ -19,8 +29,15 @@ import ru.dev.gbixahue.eu4d.lib.android.global.log.Log */ class PersonalizeFragment : BaseCardActionFragment() { + override val itemsManager: ItemsManager by lazy { PersonalizeItemsManager(PersonalizationConfigStore(requireContext())) } + override fun getLayoutId(): Int = R.layout.fg_personalize + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + lifecycle.addObserver(itemsManager as PersonalizeItemsManager) + } + override fun initFab() { actionFab.setOnClickListener { actionVM.invokeMainAction() } } @@ -64,8 +81,23 @@ class PersonalizeFragment : BaseCardActionFragment() { else -> showSnackbar(requireContext().getString(R.string.unknown)) } } +} - override fun getAction(): ActionType = ActionType.Personalize +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) + } } @@ -73,4 +105,3 @@ class PersonalizeFragment : BaseCardActionFragment() { - 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 c878382e63..1edc4c72de 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 @@ -5,7 +5,8 @@ import android.view.View import androidx.core.os.bundleOf import androidx.lifecycle.Observer import com.tangem.tangemtest.R -import com.tangem.tangemtest.ucase.resources.ActionType +import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager +import com.tangem.tangemtest.ucase.domain.paramsManager.managers.ScanItemsManager import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment import com.tangem.tangemtest.ucase.ui.response.BaseCardResponseFragment @@ -14,9 +15,9 @@ import com.tangem.tangemtest.ucase.ui.response.BaseCardResponseFragment */ class ScanActionFragment : BaseCardActionFragment() { - override fun getLayoutId(): Int = R.layout.fg_action_card_scan + override val itemsManager: ItemsManager by lazy { ScanItemsManager() } - override fun getAction(): ActionType = ActionType.Scan + override fun getLayoutId(): Int = R.layout.fg_action_card_scan override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt index 9ce99ee075..1699672834 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/ucase/variants/sign/ui/SignActionFragment.kt @@ -1,7 +1,8 @@ package com.tangem.tangemtest.ucase.variants.sign.ui import com.tangem.tangemtest.R -import com.tangem.tangemtest.ucase.resources.ActionType +import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager +import com.tangem.tangemtest.ucase.domain.paramsManager.managers.SignItemsManager import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment /** @@ -9,7 +10,7 @@ import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment */ class SignActionFragment : BaseCardActionFragment() { - override fun getLayoutId(): Int = R.layout.fg_action_card_sign + override val itemsManager: ItemsManager by lazy { SignItemsManager() } - override fun getAction(): ActionType = ActionType.Sign + override fun getLayoutId(): Int = R.layout.fg_action_card_sign } \ No newline at end of file