11package com.gemwallet.features.assets.views
22
3- import androidx.compose.foundation.ExperimentalFoundationApi
4- import androidx.compose.foundation.clickable
5- import androidx.compose.foundation.layout.Box
6- import androidx.compose.foundation.layout.Row
7- import androidx.compose.foundation.layout.Spacer
83import androidx.compose.foundation.layout.fillMaxHeight
94import androidx.compose.foundation.layout.fillMaxSize
10- import androidx.compose.foundation.layout.fillMaxWidth
11- import androidx.compose.foundation.layout.height
125import androidx.compose.foundation.layout.padding
13- import androidx.compose.foundation.layout.size
146import androidx.compose.foundation.lazy.LazyColumn
15- import androidx.compose.foundation.lazy.LazyListScope
167import androidx.compose.foundation.lazy.LazyListState
17- import androidx.compose.foundation.lazy.items
188import androidx.compose.foundation.lazy.rememberLazyListState
19- import androidx.compose.material.icons.Icons
20- import androidx.compose.material.icons.filled.Tune
21- import androidx.compose.material3.ButtonDefaults
229import androidx.compose.material3.ExperimentalMaterial3Api
2310import androidx.compose.material3.HorizontalDivider
24- import androidx.compose.material3.Icon
2511import androidx.compose.material3.MaterialTheme
2612import androidx.compose.material3.Scaffold
27- import androidx.compose.material3.Text
2813import androidx.compose.material3.pulltorefresh.PullToRefreshBox
2914import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults.Indicator
3015import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
3116import androidx.compose.runtime.Composable
32- import androidx.compose.runtime.MutableState
3317import androidx.compose.runtime.getValue
3418import androidx.compose.runtime.mutableStateOf
3519import androidx.compose.runtime.remember
@@ -38,20 +22,15 @@ import androidx.compose.ui.Modifier
3822import androidx.compose.ui.platform.LocalContext
3923import androidx.compose.ui.platform.LocalUriHandler
4024import androidx.compose.ui.platform.testTag
41- import androidx.compose.ui.res.stringResource
4225import androidx.compose.ui.unit.dp
4326import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
4427import androidx.lifecycle.compose.collectAsStateWithLifecycle
45- import com.gemwallet.android.ext.toIdentifier
46- import com.gemwallet.features.assets.viewmodels.AssetsViewModel
47- import com.gemwallet.features.assets.viewmodels.model.WalletInfoUIState
4828import com.gemwallet.android.features.update_app.presents.InAppUpdateBanner
49- import com.gemwallet.android.ui.R
50- import com.gemwallet.android.ui.components.list_head.AmountListHead
51- import com.gemwallet.android.ui.components.list_head.AssetHeadActions
52- import com.gemwallet.android.ui.components.list_item.AssetItemUIModel
53- import com.gemwallet.android.ui.components.list_item.pinnedAssetsHeader
5429import com.gemwallet.android.ui.open
30+ import com.gemwallet.features.assets.viewmodels.AssetsViewModel
31+ import com.gemwallet.features.assets.views.components.AssetsHead
32+ import com.gemwallet.features.assets.views.components.AssetsListFooter
33+ import com.gemwallet.features.assets.views.components.assets
5534import com.gemwallet.features.banner.views.BannersScene
5635import com.wallet.core.primitives.AssetId
5736import com.wallet.core.primitives.BannerEvent
@@ -104,13 +83,21 @@ fun AssetsScreen(
10483 .testTag(" assets_list" ),
10584 state = listState
10685 ) {
107- assetsHead(walletInfo, onSendClick, onReceiveClick, onBuyClick, viewModel::hideBalances)
86+ item {
87+ AssetsHead (
88+ walletInfo = walletInfo,
89+ onSendClick = onSendClick,
90+ onReceiveClick = onReceiveClick,
91+ onBuyClick = onBuyClick,
92+ onHideBalances = viewModel::hideBalances
93+ )
94+ }
10895 item {
10996 InAppUpdateBanner ()
11097 BannersScene (
11198 asset = null ,
112- onClick = {
113- when (it .event) {
99+ onClick = { banner ->
100+ when (banner .event) {
114101 BannerEvent .AccountBlockedMultiSignature ->
115102 uriHandler.open(context, Config ().getDocsUrl(DocsUrl .TRON_MULTI_SIGNATURE ))
116103 else -> {}
@@ -136,95 +123,8 @@ fun AssetsScreen(
136123 onAssetHide = viewModel::hideAsset,
137124 onTogglePin = viewModel::togglePin,
138125 )
139- assetsListFooter(onShowAssetManage)
140- }
141- }
142- }
143- }
144-
145- private fun LazyListScope.assetsHead (
146- walletInfo : WalletInfoUIState ,
147- onSendClick : () -> Unit ,
148- onReceiveClick : () -> Unit ,
149- onBuyClick : () -> Unit ,
150- onHideBalances : () -> Unit ,
151- ) {
152- item {
153- AmountListHead (
154- amount = walletInfo.totalValue,
155- onHideBalances = onHideBalances,
156- actions = {
157- AssetHeadActions (
158- walletType = walletInfo.type,
159- transferEnabled = true ,
160- operationsEnabled = walletInfo.operationsEnabled,
161- onTransfer = onSendClick,
162- onReceive = onReceiveClick,
163- onBuy = onBuyClick,
164- onSwap = null , // if (swapEnabled) onSwapClick else null
165- )
166- }
167- )
168- }
169- }
170-
171- private fun LazyListScope.assetsListFooter (
172- onShowAssetManage : () -> Unit ,
173- ) {
174- item {
175- Box (
176- modifier = Modifier
177- .clickable(onClick = onShowAssetManage)
178- .fillMaxWidth()
179- ) {
180- Row (
181- modifier = Modifier
182- .align(Alignment .Center )
183- .padding(16 .dp)
184- ) {
185- Icon (
186- imageVector = Icons .Default .Tune ,
187- tint = MaterialTheme .colorScheme.onSurface,
188- contentDescription = " asset_manager" ,
189- )
190- Spacer (modifier = Modifier .size(ButtonDefaults .IconSize ))
191- Text (
192- text = stringResource(id = R .string.wallet_manage_token_list),
193- color = MaterialTheme .colorScheme.onSurface,
194- style = MaterialTheme .typography.titleMedium,
195- )
126+ item { AssetsListFooter (onShowAssetManage) }
196127 }
197128 }
198129 }
199- }
200-
201- @OptIn(ExperimentalFoundationApi ::class )
202- private fun LazyListScope.assets (
203- assets : List <AssetItemUIModel >,
204- longPressState : MutableState <AssetId ?>,
205- isPinned : Boolean = false,
206- onAssetClick : (AssetId ) -> Unit ,
207- onAssetHide : (AssetId ) -> Unit ,
208- onTogglePin : (AssetId ) -> Unit ,
209- ) {
210- if (assets.isEmpty()) return
211-
212- if (isPinned) {
213- pinnedAssetsHeader()
214- }
215-
216- items(items = assets, key = { " ${it.asset.id.toIdentifier()} -$isPinned " }) { item ->
217- AssetItem (
218- modifier = Modifier .testTag(item.asset.id.toIdentifier()),
219- item = item,
220- longPressState = longPressState,
221- isPinned = isPinned,
222- onAssetClick = onAssetClick,
223- onAssetHide = onAssetHide,
224- onTogglePin = onTogglePin,
225- )
226- }
227- if (isPinned) {
228- item { Spacer (modifier = Modifier .height(32 .dp)) }
229- }
230130}
0 commit comments