Updated on 2026-08-14
This commit is contained in:
parent
6ea0feb3ee
commit
273f02f256
9 changed files with 90 additions and 61 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ActionType, ItemsManager>() {
|
||||
|
||||
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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -31,7 +31,7 @@ abstract class BaseItemsManager(protected val action: Action) : ItemsManager {
|
|||
applyChangesByAffectedItems(foundItem, callback)
|
||||
}
|
||||
|
||||
override fun getItems(): MutableList<Item> = itemList.toMutableList()
|
||||
override fun getItems(): List<Item> = itemList
|
||||
|
||||
override fun getActionByTag(id: Id, cardManager: CardManager): ((ActionCallback) -> Unit)? = null
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Item> = PersonalizeConfigConverter().convert(PersonalizeConfig())
|
||||
class PersonalizeItemsManager(
|
||||
private val store: Store<PersonalizeConfig>
|
||||
) : BaseItemsManager(PersonalizeAction()), LifecycleObserver {
|
||||
|
||||
init {
|
||||
Log.d(this, "new instance created")
|
||||
}
|
||||
private val converter = PersonalizeConfigConverter()
|
||||
|
||||
override fun createItemsList(): List<Item> {
|
||||
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<M> {
|
||||
fun save(config: M)
|
||||
fun restore(): M
|
||||
}
|
||||
|
|
@ -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<MainViewModel>()
|
||||
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<ParameterWidget>()
|
||||
|
||||
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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
}
|
||||
|
|
@ -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<PersonalizeConfig> {
|
||||
|
||||
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() {
|
|||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue