From 402284dd27c55a04506417314f3b4255d006865a Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 13 Apr 2020 13:33:44 +0300 Subject: [PATCH 01/24] Updated on 2026-08-14 --- tangem-demo/build.gradle | 5 +- .../tangemtest/_main/entryPoint/RvActions.kt | 2 - .../ucase/ui/BaseCardActionFragment.kt | 16 +++-- .../ui/DepersonalizeActionFragment.kt | 3 - .../personalize/ui/PersonalizationFragment.kt | 71 ++++++++++++------- .../variants/responses/ui/ResponseFragment.kt | 2 +- .../variants/scan/ui/ScanActionFragment.kt | 32 ++++++++- .../variants/sign/ui/SignActionFragment.kt | 3 - .../main/res/layout/fg_action_card_scan.xml | 50 ------------- .../main/res/layout/fg_action_card_sign.xml | 40 ----------- ...lization.xml => fg_base_action_layout.xml} | 18 +---- .../src/main/res/layout/fg_card_response.xml | 2 +- .../src/main/res/layout/fg_depersonalize.xml | 40 ----------- .../main/res/layout/v_content_container.xml | 20 ++++++ .../main/res/layout/v_item_list_container.xml | 26 +++++++ .../src/main/res/navigation/navigation.xml | 8 +-- .../src/main/res/values/strings_scan.xml | 3 +- 17 files changed, 148 insertions(+), 193 deletions(-) delete mode 100644 tangem-demo/src/main/res/layout/fg_action_card_scan.xml delete mode 100644 tangem-demo/src/main/res/layout/fg_action_card_sign.xml rename tangem-demo/src/main/res/layout/{fg_personalization.xml => fg_base_action_layout.xml} (64%) delete mode 100644 tangem-demo/src/main/res/layout/fg_depersonalize.xml create mode 100644 tangem-demo/src/main/res/layout/v_content_container.xml create mode 100644 tangem-demo/src/main/res/layout/v_item_list_container.xml diff --git a/tangem-demo/build.gradle b/tangem-demo/build.gradle index fa9e64d58f..fd56546bed 100644 --- a/tangem-demo/build.gradle +++ b/tangem-demo/build.gradle @@ -46,10 +46,11 @@ dependencies { implementation "androidx.constraintlayout:constraintlayout:2.0.0-beta4" implementation "androidx.navigation:navigation-fragment-ktx:2.2.1" implementation "androidx.navigation:navigation-ui-ktx:2.2.1" - implementation "androidx.recyclerview:recyclerview:1.2.0-alpha01" + implementation "androidx.recyclerview:recyclerview:1.2.0-alpha02" + implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" 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.3.7' + implementation 'com.github.gbIxaHue:eu4d:0.3.8' } diff --git a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt b/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt index df045a572d..5433027e92 100644 --- a/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt +++ b/tangem-demo/src/main/java/com/tangem/tangemtest/_main/entryPoint/RvActions.kt @@ -59,8 +59,6 @@ class RvActionsVH( containerDescription.visibility = if (wrapper.descriptionIsVisible) View.VISIBLE else View.GONE } - - override fun onDataBound(data: ActionType) {} } fun RecyclerView.ViewHolder.getString(@StringRes id: Int?, ifNull: String = ""): String { 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 e9916b33f0..1449441016 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 @@ -8,6 +8,7 @@ import androidx.core.view.plusAssign import androidx.fragment.app.activityViewModels import androidx.fragment.app.viewModels import androidx.lifecycle.Observer +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.google.android.material.floatingactionbutton.FloatingActionButton import com.tangem.TangemSdk import com.tangem.commands.Card @@ -28,7 +29,8 @@ import ru.dev.gbixahue.eu4d.lib.android.global.log.Log */ abstract class BaseCardActionFragment : BaseFragment(), ActionView { - protected lateinit var itemContainer: ViewGroup + protected lateinit var swrLayout: SwipeRefreshLayout + protected lateinit var contentContainer: ViewGroup protected lateinit var actionFab: FloatingActionButton protected abstract val itemsManager: ItemsManager @@ -38,6 +40,8 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { private val paramsWidgetList = mutableListOf() + override fun getLayoutId(): Int = R.layout.fg_base_action_layout + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) Log.d(this, "onViewCreated") @@ -47,7 +51,7 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { actionVM.setCardManager(TangemSdk.init(requireActivity())) actionVM.attachToPayload(mutableMapOf(PayloadKey.actionView to this as ActionView)) - initFab() + initViews() createWidgets { widgetsWasCreated() subscribeToViewModelChanges() @@ -57,11 +61,13 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { protected open fun widgetsWasCreated() {} protected open fun bindViews() { - itemContainer = mainView.findViewById(R.id.ll_container) + swrLayout = mainView.findViewById(R.id.swr_layout) + contentContainer = mainView.findViewById(R.id.ll_content_container) actionFab = mainView.findViewById(R.id.fab_action) } - protected open fun initFab() { + protected open fun initViews() { + swrLayout.isEnabled = false enableActionFab(false) actionFab.setOnClickListener { actionVM.invokeMainAction() } } @@ -70,7 +76,7 @@ abstract class BaseCardActionFragment : BaseFragment(), ActionView { Log.d(this, "createWidgets") actionVM.ldItemList.observe(viewLifecycleOwner, Observer { itemList -> itemList.forEach { param -> - val widget = ParameterWidget(inflateParamView(itemContainer), param) + val widget = ParameterWidget(inflateParamView(contentContainer), param) widget.onValueChanged = { id, value -> actionVM.userChangedItem(id, value) } widget.onActionBtnClickListener = actionVM.getItemAction(param.id) paramsWidgetList.add(widget) 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 e2ae9cdbdd..107ab9b3b3 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,6 +1,5 @@ package com.tangem.tangemtest.ucase.variants.depersonalize.ui -import com.tangem.tangemtest.R import com.tangem.tangemtest.ucase.domain.paramsManager.ItemsManager import com.tangem.tangemtest.ucase.domain.paramsManager.managers.DepersonalizeItemsManager import com.tangem.tangemtest.ucase.ui.BaseCardActionFragment @@ -11,6 +10,4 @@ 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 } \ No newline at end of file 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 40133ebfd6..313410115c 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 @@ -4,7 +4,10 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import android.widget.Button +import android.widget.LinearLayout import androidx.lifecycle.Observer +import androidx.transition.Fade +import androidx.transition.TransitionManager import com.tangem.commands.Card import com.tangem.tangemtest.R import com.tangem.tangemtest._arch.structure.Id @@ -24,6 +27,8 @@ import com.tangem.tangemtest.ucase.variants.personalize.PersonalizationConfigSto import com.tangem.tangemtest.ucase.variants.personalize.ui.widgets.PersonalizationItemBuilder import ru.dev.gbixahue.eu4d.lib.android._android.views.inflate import ru.dev.gbixahue.eu4d.lib.android.global.log.Log +import ru.dev.gbixahue.eu4d.lib.android.global.threading.postUI +import ru.dev.gbixahue.eu4d.lib.android.global.threading.postWork /** [REDACTED_AUTHOR] @@ -32,17 +37,56 @@ class PersonalizationFragment : BaseCardActionFragment() { override val itemsManager: ItemsManager by lazy { PersonalizationItemsManager(PersonalizationConfigStore(requireContext())) } - override fun getLayoutId(): Int = R.layout.fg_personalization + override fun getLayoutId(): Int = R.layout.fg_base_action_layout override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) lifecycle.addObserver(itemsManager as PersonalizationItemsManager) } + override fun bindViews() { + super.bindViews() + swrLayout.isRefreshing = true + } + + override fun initViews() { + actionFab.setOnClickListener { actionVM.invokeMainAction() } + } + + override fun createWidgets(widgetCreatedCallback: () -> Unit) { + Log.d(this, "createWidgets") + val itemList = mutableListOf() + + val maxDelay = 500 + val timeStart = System.currentTimeMillis() + actionVM.ldItemList.observe(viewLifecycleOwner, Observer { list -> + Log.d(this, "ldBlockList size: ${list.size}") + itemList.addAll(list) + val llContainer = LinearLayout(requireContext()).apply { orientation = LinearLayout.VERTICAL } + postWork { + val builder = WidgetBuilder(PersonalizationItemBuilder()) + itemList.forEach { builder.build(it, llContainer) } + actionVM.attachToPayload(mutableMapOf( + PayloadKey.actionView to this as ActionView, + PayloadKey.itemList to itemList + )) + val timeEnd = System.currentTimeMillis() + val diff = timeEnd - timeStart + postUI(maxDelay - diff) { + TransitionManager.beginDelayedTransition(contentContainer, Fade()) + contentContainer.addView(llContainer) + widgetCreatedCallback() + swrLayout.isRefreshing = false + swrLayout.isEnabled = false + } + } + }) + } + override fun widgetsWasCreated() { super.widgetsWasCreated() - val btnContainer = itemContainer.inflate(R.layout.view_simple_button) + val btnContainer = contentContainer.inflate(R.layout.view_simple_button) val btn = btnContainer.findViewById