From 60a332149e18eb956cc19322e0db476e9c7babc4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 11 Dec 2020 16:59:23 +0300 Subject: [PATCH] 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