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