From 60a332149e18eb956cc19322e0db476e9c7babc4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 11 Dec 2020 16:59:23 +0300 Subject: [PATCH 1/3] Updated on 2026-08-14 --- .../tap/common/GlobalLayoutStateHandler.kt | 31 +++++++++++++++++++ .../tangem/tap/common/extensions/ViewGroup.kt | 19 ++++++++++++ .../tap/features/wallet/ui/WalletFragment.kt | 6 ++-- app/src/main/res/layout/layout_address.xml | 5 ++- 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt diff --git a/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt b/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt new file mode 100644 index 0000000000..acbac22f31 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt @@ -0,0 +1,31 @@ +package com.tangem.tap.common + +import android.view.View +import android.view.ViewTreeObserver + +/** +[REDACTED_AUTHOR] + */ +class GlobalLayoutStateHandler( + private val view: T, + attachImmediately: Boolean = true +) : ViewTreeObserver.OnGlobalLayoutListener { + + var onStateChanged: ((T) -> Unit)? = null + + init { + if (attachImmediately) attach() + } + + fun attach() { + view.viewTreeObserver.addOnGlobalLayoutListener(this) + } + + fun detach() { + view.viewTreeObserver.removeOnGlobalLayoutListener(this) + } + + override fun onGlobalLayout() { + onStateChanged?.invoke(view) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt b/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt index 54d98f110d..fb9c20bfdb 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/ViewGroup.kt @@ -3,9 +3,13 @@ package com.tangem.tap.common.extensions import android.view.LayoutInflater import android.view.ViewGroup import android.view.ViewParent +import androidx.core.view.forEach import androidx.transition.AutoTransition import androidx.transition.Transition import androidx.transition.TransitionManager +import com.google.android.material.chip.Chip +import com.google.android.material.chip.ChipGroup +import com.tangem.tap.common.GlobalLayoutStateHandler import timber.log.Timber /** @@ -25,4 +29,19 @@ fun ViewParent?.beginDelayedTransition(transition: Transition = AutoTransition() fun ViewGroup.beginDelayedTransition(transition: Transition = AutoTransition()) { TransitionManager.beginDelayedTransition(this, transition) +} + +fun ChipGroup.fitChipsByGroupWidth() { + val layoutStateHandler = GlobalLayoutStateHandler(this) + layoutStateHandler.onStateChanged = stateHandler@{ + if (it.childCount < 2) { + layoutStateHandler.detach() + return@stateHandler + } + + val spacingBetweenViews = it.chipSpacingHorizontal * (it.childCount - 1) + val width = (it.width - spacingBetweenViews) / it.childCount + it.forEach { chip -> (chip as? Chip)?.width = width } + layoutStateHandler.detach() + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 6e921e5b9b..4addb8b567 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -13,9 +13,7 @@ import com.google.android.material.snackbar.Snackbar import com.squareup.picasso.Picasso import com.tangem.blockchain.blockchains.bitcoin.BitcoinAddressType import com.tangem.blockchain.common.address.AddressType -import com.tangem.tap.common.extensions.beginDelayedTransition -import com.tangem.tap.common.extensions.hide -import com.tangem.tap.common.extensions.show +import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.TwinCardNumber @@ -230,6 +228,8 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber Date: Fri, 11 Dec 2020 16:59:43 +0300 Subject: [PATCH 2/3] Updated on 2026-08-14 --- .../tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt index 087c63af7a..c68dc9f200 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt @@ -169,6 +169,7 @@ class SendStateSubscriber(fragment: BaseStoreFragment) : FragmentStateSubscriber private fun handleFeeState(fg: BaseStoreFragment, state: FeeState) { var delayedTransitionScheduled = false + fg.chipGroup.fitChipsByGroupWidth() fg.view?.findViewById(R.id.clNetworkFee)?.let { it.show(state.mainLayoutIsVisible) { (it.parent as? ViewGroup)?.beginDelayedTransition() From f2697b357ddbaafef63d5f9473f9b273def2ae6a Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 13 Dec 2020 16:06:02 +0300 Subject: [PATCH 3/3] Updated on 2026-08-14 --- .../com/tangem/tap/common/GlobalLayoutStateHandler.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt b/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt index acbac22f31..af4645f141 100644 --- a/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt +++ b/app/src/main/java/com/tangem/tap/common/GlobalLayoutStateHandler.kt @@ -2,6 +2,7 @@ package com.tangem.tap.common import android.view.View import android.view.ViewTreeObserver +import timber.log.Timber /** [REDACTED_AUTHOR] @@ -13,16 +14,25 @@ class GlobalLayoutStateHandler( var onStateChanged: ((T) -> Unit)? = null + private var isAttached: Boolean = false + init { if (attachImmediately) attach() } fun attach() { + if (isAttached) { + Timber.d("Already attached") + return + } + + isAttached = true view.viewTreeObserver.addOnGlobalLayoutListener(this) } fun detach() { view.viewTreeObserver.removeOnGlobalLayoutListener(this) + isAttached = false } override fun onGlobalLayout() {