From 9c1931f7d7ef039049c596a240034525fba0c314 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Jan 2023 20:27:59 +0800 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/tap/common/compose/AutoSizeText.kt | 4 +- .../tap/common/compose/BlockchainSpinner.kt | 4 +- .../com/tangem/tap/common/compose/Button.kt | 159 ------------------ .../compose/ComposableValueDebouncer.kt | 18 +- .../tangem/tap/common/compose/ErrorViews.kt | 14 +- .../tap/common/compose/OutlinedSpinner.kt | 18 +- .../common/compose/OutlinedTextFieldWidget.kt | 94 +++++------ .../tap/common/compose/PinCodeWidget.kt | 6 +- .../com/tangem/tap/common/compose/Warning.kt | 4 +- .../tap/common/compose/extensions/Context.kt | 2 + .../compose/extensions/LazyListState.kt | 10 +- .../ui/appsettings/AppSettingsFragment.kt | 2 +- .../ui/appsettings/AppSettingsScreen.kt | 43 ++--- .../components/EnrollBiometricsCard.kt | 13 +- .../components/SettingsAlertDialog.kt | 8 +- .../ui/cardsettings/CardSettingsFragment.kt | 2 +- .../ui/cardsettings/CardSettingsScreen.kt | 49 ++---- .../ui/common/DetailsComposeElements.kt | 14 +- .../details/ui/common/TangemSwitch.kt | 7 +- .../details/ui/details/DetailsFragment.kt | 4 +- .../details/ui/details/DetailsScreen.kt | 81 ++++----- .../details/ui/resetcard/ResetCardFragment.kt | 2 +- .../details/ui/resetcard/ResetCardScreen.kt | 6 +- .../ui/securitymode/SecurityModeFragment.kt | 2 +- .../ui/securitymode/SecurityModeScreen.kt | 40 ++--- .../ui/walletconnect/WalletConnectFragment.kt | 2 +- .../ui/walletconnect/WalletConnectScreen.kt | 40 ++--- .../tangem/tap/features/home/HomeFragment.kt | 1 + .../features/home/compose/StoriesScreen.kt | 16 +- .../features/home/compose/content/Content.kt | 2 +- .../compose/content/FirstStoriesContent.kt | 11 +- .../compose/content/FloatingCardsContent.kt | 1 + .../home/compose/views/HomeButtons.kt | 16 +- .../home/compose/views/StoriesProgressBar.kt | 6 +- .../ui/SaveWalletBottomSheetFragment.kt | 10 +- .../EnrollBiometricsDialogConent.kt | 7 +- .../ui/components/SaveWalletScreenContent.kt | 36 +--- .../compose/test/ContractAddressTests.kt | 92 +++++----- .../compose/test/TestCasesList.kt | 28 +-- .../features/tokens/ui/AddTokensFragment.kt | 2 +- .../tokens/ui/compose/CurrenciesScreen.kt | 8 +- .../tokens/ui/compose/ListOfCurrencies.kt | 12 +- .../currencyItem/CurrencyExpandedContent.kt | 8 +- .../ui/compose/currencyItem/CurrencyItem.kt | 10 +- .../compose/currencyItem/CurrencyItemArrow.kt | 7 +- .../currencyItem/CurrencyItemHeader.kt | 4 +- .../ui/compose/currencyItem/NetworkItem.kt | 12 +- .../ui/WalletSelectorBottomSheetFragment.kt | 9 +- .../components/RenameWalletDialogContent.kt | 7 +- .../WallectSelectorScreenContent.kt | 32 ++-- .../ui/components/WalletItem.kt | 51 ++---- .../features/welcome/ui/WelcomeFragment.kt | 5 +- .../ui/components/WelcomeScreenContent.kt | 6 +- buildSrc/src/main/java/Dependency.kt | 8 +- buildSrc/src/main/java/Versions.kt | 7 +- .../main/java/detekt-convention.gradle.kts | 4 + config/detekt/detekt.yml | 86 ++++++---- .../com/tangem/core/ui/components/Buttons.kt | 38 ++--- .../core/ui/components/ButtonsDeprecated.kt | 88 +++++----- .../com/tangem/core/ui/components/Cards.kt | 25 +-- .../ui/components/CurrencyPlaceholderIcon.kt | 6 +- .../com/tangem/core/ui/components/Dialogs.kt | 50 +++--- .../core/ui/components/ResizableText.kt | 2 +- .../core/ui/components/SuccessScreen.kt | 17 +- .../tangem/core/ui/components/TextFields.kt | 5 +- .../com/tangem/core/ui/components/Warnings.kt | 17 +- .../appbar/AppBarWithAdditionalButtons.kt | 16 +- .../components/appbar/AppBarWithBackButton.kt | 6 +- .../ui/components/appbar/AppBarWithSearch.kt | 58 +++---- .../fragments/ComposeBottomSheetFragment.kt | 6 +- .../core/ui/fragments/ComposeFragment.kt | 9 +- .../ui/AgreementBottomSheetContent.kt | 4 +- .../feature/referral/ui/AgreementText.kt | 12 +- .../referral/ui/NonParticipateBottomBlock.kt | 14 +- .../referral/ui/ParticipateBottomBlock.kt | 52 +++--- .../feature/referral/ui/ReferralScreen.kt | 36 ++-- .../ui/SwapPermissionBottomSheetContent.kt | 13 +- .../feature/swap/ui/SwapScreenContent.kt | 10 +- .../feature/swap/ui/SwapSelectTokenScreen.kt | 10 +- .../feature/swap/ui/SwapSuccessScreen.kt | 4 +- .../tangem/feature/swap/ui/TransactionCard.kt | 17 +- 81 files changed, 686 insertions(+), 981 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt b/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt index 414473177d..63d98b6269 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt @@ -14,10 +14,10 @@ import androidx.compose.ui.unit.sp @Suppress("MagicNumber") @Composable fun TextAutoSize( - modifier: Modifier = Modifier, text: String, - textStyle: TextStyle = LocalTextStyle.current, fontSizeRange: FontSizeRange, + modifier: Modifier = Modifier, + textStyle: TextStyle = LocalTextStyle.current, ) { val fontSizeValue = remember { mutableStateOf(fontSizeRange.max.value) } val readyToDraw = remember { mutableStateOf(false) } diff --git a/app/src/main/java/com/tangem/tap/common/compose/BlockchainSpinner.kt b/app/src/main/java/com/tangem/tap/common/compose/BlockchainSpinner.kt index 3df228a032..215fb7b312 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/BlockchainSpinner.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/BlockchainSpinner.kt @@ -17,7 +17,7 @@ fun BlockchainSpinner( textFieldConverter: (Blockchain) -> String, dropdownItemView: @Composable ((Blockchain) -> Unit)? = null, closePopupTrigger: ClosePopupTrigger = ClosePopupTrigger(), - onItemSelected: (Blockchain) -> Unit, + onItemSelect: (Blockchain) -> Unit, ) { OutlinedSpinner( modifier = Modifier.fillMaxWidth(), @@ -27,7 +27,7 @@ fun BlockchainSpinner( textFieldConverter = textFieldConverter, dropdownItemView = dropdownItemView, isEnabled = isEnabled, - onItemSelected = onItemSelected, + onItemSelected = onItemSelect, closePopupTrigger = closePopupTrigger, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/Button.kt b/app/src/main/java/com/tangem/tap/common/compose/Button.kt index 38ee83d9b1..c536af17bd 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/Button.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/Button.kt @@ -1,137 +1,8 @@ package com.tangem.tap.common.compose -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.material.Button -import androidx.compose.material.ButtonDefaults -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.Scaffold -import androidx.compose.material.Text import androidx.compose.material.ripple.LocalRippleTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.colorResource -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.tangem.core.ui.components.SpacerH8 -import com.tangem.tap.common.compose.extensions.stringResourceDefault -import com.tangem.wallet.R - -/** -[REDACTED_AUTHOR] - */ -@Composable -fun RectangleButton( - modifier: Modifier = Modifier, - text: String = "", - textId: Int? = null, - isEnabled: Boolean = true, - contentPadding: PaddingValues = ButtonDefaults.ContentPadding, - leadingView: @Composable RowScope.() -> Unit = {}, - middleView: @Composable RowScope.() -> Unit = { TextInButton(text = text, textId = textId) }, - trailingView: @Composable RowScope.() -> Unit = {}, - onClick: () -> Unit, -) { - Button( - modifier = modifier, - contentPadding = contentPadding, - enabled = isEnabled, - onClick = onClick, - ) { - leadingView() - middleView() - trailingView() - } -} - -@Composable -private fun TextInButton( - modifier: Modifier = Modifier, - text: String = "", - textId: Int? = null, -) { - Text( - modifier = modifier, - text = stringResourceDefault(textId, text), - maxLines = 1, - style = TextStyle( - fontSize = 16.sp, - lineHeight = 20.sp, - fontWeight = FontWeight.Medium, - ) - ) -} - -@Composable -fun PasteButton( - modifier: Modifier = Modifier, - enabled: Boolean = true, - dpSize: DpSize = DpSize(40.dp, 40.dp), - onClick: () -> Unit, - tint: Color? = null, - content: @Composable (() -> Unit)? = null -) { - IconButton( - modifier = modifier.size(dpSize), - enabled = enabled, - onClick = onClick, - ) { - when (content) { - null -> { - val tintColor = tint - ?: colorResource(id = if (enabled) R.color.button_positive else R.color.button_positive_disabled) - Icon( - painterResource(id = R.drawable.ic_paste), - contentDescription = "Paste", - tint = tintColor, - ) - } - else -> content() - } - } -} - -@Composable -fun ClearButton( - modifier: Modifier = Modifier, - enabled: Boolean = true, - dpSize: DpSize = DpSize(40.dp, 40.dp), - onClick: () -> Unit, - tint: Color? = null, - content: @Composable (() -> Unit)? = null -) { - IconButton( - modifier = modifier.size(dpSize), - enabled = enabled, - onClick = onClick, - ) { - when (content) { - null -> { - val tintColor = tint - ?: colorResource(id = if (enabled) R.color.button_positive else R.color.button_positive_disabled) - Icon( - painterResource(id = R.drawable.ic_clear), - contentDescription = "Clear", - tint = tintColor, - ) - } - else -> content() - } - } -} /** * Used for disable ripple if button is enable = false @@ -143,34 +14,4 @@ fun ToggledRippleTheme( ) { val theme = LocalRippleTheme provides if (isEnabled) LocalRippleTheme.current else NoRippleTheme() CompositionLocalProvider(theme) { content() } -} - -@Preview -@Composable -fun ButtonTest() { - Scaffold { - Column(modifier = Modifier.padding(16.dp)) { - PreviewItem("Button") { - RectangleButton(text = "Some button") {} - } - PreviewItem("PasteButton") { - PasteButton(onClick = {}) - } - } - } -} - -@Composable -fun PreviewItem( - name: String, - content: @Composable RowScope.() -> Unit, -) { - Row(verticalAlignment = Alignment.CenterVertically) { - Text( - modifier = Modifier.weight(1f), - text = name, - ) - content() - } - SpacerH8() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/ComposableValueDebouncer.kt b/app/src/main/java/com/tangem/tap/common/compose/ComposableValueDebouncer.kt index b3251f3cac..44395f9279 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/ComposableValueDebouncer.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/ComposableValueDebouncer.kt @@ -11,19 +11,19 @@ import com.tangem.domain.common.util.ValueDebouncer @Composable fun valueDebouncerAsState( initialValue: T, + onValueChange: (T) -> Unit, debounce: Long = 600, - onEmitValueReceived: (T) -> Unit = {}, - onValueChanged: (T) -> Unit, + onEmitValueReceive: (T) -> Unit = {}, ): ValueDebouncer { return remember { - ValueDebouncer( + ValueDebouncer( initialValue = initialValue, debounceDuration = debounce, onEmitValueReceived = { emitValue -> - emitValue?.let { onEmitValueReceived(it) } + emitValue?.let { onEmitValueReceive(it) } }, onValueChanged = { changedValue -> - changedValue?.let { onValueChanged(it) } + changedValue?.let { onValueChange(it) } }, ) } @@ -32,16 +32,16 @@ fun valueDebouncerAsState( @Composable fun valueDebouncerNullableAsState( initialValue: T?, + onValueChange: (T?) -> Unit, debounce: Long = 400, - onEmitValueReceived: (T?) -> Unit = {}, - onValueChanged: (T?) -> Unit, + onEmitValueReceive: (T?) -> Unit = {}, ): ValueDebouncer { return remember { ValueDebouncer( initialValue = initialValue, debounceDuration = debounce, - onEmitValueReceived = onEmitValueReceived, - onValueChanged = onValueChanged, + onEmitValueReceived = onEmitValueReceive, + onValueChanged = onValueChange, ) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/ErrorViews.kt b/app/src/main/java/com/tangem/tap/common/compose/ErrorViews.kt index 49b6625474..c8d0701b2e 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/ErrorViews.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/ErrorViews.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.material.LocalTextStyle import androidx.compose.material.MaterialTheme -import androidx.compose.material.Scaffold import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -19,23 +18,20 @@ import androidx.compose.ui.unit.dp fun ErrorView( text: String, modifier: Modifier = Modifier, - style: TextStyle = LocalTextStyle.current + style: TextStyle = LocalTextStyle.current, ) { Text( text, color = MaterialTheme.colors.error, modifier = modifier, - style = style + style = style, ) } @Preview @Composable -fun ErrorViewTest() { - Scaffold( - ) { - Box(Modifier.padding(16.dp)) { - ErrorView(text = "Some error description") - } +private fun ErrorViewTest() { + Box(Modifier.padding(16.dp)) { + ErrorView(text = "Some error description") } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/OutlinedSpinner.kt b/app/src/main/java/com/tangem/tap/common/compose/OutlinedSpinner.kt index a4d9cc898b..981e5e00e6 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/OutlinedSpinner.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/OutlinedSpinner.kt @@ -21,11 +21,11 @@ import com.tangem.tap.common.extensions.ValueCallback @OptIn(ExperimentalMaterialApi::class) @Composable fun OutlinedSpinner( - modifier: Modifier = Modifier, label: String, itemList: List, selectedItem: Field.Data, onItemSelected: ValueCallback, + modifier: Modifier = Modifier, textFieldConverter: (T) -> String = { it.toString() }, dropdownItemView: @Composable ((T) -> Unit)? = null, isEnabled: Boolean = true, @@ -96,13 +96,11 @@ class ClosePopupTrigger { @Preview @Composable -fun TestSpinnerPreview() { - Scaffold { - OutlinedSpinner( - label = "Blockchain name", - itemList = listOf(Blockchain.values()), - selectedItem = Field.Data(Blockchain.Avalanche, false), - onItemSelected = {}, - ) - } +private fun TestSpinnerPreview() { + OutlinedSpinner( + label = "Blockchain name", + itemList = listOf(Blockchain.values()), + selectedItem = Field.Data(Blockchain.Avalanche, false), + onItemSelected = {}, + ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/OutlinedTextFieldWidget.kt b/app/src/main/java/com/tangem/tap/common/compose/OutlinedTextFieldWidget.kt index 18ec176d52..015c459828 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/OutlinedTextFieldWidget.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/OutlinedTextFieldWidget.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.LinearProgressIndicator import androidx.compose.material.OutlinedTextField -import androidx.compose.material.Scaffold import androidx.compose.material.Text import androidx.compose.material.TextFieldColors import androidx.compose.runtime.Composable @@ -41,7 +40,6 @@ import com.tangem.tap.domain.moduleMessage.ModuleMessageConverter */ @Composable fun OutlinedTextFieldWidget( - modifier: Modifier = Modifier, fieldData: Field.Data, labelId: Int? = null, label: String = "", @@ -56,15 +54,12 @@ fun OutlinedTextFieldWidget( debounceTextChanges: Long = 400, visualTransformation: VisualTransformation = VisualTransformation.None, keyboardOptions: KeyboardOptions = KeyboardOptions.Default, - onTextChanged: (String) -> Unit, + onTextChange: (String) -> Unit, ) { if (!isVisible) return - Column( - modifier = modifier.animateContentSize(), - ) { + Column(modifier = Modifier.animateContentSize()) { OutlinedProgressTextField( - modifier = modifier, fieldData = fieldData, label = stringResourceDefault(labelId, label), placeholder = stringResourceDefault(placeholderId, placeholder), @@ -75,16 +70,15 @@ fun OutlinedTextFieldWidget( debounce = debounceTextChanges, visualTransformation = visualTransformation, keyboardOptions = keyboardOptions, - onTextChanged = onTextChanged, + onTextChange = onTextChange, ) - errorConverter?.let { AnimatedErrorView(error, it) } + errorConverter?.let { AnimatedErrorView(errorConverter = it, error = error) } } } @Suppress("LongMethod", "NestedBlockDepth", "MagicNumber", "MaxLineLength") @Composable private fun OutlinedProgressTextField( - modifier: Modifier = Modifier, fieldData: Field.Data, label: String = "", placeholder: String = "", @@ -97,7 +91,7 @@ private fun OutlinedProgressTextField( colors: TextFieldColors = TangemTextFieldsDefault.defaultTextFieldColors, interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, trailingIcon: @Composable (() -> Unit)? = null, - onTextChanged: (String) -> Unit, + onTextChange: (String) -> Unit, ) { val logger = remember { CompositionLogger(label, "OutlinedProgressTextField", listOf("Символ токена")) @@ -108,14 +102,14 @@ private fun OutlinedProgressTextField( val textDebouncer = valueDebouncerAsState( initialValue = fieldData.value, debounce = debounce, - onEmitValueReceived = { + onEmitValueReceive = { logger.log("DEBOUNCER: onEmitValueReceived: [$it]") logger.log("DEBOUNCER: start RECOMPOSE by new value for textValueState.value = [$it]") textValueState.value = it }, - onValueChanged = { + onValueChange = { logger.log("DEBOUNCER: onValueChanged: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> dispatch.toStore([$it])") - onTextChanged(it) + onTextChange(it) }, ) @@ -194,7 +188,7 @@ private fun OutlinedProgressTextField( interactionSource = interactionSource, ) AnimatedVisibility( - modifier = modifier + modifier = Modifier .fillMaxWidth() .align(Alignment.BottomCenter) .padding(start = 6.dp, top = 0.dp, end = 6.dp, bottom = 6.dp), @@ -209,8 +203,8 @@ private fun OutlinedProgressTextField( @Composable private fun AnimatedErrorView( - error: ModuleError? = null, errorConverter: ModuleMessageConverter, + error: ModuleError? = null, ) { AnimatedVisibility( visible = error != null, @@ -228,7 +222,7 @@ private fun AnimatedErrorView( @Preview @Composable -fun OutlinedTextFieldWithErrorTest() { +private fun OutlinedTextFieldWithErrorTest() { val context = LocalContext.current val converter = remember { ModuleMessageConverter(context) } @@ -241,41 +235,35 @@ fun OutlinedTextFieldWithErrorTest() { val modifier = Modifier .fillMaxWidth() .padding(16.dp) - Scaffold { - Column { - OutlinedTextFieldWidget( - modifier = modifier, - fieldData = Field.Data("", false), - label = "First label", - placeholder = "1 placeholder", - error = null, - errorConverter = converter, - ) {} - OutlinedTextFieldWidget( - modifier = modifier, - fieldData = Field.Data("First", false), - label = "First label", - placeholder = "1 placeholder", - error = null, - errorConverter = converter, - ) {} - OutlinedTextFieldWidget( - modifier = modifier, - fieldData = Field.Data("First", false), - label = "First label", - placeholder = "1 placeholder", - isLoading = true, - error = null, - errorConverter = converter, - ) {} - OutlinedTextFieldWidget( - modifier = modifier, - fieldData = Field.Data("First", false), - label = "First label", - placeholder = "1 placeholder", - error = SimpleError(), - errorConverter = converter, - ) {} - } + Column { + OutlinedTextFieldWidget( + fieldData = Field.Data("", false), + label = "First label", + placeholder = "1 placeholder", + error = null, + errorConverter = converter, + ) {} + OutlinedTextFieldWidget( + fieldData = Field.Data("First", false), + label = "First label", + placeholder = "1 placeholder", + error = null, + errorConverter = converter, + ) {} + OutlinedTextFieldWidget( + fieldData = Field.Data("First", false), + label = "First label", + placeholder = "1 placeholder", + isLoading = true, + error = null, + errorConverter = converter, + ) {} + OutlinedTextFieldWidget( + fieldData = Field.Data("First", false), + label = "First label", + placeholder = "1 placeholder", + error = SimpleError(), + errorConverter = converter, + ) {} } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/PinCodeWidget.kt b/app/src/main/java/com/tangem/tap/common/compose/PinCodeWidget.kt index f7dad88a0d..f742bb5731 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/PinCodeWidget.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/PinCodeWidget.kt @@ -50,7 +50,7 @@ import androidx.core.text.isDigitsOnly @Composable fun PinCodeWidget( config: PinViewConfig = tangemPinConfig, - onPinChanged: (String, Boolean) -> Unit = { pin, isLastSymbolEntered -> }, + onPinChange: (String, Boolean) -> Unit = { pin, isLastSymbolEntered -> }, ) { val focusRequester = remember { FocusRequester() } val keyboardController = LocalSoftwareKeyboardController.current @@ -65,7 +65,7 @@ fun PinCodeWidget( if (value.text.length <= config.pinsCount) { rTextFieldValue.value = value - onPinChanged(value.text, isLastSymbolEntered()) + onPinChange(value.text, isLastSymbolEntered()) } } @@ -161,7 +161,7 @@ private val tangemPinConfig = PinViewConfig( @Preview @Composable -fun PinCodeWidgetPreview() { +private fun PinCodeWidgetPreview() { Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { PinCodeWidget(tangemPinConfig) } diff --git a/app/src/main/java/com/tangem/tap/common/compose/Warning.kt b/app/src/main/java/com/tangem/tap/common/compose/Warning.kt index 0d19a8e2ea..9614a6819c 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/Warning.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/Warning.kt @@ -22,9 +22,9 @@ import com.tangem.wallet.R */ @Composable fun AddCustomTokenWarning( - modifier: Modifier = Modifier, warning: ModuleMessage, - converter: ModuleMessageConverter + converter: ModuleMessageConverter, + modifier: Modifier = Modifier, ) { Surface( modifier = modifier, diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/Context.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/Context.kt index 25ae94623c..719c80d0d4 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/Context.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/Context.kt @@ -8,11 +8,13 @@ import com.tangem.tap.common.extensions.getFromClipboard /** [REDACTED_AUTHOR] */ +@Suppress("ComposableFunctionName") @Composable fun copyToClipboard(value: Any, label: String = "") { LocalContext.current.copyToClipboard(value, label) } +@Suppress("ComposableFunctionName") @Composable fun getFromClipboard(default: CharSequence? = null): CharSequence? { return LocalContext.current.getFromClipboard(default) diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt index f05044368f..dab9b8f654 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/LazyListState.kt @@ -1,12 +1,16 @@ package com.tangem.tap.common.compose.extensions import androidx.compose.foundation.lazy.LazyListState -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalView import com.tangem.tap.common.extensions.hideKeyboard @Composable -fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) { +fun LazyListState.OnBottomReached(loadMoreThreshold: Int, onLoadMore: () -> Unit) { require(loadMoreThreshold >= 0) val shouldLoadMore by remember { derivedStateOf { @@ -17,7 +21,7 @@ fun LazyListState.OnBottomReached(loadMoreThreshold: Int, loadMore: () -> Unit) } LaunchedEffect(shouldLoadMore) { - if (shouldLoadMore) loadMore() + if (shouldLoadMore) onLoadMore() } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt index 25a6cd0902..3302facf0b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsFragment.kt @@ -41,7 +41,7 @@ class AppSettingsFragment : Fragment(), StoreSubscriber { TangemTheme { AppSettingsScreen( state = screenState.value, - onBackPressed = { + onBackClick = { store.dispatch(DetailsAction.ResetCardSettingsData) store.dispatch(NavigationAction.PopBackTo()) }, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreen.kt index ad15a780b8..4f4e28e4bf 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/AppSettingsScreen.kt @@ -31,25 +31,16 @@ import com.tangem.tap.features.details.ui.common.TangemSwitch import com.tangem.wallet.R @Composable -fun AppSettingsScreen( - state: AppSettingsScreenState, - onBackPressed: () -> Unit, - modifier: Modifier = Modifier, -) { +fun AppSettingsScreen(state: AppSettingsScreenState, onBackClick: () -> Unit) { SettingsScreensScaffold( - content = { - AppSettings(state = state, modifier = modifier) - }, + content = { AppSettings(state = state) }, titleRes = R.string.app_settings_title, - onBackClick = onBackPressed, + onBackClick = onBackClick, ) } @Composable -private fun AppSettings( - state: AppSettingsScreenState, - modifier: Modifier = Modifier, -) { +private fun AppSettings(state: AppSettingsScreenState) { var dialogType by remember { mutableStateOf(null) } val onDialogStateChange: (PrivacySetting?) -> Unit = { dialogType = it } @@ -57,21 +48,13 @@ private fun AppSettings( SettingsAlertDialog( element = it, onDialogStateChange = onDialogStateChange, - onSettingToggled = state.onSettingToggled, + onSettingToggle = { state.onSettingToggled(it, false) }, ) } - Column( - modifier = modifier - .fillMaxSize(), - ) { + Column(modifier = Modifier.fillMaxSize()) { if (state.showEnrollBiometricsCard) { - EnrollBiometricsCard( - modifier = Modifier - .padding(horizontal = TangemTheme.dimens.spacing8) - .fillMaxWidth(), - onClick = state.onEnrollBiometrics, - ) + EnrollBiometricsCard(onClick = state.onEnrollBiometrics) SpacerH24() } @@ -92,7 +75,6 @@ private fun AppSettings( @Suppress("LongMethod") @Composable private fun AppSettingsElement( - modifier: Modifier = Modifier, state: AppSettingsScreenState, setting: PrivacySetting, onDialogStateChange: (PrivacySetting?) -> Unit, @@ -123,7 +105,7 @@ private fun AppSettingsElement( ) Row( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(horizontal = TangemTheme.dimens.spacing20), verticalAlignment = Alignment.CenterVertically, @@ -195,7 +177,7 @@ private fun AppSettingsScreenSample( onSettingToggled = { _, _ -> }, onEnrollBiometrics = {}, ), - onBackPressed = { }, + onBackClick = { }, ) } } @@ -220,10 +202,7 @@ private fun AppSettingsScreenPreview_Dark() { private fun AppSettingsScreen_EnrollBiometrics_Sample( modifier: Modifier = Modifier, ) { - Column( - modifier = modifier - .background(TangemTheme.colors.background.primary), - ) { + Column(modifier = modifier.background(TangemTheme.colors.background.primary)) { AppSettingsScreen( state = AppSettingsScreenState( settings = mapOf( @@ -235,7 +214,7 @@ private fun AppSettingsScreen_EnrollBiometrics_Sample( onSettingToggled = { _, _ -> }, onEnrollBiometrics = {}, ), - onBackPressed = { }, + onBackClick = { }, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/EnrollBiometricsCard.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/EnrollBiometricsCard.kt index fddc2b0e7b..b541b88894 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/EnrollBiometricsCard.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/EnrollBiometricsCard.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.Icon @@ -23,12 +24,11 @@ import com.tangem.wallet.R @OptIn(ExperimentalMaterialApi::class) @Composable -internal fun EnrollBiometricsCard( - modifier: Modifier = Modifier, - onClick: () -> Unit, -) { +internal fun EnrollBiometricsCard(onClick: () -> Unit) { Surface( - modifier = modifier, + modifier = Modifier + .padding(horizontal = TangemTheme.dimens.spacing8) + .fillMaxWidth(), color = TangemTheme.colors.background.primary, shape = TangemTheme.shapes.roundedCornersLarge, onClick = onClick, @@ -67,8 +67,7 @@ private fun EnrollBiometricsCardSample( modifier: Modifier = Modifier, ) { Column( - modifier = modifier - .background(TangemTheme.colors.background.secondary), + modifier = modifier.background(TangemTheme.colors.background.secondary), ) { EnrollBiometricsCard(onClick = {}) } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsAlertDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsAlertDialog.kt index 65514a2f86..987b6516f8 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsAlertDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/appsettings/components/SettingsAlertDialog.kt @@ -19,8 +19,7 @@ import com.tangem.wallet.R internal fun SettingsAlertDialog( element: PrivacySetting, onDialogStateChange: (PrivacySetting?) -> Unit, - onSettingToggled: (PrivacySetting, Boolean) -> Unit, - modifier: Modifier = Modifier, + onSettingToggle: () -> Unit ) { val text = when (element) { PrivacySetting.SaveWallets -> R.string.app_settings_off_saved_wallet_alert_message @@ -43,7 +42,7 @@ internal fun SettingsAlertDialog( text = stringResource(id = R.string.common_delete), onClick = { onDialogStateChange(null) - onSettingToggled(element, false) + onSettingToggle() }, ) }, @@ -62,7 +61,6 @@ internal fun SettingsAlertDialog( ) }, shape = TangemTheme.shapes.roundedCornersLarge, - modifier = modifier, ) } @@ -78,7 +76,7 @@ private fun SettingsAlertDialogSample( SettingsAlertDialog( element = PrivacySetting.SaveAccessCode, onDialogStateChange = {}, - onSettingToggled = { _, _ -> }, + onSettingToggle = { }, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt index a42f4a1d38..15a943d590 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsFragment.kt @@ -42,7 +42,7 @@ class CardSettingsFragment : Fragment(), StoreSubscriber { TangemTheme { CardSettingsScreen( state = screenState.value, - onBackPressed = { + onBackClick = { store.dispatch(DetailsAction.ResetCardSettingsData) store.dispatch(NavigationAction.PopBackTo()) }, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt index 7a0092384a..be54f4a52f 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt @@ -30,44 +30,36 @@ import com.tangem.tap.features.details.ui.common.SettingsScreensScaffold import com.tangem.wallet.R @Composable -fun CardSettingsScreen( - state: CardSettingsScreenState, - onBackPressed: () -> Unit, - modifier: Modifier = Modifier, -) { +fun CardSettingsScreen(state: CardSettingsScreenState, onBackClick: () -> Unit) { val needReadCard = state.cardDetails == null SettingsScreensScaffold( content = { if (needReadCard) { - CardSettingsReadCard(state.onScanCardClick, modifier = modifier) + CardSettingsReadCard(state.onScanCardClick) } else { - CardSettings(state = state, modifier = modifier) + CardSettings(state = state) } }, titleRes = R.string.card_settings_title, backgroundColor = TangemTheme.colors.background.secondary, - onBackClick = onBackPressed, + onBackClick = onBackClick, ) } @Suppress("MagicNumber") @Composable -fun CardSettingsReadCard( - onScanCardClick: () -> Unit, - modifier: Modifier = Modifier, -) { +fun CardSettingsReadCard(onScanCardClick: () -> Unit) { Column( - modifier = modifier - .fillMaxSize(), + modifier = Modifier.fillMaxSize(), ) { Box( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(bottom = 40.dp), ) { Image( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(start = 80.dp, end = 80.dp, top = 70.dp) .rotate(-15f), @@ -76,7 +68,7 @@ fun CardSettingsReadCard( contentScale = ContentScale.FillWidth, ) Image( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(start = 60.dp, end = 60.dp) .rotate(-1f), @@ -87,7 +79,7 @@ fun CardSettingsReadCard( } Spacer(modifier = Modifier.weight(1f)) Column( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, bottom = 32.dp), ) { @@ -96,20 +88,19 @@ fun CardSettingsReadCard( color = colorResource(id = R.color.text_primary_1), style = TangemTypography.headline3, ) - Spacer(modifier = modifier.size(20.dp)) + Spacer(modifier = Modifier.size(20.dp)) Text( text = stringResource(id = R.string.scan_card_settings_message), color = colorResource(id = R.color.text_secondary), style = TangemTypography.body1, - modifier = modifier + modifier = Modifier .verticalScroll(rememberScrollState()) .weight(weight = 1f, fill = false), ) - Spacer(modifier = modifier.size(29.dp)) + Spacer(modifier = Modifier.size(29.dp)) DetailsMainButton( title = stringResource(id = R.string.scan_card_settings_button), onClick = onScanCardClick, - modifier = modifier, ) } } @@ -117,15 +108,11 @@ fun CardSettingsReadCard( @Suppress("ComplexMethod") @Composable -fun CardSettings( - state: CardSettingsScreenState, - modifier: Modifier = Modifier, -) { +fun CardSettings(state: CardSettingsScreenState) { if (state.cardDetails == null) return LazyColumn( - modifier = modifier - .fillMaxWidth(), + modifier = Modifier.fillMaxWidth(), ) { items(state.cardDetails) { val paddingBottom = when (it) { @@ -144,7 +131,7 @@ fun CardSettings( is CardInfo.ResetToFactorySettings -> 16.dp } Column( - modifier = modifier + modifier = Modifier .fillMaxWidth() .clickable( enabled = it.clickable, @@ -167,7 +154,7 @@ fun CardSettings( color = titleColor, style = TangemTheme.typography.subtitle1, ) - Spacer(modifier = modifier.size(4.dp)) + Spacer(modifier = Modifier.size(4.dp)) Text( text = it.subtitle.resolveReference(), color = subtitleColor, @@ -180,6 +167,6 @@ fun CardSettings( @Composable @Preview -fun CardSettingsPreview() { +private fun CardSettingsPreview() { CardSettingsScreen(state = CardSettingsScreenState(onScanCardClick = {}) {}, {}) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt b/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt index e6f431cfc4..df3b29d16e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt @@ -6,7 +6,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBarsPadding @@ -90,12 +90,10 @@ fun ScreenTitle( @Composable fun EmptyTopBarWithNavigation( - modifier: Modifier = Modifier, onBackClick: () -> Unit, backgroundColor: Color = TangemTheme.colors.background.primary, ) { TopAppBar( - modifier = modifier, title = { }, navigationIcon = { @@ -114,16 +112,16 @@ fun EmptyTopBarWithNavigation( @Composable fun DetailsMainButton( - modifier: Modifier = Modifier, title: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, enabled: Boolean = true, - onClick: (() -> Unit), ) { Button( onClick = onClick, modifier = modifier .fillMaxWidth() - .height(48.dp), + .heightIn(48.dp), shape = RoundedCornerShape(12.dp), enabled = enabled, colors = ButtonDefaults.buttonColors( @@ -134,7 +132,9 @@ fun DetailsMainButton( ), ) { Text(text = title) - Spacer(modifier = modifier.size(8.dp)) + Spacer(modifier = Modifier + .padding(start = 20.dp, end = 20.dp) + .size(8.dp)) Icon(painter = painterResource(id = R.drawable.ic_tangem_24), contentDescription = "") } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/common/TangemSwitch.kt b/app/src/main/java/com/tangem/tap/features/details/ui/common/TangemSwitch.kt index ce5be61078..f449134042 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/common/TangemSwitch.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/common/TangemSwitch.kt @@ -33,13 +33,12 @@ import com.tangem.wallet.R @Suppress("MagicNumber") @Composable fun TangemSwitch( - modifier: Modifier = Modifier, + onCheckedChange: (Boolean) -> Unit, checkedColor: Color = colorResource(id = R.color.control_checked), uncheckedColor: Color = colorResource(id = R.color.icon_informative), size: Dp = 48.dp, checked: Boolean = false, enabled: Boolean = true, - onCheckedChange: (Boolean) -> Unit, ) { val transition = updateTransition(checked, label = "SwitchState") val color by transition.animateColor( @@ -53,7 +52,7 @@ fun TangemSwitch( val interactionSource = remember { MutableInteractionSource() } Box( - modifier = modifier + modifier = Modifier .clickable( interactionSource = interactionSource, indication = null, @@ -70,7 +69,7 @@ fun TangemSwitch( ), ) { BoxWithConstraints( - modifier = modifier + modifier = Modifier .width(size) .height(size / 2) .indication(interactionSource, null) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt index 56023ab1f8..c89c19485a 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt @@ -9,8 +9,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.Fragment import androidx.transition.TransitionInflater -import com.tangem.core.ui.res.TangemTheme import com.tangem.core.analytics.Analytics +import com.tangem.core.ui.res.TangemTheme import com.tangem.tap.common.analytics.events.Settings import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.details.redux.DetailsState @@ -43,7 +43,7 @@ class DetailsFragment : Fragment(), StoreSubscriber { TangemTheme { DetailsScreen( state = detailsScreenState.value, - onBackPressed = { store.dispatch(NavigationAction.PopBackTo()) }, + onBackClick = { store.dispatch(NavigationAction.PopBackTo()) }, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt index 1346fa4f24..5a9c1e203a 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt @@ -33,66 +33,52 @@ import com.tangem.tap.features.details.ui.common.SettingsScreensScaffold import com.tangem.wallet.R @Composable -fun DetailsScreen( - state: DetailsScreenState, - onBackPressed: () -> Unit, - modifier: Modifier = Modifier, -) { +fun DetailsScreen(state: DetailsScreenState, onBackClick: () -> Unit) { SystemBarsEffect { setSystemBarsColor(color = TangemColorPalette.Light1) } SettingsScreensScaffold( - content = { Content(state = state, modifier = modifier) }, - onBackClick = onBackPressed, + content = { Content(state = state) }, + onBackClick = onBackClick, ) } @Composable -fun Content( - state: DetailsScreenState, - modifier: Modifier = Modifier, -) { +fun Content(state: DetailsScreenState) { Column( - modifier = modifier + modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()), ) { - ScreenTitle(titleRes = R.string.details_title, modifier.padding(bottom = 52.dp)) - state.elements.map { - if (it == SettingsElement.WalletConnect) { - WalletConnectDetailsItem( - onItemsClick = state.onItemsClick, - modifier = modifier, - ) + ScreenTitle(titleRes = R.string.details_title, Modifier.padding(bottom = 52.dp)) + state.elements.map { element -> + if (element == SettingsElement.WalletConnect) { + WalletConnectDetailsItem(onItemsClick = state.onItemsClick) } else { DetailsItem( - item = it, + item = element, appCurrency = state.appCurrency, - onItemsClick = state.onItemsClick, - modifier = modifier, + onItemsClick = { state.onItemsClick(element) }, ) } } - Spacer(modifier = modifier.weight(1f)) + Spacer(modifier = Modifier.weight(1f)) TangemSocialAccounts(state.tangemLinks, state.onSocialNetworkClick) Spacer(modifier = Modifier.size(12.dp)) Text( text = "${stringResource(id = state.appNameRes)} ${state.tangemVersion}", style = TangemTypography.caption, color = colorResource(id = R.color.text_tertiary), - modifier = modifier.padding(start = 16.dp, end = 16.dp, bottom = 40.dp), + modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 40.dp), ) } } @Composable -fun WalletConnectDetailsItem( - onItemsClick: (SettingsElement) -> Unit, - modifier: Modifier = Modifier, -) { +fun WalletConnectDetailsItem(onItemsClick: (SettingsElement) -> Unit) { Row( - modifier = modifier + modifier = Modifier .defaultMinSize(minHeight = 84.dp) .fillMaxWidth() .clickable { onItemsClick(SettingsElement.WalletConnect) }, @@ -102,23 +88,23 @@ fun WalletConnectDetailsItem( Icon( painter = painterResource(id = R.drawable.ic_walletconnect), contentDescription = stringResource(id = R.string.wallet_connect_title), - modifier = modifier.padding(start = 20.dp, end = 20.dp), + modifier = Modifier.padding(start = 20.dp, end = 20.dp), tint = colorResource(id = R.color.all_colors_azure), ) Column( - modifier = modifier.defaultMinSize(minHeight = 56.dp), + modifier = Modifier.defaultMinSize(minHeight = 56.dp), horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.Center, ) { Text( text = stringResource(id = R.string.wallet_connect_title), - modifier = modifier.padding(end = 20.dp, bottom = 4.dp), + modifier = Modifier.padding(end = 20.dp, bottom = 4.dp), style = TangemTypography.headline3, color = colorResource(id = R.color.text_primary_1), ) Text( text = stringResource(id = R.string.wallet_connect_subtitle), - modifier = modifier.padding(end = 20.dp, bottom = 4.dp), + modifier = Modifier.padding(end = 20.dp, bottom = 4.dp), style = TangemTypography.body1, color = colorResource(id = R.color.text_secondary), ) @@ -127,37 +113,31 @@ fun WalletConnectDetailsItem( } @Composable -fun DetailsItem( - item: SettingsElement, - appCurrency: String, - onItemsClick: (SettingsElement) -> Unit, - modifier: Modifier = Modifier, -) { +fun DetailsItem(item: SettingsElement, appCurrency: String, onItemsClick: () -> Unit) { Row( - modifier = modifier + modifier = Modifier .height(56.dp) .fillMaxWidth() - .clickable { onItemsClick(item) }, + .clickable(onClick = onItemsClick), horizontalArrangement = Arrangement.Start, verticalAlignment = Alignment.CenterVertically, ) { Icon( painter = painterResource(id = item.iconRes), contentDescription = stringResource(id = item.titleRes), - modifier = modifier.padding(start = 20.dp, end = 20.dp), + modifier = Modifier.padding(start = 20.dp, end = 20.dp), tint = colorResource(id = R.color.icon_secondary), ) - Column(modifier = modifier.padding(end = 20.dp)) { + Column(modifier = Modifier.padding(end = 20.dp)) { Text( text = stringResource(id = item.titleRes), - modifier = modifier, + modifier = Modifier, style = TangemTypography.subtitle1, color = colorResource(id = R.color.text_primary_1), ) if (item == SettingsElement.AppCurrency) { Text( text = appCurrency, - modifier = modifier, style = TangemTypography.body2, color = colorResource(id = R.color.text_secondary), ) @@ -170,16 +150,13 @@ fun DetailsItem( fun TangemSocialAccounts( links: List, onSocialNetworkClick: (SocialNetworkLink) -> Unit, - modifier: Modifier = Modifier, ) { - LazyRow( - modifier = modifier.padding(start = 8.dp, end = 8.dp), - ) { + LazyRow(modifier = Modifier.padding(start = 8.dp, end = 8.dp)) { items(links) { Icon( painter = painterResource(id = it.network.iconRes), contentDescription = "", - modifier = modifier + modifier = Modifier .padding(8.dp) .clickable { onSocialNetworkClick(it) }, tint = colorResource(id = R.color.icon_informative), @@ -190,7 +167,7 @@ fun TangemSocialAccounts( @Composable @Preview -fun Preview() { +private fun Preview() { DetailsScreen( state = DetailsScreenState( elements = SettingsElement.values().toList(), @@ -199,6 +176,6 @@ fun Preview() { appCurrency = "Dollar", onItemsClick = {}, onSocialNetworkClick = {}, ), - onBackPressed = {}, + onBackClick = {}, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt index 10270c8ecb..8ea18c0604 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt @@ -41,7 +41,7 @@ class ResetCardFragment : Fragment(), StoreSubscriber { TangemTheme { ResetCardScreen( state = screenState.value, - onBackPressed = { store.dispatch(NavigationAction.PopBackTo()) }, + onBackClick = { store.dispatch(NavigationAction.PopBackTo()) }, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt index 0f57b021f1..c73f6bf836 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt @@ -34,10 +34,10 @@ import com.tangem.tap.features.details.ui.common.SettingsScreensScaffold import com.tangem.wallet.R @Composable -fun ResetCardScreen(state: ResetCardScreenState, onBackPressed: () -> Unit) { +fun ResetCardScreen(state: ResetCardScreenState, onBackClick: () -> Unit) { SettingsScreensScaffold( content = { ResetCardView(state = state) }, - onBackClick = onBackPressed, + onBackClick = onBackClick, backgroundColor = Color.Transparent, ) } @@ -148,7 +148,7 @@ private fun ResetCardScreenSample( onAcceptWarningToggleClick = {}, onResetButtonClick = {}, ), - onBackPressed = {}, + onBackClick = {}, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt index 567c74c007..dcddb62a2f 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt @@ -41,7 +41,7 @@ class SecurityModeFragment : Fragment(), StoreSubscriber { TangemTheme { SecurityModeScreen( state = screenState.value, - onBackPressed = { store.dispatch(NavigationAction.PopBackTo()) }, + onBackClick = { store.dispatch(NavigationAction.PopBackTo()) }, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt index 66f6adcab7..944ed5a3b8 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt @@ -28,36 +28,28 @@ import com.tangem.tap.features.details.ui.common.SettingsScreensScaffold import com.tangem.wallet.R @Composable -fun SecurityModeScreen( - state: SecurityModeScreenState, - onBackPressed: () -> Unit, - modifier: Modifier = Modifier, -) { +fun SecurityModeScreen(state: SecurityModeScreenState, onBackClick: () -> Unit) { SettingsScreensScaffold( - content = { SecurityModeOptions(state = state, modifier = modifier) }, + content = { SecurityModeOptions(state = state) }, // titleRes = R.string.card_settings_security_mode, - onBackClick = onBackPressed, + onBackClick = onBackClick, ) } @Composable -fun SecurityModeOptions( - state: SecurityModeScreenState, - modifier: Modifier = Modifier, -) { - +fun SecurityModeOptions(state: SecurityModeScreenState) { Column( - modifier = modifier + modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()) .padding(bottom = 28.dp), verticalArrangement = Arrangement.SpaceBetween, ) { - ScreenTitle(titleRes = R.string.card_settings_security_mode, modifier.padding(bottom = 36.dp)) + ScreenTitle(titleRes = R.string.card_settings_security_mode, Modifier.padding(bottom = 36.dp)) state.availableOptions.map { - SecurityOption(option = it, state = state, modifier = modifier) + SecurityOption(option = it, state = state) } Spacer(modifier = Modifier.weight(1f)) @@ -66,17 +58,13 @@ fun SecurityModeOptions( title = stringResource(id = R.string.common_save_changes), enabled = state.isSaveChangesEnabled, onClick = state.onSaveChangesClicked, - modifier = modifier - .padding(start = 20.dp, end = 20.dp), + modifier = Modifier.padding(start = 20.dp, end = 20.dp), ) } } @Composable -fun SecurityOption( - option: SecurityOption, state: SecurityModeScreenState, - modifier: Modifier, -) { +fun SecurityOption(option: SecurityOption, state: SecurityModeScreenState) { val selected = option == state.selectedSecurityMode val title = option.toTitleRes() @@ -88,7 +76,7 @@ fun SecurityOption( } Row( - modifier = modifier + modifier = Modifier .fillMaxWidth() .selectable( selected = selected, onClick = { state.onNewModeSelected(option) }, @@ -98,7 +86,7 @@ fun SecurityOption( RadioButton( selected = selected, onClick = null, - modifier = modifier.padding(end = 20.dp), + modifier = Modifier.padding(end = 20.dp), colors = RadioButtonDefaults.colors( unselectedColor = colorResource(id = R.color.icon_secondary), selectedColor = colorResource(id = R.color.icon_accent), @@ -111,7 +99,7 @@ fun SecurityOption( style = TangemTypography.subtitle1, color = colorResource(id = R.color.text_primary_1), ) - Spacer(modifier = modifier.size(4.dp)) + Spacer(modifier = Modifier.size(4.dp)) Text( text = stringResource(id = subtitle), style = TangemTypography.body2, @@ -123,7 +111,7 @@ fun SecurityOption( @Preview @Composable -fun SecurityModeScreenPreview() { +private fun SecurityModeScreenPreview() { SecurityModeScreen( state = SecurityModeScreenState( availableOptions = SecurityOption.values().toList(), @@ -132,6 +120,6 @@ fun SecurityModeScreenPreview() { onNewModeSelected = {}, onSaveChangesClicked = {}, ), - onBackPressed = {}, + onBackClick = {}, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt index ec42337992..c6adeb7177 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectFragment.kt @@ -39,7 +39,7 @@ class WalletConnectFragment : Fragment(), StoreSubscriber { TangemTheme { WalletConnectScreen( state = screenState.value, - onBackPressed = { + onBackClick = { if (screenState.value.isLoading) { store.dispatch( WalletConnectAction.FailureEstablishingSession( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectScreen.kt index 74489272b8..c9e1597a8d 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/WalletConnectScreen.kt @@ -38,19 +38,15 @@ import com.tangem.tap.features.details.ui.common.SettingsScreensScaffold import com.tangem.wallet.R @Composable -fun WalletConnectScreen( - state: WalletConnectScreenState, - onBackPressed: () -> Unit, - modifier: Modifier = Modifier, -) { +fun WalletConnectScreen(state: WalletConnectScreenState, onBackClick: () -> Unit) { val context = LocalContext.current SettingsScreensScaffold( content = { if (state.sessions.isEmpty()) { - EmptyScreen(state, modifier) + EmptyScreen(state) } else { - WalletConnectSessions(state, modifier) + WalletConnectSessions(state) } }, fab = { @@ -64,7 +60,7 @@ fun WalletConnectScreen( } }, titleRes = R.string.wallet_connect_title, - onBackClick = onBackPressed, + onBackClick = onBackClick, ) } @@ -88,15 +84,15 @@ private fun AddSessionFab( } @Composable -private fun EmptyScreen(state: WalletConnectScreenState, modifier: Modifier = Modifier) { +private fun EmptyScreen(state: WalletConnectScreenState) { if (state.isLoading) { LinearProgressIndicator( - modifier = modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth(), color = colorResource(id = R.color.icon_accent), ) } Column( - modifier = modifier + modifier = Modifier .fillMaxSize() .padding(bottom = 64.dp), verticalArrangement = Arrangement.Center, @@ -107,10 +103,9 @@ private fun EmptyScreen(state: WalletConnectScreenState, modifier: Modifier = Mo contentDescription = "", colorFilter = ColorFilter.tint(colorResource(id = R.color.icon_inactive)), contentScale = ContentScale.FillWidth, - modifier = modifier - .width(width = 100.dp), + modifier = Modifier.width(width = 100.dp), ) - Spacer(modifier = modifier.size(24.dp)) + Spacer(modifier = Modifier.size(24.dp)) Text( text = stringResource(id = R.string.wallet_connect_subtitle), style = TangemTypography.body2, @@ -120,28 +115,25 @@ private fun EmptyScreen(state: WalletConnectScreenState, modifier: Modifier = Mo } @Composable -private fun WalletConnectSessions( - state: WalletConnectScreenState, - modifier: Modifier = Modifier, -) { +private fun WalletConnectSessions(state: WalletConnectScreenState) { if (state.isLoading) { LinearProgressIndicator( - modifier = modifier + modifier = Modifier .fillMaxWidth() .height(2.dp), color = colorResource(id = R.color.icon_accent), ) } else { - Spacer(modifier = modifier.height(2.dp)) + Spacer(modifier = Modifier.height(2.dp)) } LazyColumn( - modifier = modifier.fillMaxSize(), + modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, ) { items(state.sessions) { session -> Row( - modifier = modifier + modifier = Modifier .fillMaxWidth() .padding(horizontal = 20.dp, vertical = 16.dp), horizontalArrangement = Arrangement.SpaceBetween, @@ -151,7 +143,7 @@ private fun WalletConnectSessions( text = session.description, style = TangemTypography.subtitle1, color = colorResource(id = R.color.text_primary_1), - modifier = modifier.weight(1f), + modifier = Modifier.weight(1f), ) IconButton( onClick = { @@ -172,7 +164,7 @@ private fun WalletConnectSessions( @Composable @Preview -fun WalletConnectScreenPreview() { +private fun WalletConnectScreenPreview() { WalletConnectScreen( state = WalletConnectScreenState( sessions = listOf( diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index 3c2eb278d7..9cedf97017 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -76,6 +76,7 @@ class HomeFragment : Fragment(), StoreSubscriber { homeState.value = state } + @Suppress("TopLevelComposableFunctions") @Composable private fun ScreenContent() { StoriesScreen( diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt index 2add8bf97a..ef40d850f6 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBars @@ -59,7 +60,7 @@ private const val STEPS = 6 @Suppress("LongMethod", "ComplexMethod") @Composable fun StoriesScreen( - homeState: MutableState = mutableStateOf(HomeState()), + homeState: MutableState, onScanButtonClick: () -> Unit, onShopButtonClick: () -> Unit, onSearchTokensClick: () -> Unit, @@ -157,7 +158,7 @@ fun StoriesScreen( currentStep = currentStep.value, stepDuration = currentStep.duration(), paused = isPaused, - onStepFinished = goToNextScreen, + onStepFinish = goToNextScreen, ) Image( painter = painterResource(id = R.drawable.ic_tangem_logo), @@ -191,7 +192,7 @@ fun StoriesScreen( modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, bottom = 16.dp) - .height(48.dp), + .heightIn(48.dp), colors = ButtonDefaults.textButtonColors( backgroundColor = Color.White, contentColor = Color(0xFF080C10), @@ -230,6 +231,11 @@ private fun MutableState.duration(): Int = when (this.value) { @Preview @Composable -fun StoriesScreenPreview() { - StoriesScreen(onScanButtonClick = {}, onShopButtonClick = {}, onSearchTokensClick = {}) +private fun StoriesScreenPreview() { + StoriesScreen( + onScanButtonClick = {}, + onShopButtonClick = {}, + onSearchTokensClick = {}, + homeState = remember { mutableStateOf(HomeState()) }, + ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt index 5ff3317d22..2a545e623b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -216,9 +216,9 @@ private fun StoriesSubtitleText(subtitleText: AnnotatedString) { @Composable private fun StoriesImage( - modifier: Modifier = Modifier, @DrawableRes drawableResId: Int, isDarkBackground: Boolean, + modifier: Modifier = Modifier, ) { Image( painter = painterResource(id = drawableResId), diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt index 3a7b6da393..579b4b640c 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt @@ -37,8 +37,9 @@ import com.tangem.wallet.R @Suppress("LongMethod", "ComplexMethod", "MagicNumber") @Composable fun FirstStoriesContent( - isPaused: Boolean, duration: Int = 8_000, - hideContent: (Boolean) -> Unit, + isPaused: Boolean, + duration: Int, + onHideContent: (Boolean) -> Unit, ) { val screenState = remember { mutableStateOf(StartingScreenState.INIT) } val progress = remember { Animatable(0f) } @@ -70,8 +71,8 @@ fun FirstStoriesContent( in 1.2f..2f -> screenState.value = StartingScreenState.MEET_TANGEM } - if (screenState.value == StartingScreenState.INIT) hideContent(true) - if (screenState.value == StartingScreenState.BUY) hideContent(false) + if (screenState.value == StartingScreenState.INIT) onHideContent(true) + if (screenState.value == StartingScreenState.BUY) onHideContent(false) val style = TextStyle( fontSize = 60.sp, @@ -166,6 +167,6 @@ private fun MutableState.isMeetTangemDisplaying(): Boolean @Preview @Composable -fun FirstStoriesPreview() { +private fun FirstStoriesPreview() { FirstStoriesContent(false, 8000) {} } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt index 16e9044852..ee6e669569 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt @@ -49,6 +49,7 @@ private data class CardValues( private object FloatingCard { + @Suppress("TopLevelComposableFunctions") @Composable fun Item( isPaused: Boolean, diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt index 5779309916..eca85a7f61 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt @@ -2,7 +2,9 @@ package com.tangem.tap.features.home.compose.views import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.size import androidx.compose.material.Button import androidx.compose.material.ButtonDefaults @@ -22,11 +24,11 @@ import com.tangem.wallet.R @Suppress("MagicNumber") @Composable fun HomeButtons( - modifier: Modifier = Modifier, isDarkBackground: Boolean, btnScanStateInProgress: Boolean, onScanButtonClick: () -> Unit, onShopButtonClick: () -> Unit, + modifier: Modifier = Modifier, ) { val darkColorBackground = Color(0xFF26292E) val darkColorButton = Color(0xFF080C10) @@ -36,9 +38,6 @@ fun HomeButtons( modifier = modifier, ) { ProgressButton( - modifier = Modifier - .weight(1f) - .height(48.dp), inProgress = btnScanStateInProgress, backgroundColor = if (isDarkBackground) darkColorBackground else Color.White, contentColor = if (isDarkBackground) Color.White else darkColorButton, @@ -64,7 +63,7 @@ fun HomeButtons( Button( modifier = Modifier .weight(1f) - .height(48.dp), + .heightIn(48.dp), onClick = onShopButtonClick, enabled = !btnScanStateInProgress, colors = ButtonDefaults.textButtonColors( @@ -85,8 +84,7 @@ fun HomeButtons( @Suppress("LongParameterList") @Composable -fun ProgressButton( - modifier: Modifier, +fun RowScope.ProgressButton( backgroundColor: Color, contentColor: Color, onClick: () -> Unit, @@ -95,7 +93,9 @@ fun ProgressButton( content: @Composable () -> Unit, ) { Button( - modifier = modifier, + modifier = Modifier + .weight(1f) + .height(48.dp), onClick = onClick, colors = ButtonDefaults.textButtonColors( backgroundColor = backgroundColor, diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt index 3779f57358..f1b335440c 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt @@ -26,7 +26,7 @@ fun StoriesProgressBar( currentStep: Int, paused: Boolean = false, stepDuration: Int = 8_000, - onStepFinished: () -> Unit = {}, + onStepFinish: () -> Unit = {}, ) { val progress = remember(currentStep) { Animatable(0f) } @@ -42,7 +42,7 @@ fun StoriesProgressBar( ) ) progress.snapTo(0f) - onStepFinished() + onStepFinish() } } @@ -81,6 +81,6 @@ fun StoriesProgressBar( @Preview @Composable -fun StoriesProgressBarPreview() { +private fun StoriesProgressBarPreview() { StoriesProgressBar(steps = 3, currentStep = 2, paused = false) { } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt index f4663eda6e..80ed02da90 100644 --- a/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/saveWallet/ui/SaveWalletBottomSheetFragment.kt @@ -40,8 +40,8 @@ internal class SaveWalletBottomSheetFragment : ComposeBottomSheetFragment Unit, onCloseClick: () -> Unit, ) { - Column( - modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - Header( - modifier = Modifier.fillMaxWidth(), - onCloseClick = onCloseClick, - ) + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Header(onCloseClick = onCloseClick) SpacerHHalf() Title( modifier = Modifier @@ -62,9 +54,6 @@ internal fun SaveWalletScreenContent( ) SpacerHHalf() Footer( - modifier = Modifier - .padding(horizontal = TangemTheme.dimens.spacing16) - .fillMaxWidth(), showProgress = showProgress, onSaveWalletClick = onSaveWalletClick, ) @@ -73,12 +62,9 @@ internal fun SaveWalletScreenContent( } @Composable -private fun Header( - modifier: Modifier = Modifier, - onCloseClick: () -> Unit, -) { +private fun Header(onCloseClick: () -> Unit, ) { Column( - modifier = modifier, + modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing8), ) { Hand() @@ -150,12 +136,13 @@ private fun Description( @Composable private fun Footer( - modifier: Modifier = Modifier, showProgress: Boolean, onSaveWalletClick: () -> Unit, ) { Column( - modifier = modifier, + modifier = Modifier + .padding(horizontal = TangemTheme.dimens.spacing16) + .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing16), ) { @@ -177,13 +164,11 @@ private fun Footer( @Composable private fun DescriptionItem( - modifier: Modifier = Modifier, iconPainter: Painter, title: String, description: String, ) { Row( - modifier = modifier, verticalAlignment = Alignment.Top, horizontalArrangement = Arrangement.SpaceEvenly, ) { @@ -220,13 +205,6 @@ private fun SaveWalletScreenContentSample( .background(TangemTheme.colors.background.primary), ) { SaveWalletScreenContent( - modifier = Modifier - .padding(top = TangemTheme.dimens.spacing32) - .fillMaxSize() - .background( - color = TangemTheme.colors.background.plain, - shape = TangemTheme.shapes.bottomSheet, - ), showProgress = false, onSaveWalletClick = { /* no-op */ }, onCloseClick = { /* no-op */ }, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/ContractAddressTests.kt b/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/ContractAddressTests.kt index 25494b3627..2eb3b4923b 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/ContractAddressTests.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/ContractAddressTests.kt @@ -22,7 +22,7 @@ import com.tangem.domain.redux.domainStore */ @Composable fun ContractAddressTests( - onItemClick: VoidCallback + onItemClick: VoidCallback, ) { val casesInfo = listOf( "USDC on ETH" to "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", @@ -38,7 +38,7 @@ fun ContractAddressTests( @Composable fun SolanaAddressTests( - onItemClick: VoidCallback + onItemClick: VoidCallback, ) { val casesInfo = listOf( "USDT (full)" to "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", @@ -54,70 +54,84 @@ private fun CasesListContent( casesList: List>, onItemClick: VoidCallback, ) { - LazyColumn(content = { - item { - Row() { - ResetContractAddressButton(onItemClick) - Text("", modifier = Modifier.weight(1f)) - ResetAllFieldsButton(onItemClick) + LazyColumn( + content = { + item { + Row { + ResetContractAddressButton(onItemClick) + Text("", modifier = Modifier.weight(1f)) + ResetAllFieldsButton(onItemClick) + } + Divider() } - Divider() - } - items(casesList.size) { - val (info, address) = casesList[it] - ContractAddressButton(info, address, onItemClick) - } - }) + items(casesList.size) { + val (info, address) = casesList[it] + ContractAddressButton(info, address, onItemClick) + } + }, + ) } @Composable -fun ResetAllFieldsButton( - onItemClick: VoidCallback -) { - ActionButton(name = "Reset") { - onItemClick() - domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data("", false))) - domainStore.dispatch(AddCustomTokenAction.OnTokenNetworkChanged(Field.Data(Blockchain.Unknown, false))) - domainStore.dispatch(AddCustomTokenAction.OnTokenNameChanged(Field.Data("", false))) - domainStore.dispatch(AddCustomTokenAction.OnTokenSymbolChanged(Field.Data("", false))) - domainStore.dispatch(AddCustomTokenAction.OnTokenDecimalsChanged(Field.Data("", false))) - domainStore.dispatch(AddCustomTokenAction.OnTokenDerivationPathChanged(Field.Data(Blockchain.Unknown, false))) - } +fun ResetAllFieldsButton(onItemClick: VoidCallback) { + ActionButton( + name = "Reset", + onClick = { + onItemClick() + domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data("", false))) + domainStore.dispatch(AddCustomTokenAction.OnTokenNetworkChanged(Field.Data(Blockchain.Unknown, false))) + domainStore.dispatch(AddCustomTokenAction.OnTokenNameChanged(Field.Data("", false))) + domainStore.dispatch(AddCustomTokenAction.OnTokenSymbolChanged(Field.Data("", false))) + domainStore.dispatch(AddCustomTokenAction.OnTokenDecimalsChanged(Field.Data("", false))) + domainStore.dispatch( + AddCustomTokenAction.OnTokenDerivationPathChanged( + Field.Data( + Blockchain.Unknown, + false, + ), + ), + ) + }, + ) } @Composable fun ResetContractAddressButton( - onItemClick: VoidCallback + onItemClick: VoidCallback, ) { - ActionButton(name = "Set empty address") { - onItemClick() - domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data("", false))) - } + ActionButton( + name = "Set empty address", + onClick = { + onItemClick() + domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data("", false))) + }, + ) } @Composable private fun ContractAddressButton( name: String, address: String, - onItemClick: VoidCallback + onItemClick: VoidCallback, ) { ActionButton( modifier = Modifier.fillMaxWidth(), name = name, - ) { - onItemClick() - domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data(address, false))) - } + onClick = { + onItemClick() + domainStore.dispatch(AddCustomTokenAction.OnTokenContractAddressChanged(Field.Data(address, false))) + }, + ) } @Composable fun ActionButton( - modifier: Modifier = Modifier, name: String, onClick: () -> Unit, + modifier: Modifier = Modifier, ) { Button( modifier = modifier.padding(horizontal = 8.dp), - onClick = onClick + onClick = onClick, ) { Text(name, fontSize = 12.sp) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/TestCasesList.kt b/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/TestCasesList.kt index ecdc68bd8c..ef6a3bc4cd 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/TestCasesList.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/addCustomToken/compose/test/TestCasesList.kt @@ -19,30 +19,19 @@ import com.tangem.wallet.R [REDACTED_AUTHOR] */ @Composable -fun TestCasesList( - onItemClick: (TestCase) -> Unit -) { +fun TestCasesList(onItemClick: (TestCase) -> Unit) { if (!BuildConfig.TEST_ACTION_ENABLED) return - Surface( - color = colorResource(id = R.color.lightGray5) - ) { - Column( - Modifier.padding(horizontal = 16.dp) - ) { - listOf( - TestCase.ContractAddress, - TestCase.SolanaTokens, - ).map { TestCaseListItem(it, onItemClick) } + Surface(color = colorResource(id = R.color.lightGray5)) { + Column(Modifier.padding(horizontal = 16.dp)) { + listOf(TestCase.ContractAddress, TestCase.SolanaTokens) + .map { case -> TestCaseListItem(testCase = case, onItemClick = { onItemClick(case) }) } } } } @Composable -fun TestCaseListItem( - testCase: TestCase, - onItemClick: (TestCase) -> Unit, -) { +fun TestCaseListItem(testCase: TestCase, onItemClick: () -> Unit) { Row( verticalAlignment = Alignment.CenterVertically, ) { @@ -51,7 +40,7 @@ fun TestCaseListItem( text = testCase.description, ) Button( - onClick = { onItemClick(testCase) } + onClick = onItemClick, ) { Text("Start") } } } @@ -59,5 +48,6 @@ fun TestCaseListItem( enum class TestCase(val description: String, val content: @Composable (VoidCallback) -> Unit) { ContractAddress("Test contract address field", { ContractAddressTests(it) }), Auto("Test contract address field", { ContractAddressTests(it) }), - SolanaTokens("Test Solana contract addresses", { SolanaAddressTests(it) }), ; + SolanaTokens("Test Solana contract addresses", { SolanaAddressTests(it) }), + ; } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt index 7c8c5b5f14..e8c8f62fc4 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/AddTokensFragment.kt @@ -77,7 +77,7 @@ class AddTokensFragment : BaseFragment(R.layout.fragment_add_tokens), StoreSubsc CurrenciesScreen( tokensState = tokensState, onSaveChanges = onSaveChanges, - onNetworkItemClicked = onNetworkItemClicked, + onNetworkItemClick = onNetworkItemClicked, onLoadMore = onLoadMore, ) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt index 94aab4a516..c069e5feba 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt @@ -54,9 +54,9 @@ import com.tangem.wallet.R @Suppress("LongMethod") @Composable fun CurrenciesScreen( - tokensState: MutableState = mutableStateOf(store.state.tokensState), + tokensState: MutableState, onSaveChanges: (List, List) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit, + onNetworkItemClick: (ContractAddress) -> Unit, onLoadMore: () -> Unit, ) { val tokensAddedOnMainScreen = remember { tokensState.value.addedTokens } @@ -123,10 +123,10 @@ fun CurrenciesScreen( addedTokens = addedTokensState.value, addedBlockchains = addedBlockchainsState.value, allowToAdd = tokensState.value.allowToAdd, - onAddCurrencyToggled = { currency, token -> + onAddCurrencyToggle = { currency, token -> onAddCurrencyToggleClick(currency, token) }, - onNetworkItemClicked = onNetworkItemClicked, + onNetworkItemClick = onNetworkItemClick, onLoadMore = onLoadMore, ) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt index 175d3a765a..5f3ccb4e18 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt @@ -27,8 +27,8 @@ fun ListOfCurrencies( addedTokens: List, addedBlockchains: List, allowToAdd: Boolean, - onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit, + onAddCurrencyToggle: (Currency, TokenWithBlockchain?) -> Unit, + onNetworkItemClick: (ContractAddress) -> Unit, onLoadMore: () -> Unit, ) { @@ -56,16 +56,16 @@ fun ListOfCurrencies( verticalArrangement = Arrangement.spacedBy(12.dp), ) { item { header() } - itemsIndexed(currencies) { index, currency -> + itemsIndexed(currencies) { _, currency -> CurrencyItem( currency = currency, addedTokens = addedTokens, addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, isExpanded = expandedCurrencies.value.contains(currency.id), - onCurrencyClick = onCurrencyClick, - onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked, + onCurrencyClick = { onCurrencyClick(currency.id) }, + onAddCurrencyToggle = onAddCurrencyToggle, + onNetworkItemClick = onNetworkItemClick, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt index 0757c05100..4783c5ac67 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt @@ -23,8 +23,8 @@ fun CurrencyExpandedContent( addedBlockchains: List, allowToAdd: Boolean, isExpanded: Boolean, - onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit, + onAddCurrencyToggle: (Currency, TokenWithBlockchain?) -> Unit, + onNetworkItemClick: (ContractAddress) -> Unit, ) { AnimatedVisibility( visible = isExpanded, @@ -51,8 +51,8 @@ fun CurrencyExpandedContent( added = added, index = index, size = blockchains.size, - onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked, + onAddCurrencyToggle = onAddCurrencyToggle, + onNetworkItemClick = onNetworkItemClick, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt index 2a3c458e2e..c2aa9f238f 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt @@ -15,9 +15,9 @@ fun CurrencyItem( addedBlockchains: List, allowToAdd: Boolean, isExpanded: Boolean, - onCurrencyClick: (String) -> Unit, - onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit, + onCurrencyClick: () -> Unit, + onAddCurrencyToggle: (Currency, TokenWithBlockchain?) -> Unit, + onNetworkItemClick: (ContractAddress) -> Unit, ) { Column { CurrencyItemHeader( @@ -33,8 +33,8 @@ fun CurrencyItem( addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, isExpanded = isExpanded, - onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked, + onAddCurrencyToggle = onAddCurrencyToggle, + onNetworkItemClick = onNetworkItemClick, ) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt index 7c4ebd56e8..3c0c5655cc 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt @@ -68,11 +68,8 @@ private fun LastArrowView(rowHeight: Dp) { @Preview @Composable -fun ArrowViewPreview() { - Box( - Modifier - .background(color = Color.White), - ) { +private fun ArrowViewPreview() { + Box(Modifier.background(color = Color.White)) { Column( modifier = Modifier .fillMaxWidth() diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt index c081298112..e202018a5a 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt @@ -47,7 +47,7 @@ fun CurrencyItemHeader( addedTokens: List, addedBlockchains: List, isExpanded: Boolean, - onCurrencyClick: (String) -> Unit, + onCurrencyClick: () -> Unit, ) { Row( modifier = Modifier @@ -56,7 +56,7 @@ fun CurrencyItemHeader( .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, - onClick = { onCurrencyClick(currency.id) }, + onClick = onCurrencyClick, ), ) { Box( diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt index 93ed42ffe7..8c195a0214 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt @@ -9,7 +9,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -52,19 +52,19 @@ fun NetworkItem( added: Boolean, index: Int, size: Int, - onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit, + onAddCurrencyToggle: (Currency, TokenWithBlockchain?) -> Unit, + onNetworkItemClick: (ContractAddress) -> Unit, ) { val rowHeight = 53.dp Row( modifier = Modifier .fillMaxWidth() - .height(rowHeight) + .heightIn(rowHeight) .combinedClickable( enabled = allowToAdd, onLongClick = { - contract.address?.let { onNetworkItemClicked(it) } + contract.address?.let { onNetworkItemClick(it) } }, onClick = {}, indication = null, @@ -150,7 +150,7 @@ fun NetworkItem( .fillMaxHeight() .padding(start = 16.dp, end = 16.dp), checked = added, - onCheckedChange = { onAddCurrencyToggled(currencyToSave, tokenWithBlockchain) }, + onCheckedChange = { onAddCurrencyToggle(currencyToSave, tokenWithBlockchain) }, colors = SwitchDefaults.colors( checkedThumbColor = Color(0xFF1ACE80), ), diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt index 96bba1df0e..9ccbecd997 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt @@ -20,9 +20,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.rememberNestedScrollInteropConnection import androidx.fragment.app.viewModels +import com.tangem.core.analytics.Analytics import com.tangem.core.ui.fragments.ComposeBottomSheetFragment import com.tangem.core.ui.res.TangemTheme -import com.tangem.core.analytics.Analytics import com.tangem.tap.common.analytics.events.MyWallets import com.tangem.tap.features.details.ui.cardsettings.resolveReference import com.tangem.tap.features.walletSelector.ui.components.RenameWalletDialogContent @@ -45,7 +45,7 @@ internal class WalletSelectorBottomSheetFragment : ComposeBottomSheetFragment) { @Composable private fun Footer( - modifier: Modifier = Modifier, isLocked: Boolean, showUnlockProgress: Boolean, showAddCardProgress: Boolean, @@ -183,7 +172,13 @@ private fun Footer( onAddCardClick: () -> Unit, ) { Column( - modifier = modifier, + modifier = Modifier + .padding( + top = dimensionResource(id = R.dimen.spacing24), + bottom = dimensionResource(id = R.dimen.spacing16), + ) + .padding(horizontal = TangemTheme.dimens.spacing16) + .fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12), ) { if (isLocked) { @@ -209,7 +204,6 @@ private fun Footer( @Composable private fun EditWalletsBar( - modifier: Modifier = Modifier, editingWalletsSize: Int, onClearSelectedClick: () -> Unit, onEditSelectedWalletClick: () -> Unit, @@ -220,7 +214,9 @@ private fun EditWalletsBar( } Row( - modifier = modifier, + modifier = Modifier + .padding(horizontal = TangemTheme.dimens.spacing16) + .fillMaxWidth(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12), ) { diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletItem.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletItem.kt index c98912667b..e396d7f787 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletItem.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletItem.kt @@ -28,7 +28,6 @@ import com.tangem.core.ui.components.SpacerH2 import com.tangem.core.ui.components.SpacerW6 import com.tangem.core.ui.components.SpacerW8 import com.tangem.core.ui.res.TangemTheme -import com.tangem.domain.common.util.UserWalletId import com.tangem.tap.common.compose.TangemTypography import com.tangem.tap.features.walletSelector.ui.model.MultiCurrencyUserWalletItem import com.tangem.tap.features.walletSelector.ui.model.SingleCurrencyUserWalletItem @@ -42,14 +41,14 @@ internal fun WalletItem( wallet: UserWalletItem, isSelected: Boolean, isChecked: Boolean, - onWalletClick: (UserWalletId) -> Unit, - onWalletLongClick: (UserWalletId) -> Unit, + onWalletClick: () -> Unit, + onWalletLongClick: () -> Unit, ) { Row( modifier = Modifier .combinedClickable( - onClick = { onWalletClick(wallet.id) }, - onLongClick = { onWalletLongClick(wallet.id) }, + onClick = onWalletClick, + onLongClick = onWalletLongClick, ) .height(72.dp) .padding(all = TangemTheme.dimens.spacing16), @@ -61,14 +60,9 @@ internal fun WalletItem( isSelected = isSelected, ) SpacerW8() - WalletInfo( - modifier = Modifier.weight(weight = .6f), - wallet = wallet, - isSelected = isSelected, - ) + WalletInfo(wallet = wallet, isSelected = isSelected) SpacerW6() TokensInfo( - modifier = Modifier.weight(weight = .4f), isLocked = wallet.isLocked, balance = wallet.balance, tokensCount = (wallet as? MultiCurrencyUserWalletItem)?.tokensCount, @@ -78,13 +72,12 @@ internal fun WalletItem( @Composable private fun WalletCardImage( - modifier: Modifier = Modifier, cardImageUrl: String, isChecked: Boolean, isSelected: Boolean, ) { Box( - modifier = modifier + modifier = Modifier .width(TangemTheme.dimens.size62) .height(TangemTheme.dimens.size42), ) { @@ -133,13 +126,12 @@ private fun WalletCardImage( @OptIn(ExperimentalComposeUiApi::class) @Composable -private fun WalletInfo( - modifier: Modifier = Modifier, +private fun RowScope.WalletInfo( wallet: UserWalletItem, isSelected: Boolean, ) { Column( - modifier = modifier, + modifier = Modifier.weight(weight = .6f), verticalArrangement = Arrangement.SpaceAround, ) { Text( @@ -166,14 +158,13 @@ private fun WalletInfo( } @Composable -private fun TokensInfo( - modifier: Modifier = Modifier, +private fun RowScope.TokensInfo( isLocked: Boolean, balance: UserWalletItem.Balance, tokensCount: Int?, ) { Column( - modifier = modifier, + modifier = Modifier.weight(weight = .4f), verticalArrangement = Arrangement.SpaceAround, horizontalAlignment = Alignment.End, ) { @@ -181,9 +172,7 @@ private fun TokensInfo( LockedPlaceholder() } else { if (balance.isLoading) { - LoadingTokensInfo( - isMultiCurrencyWallet = tokensCount != null, - ) + LoadingTokensInfo(isMultiCurrencyWallet = tokensCount != null) } else { LoadedTokensInfo( balanceAmount = balance.amount, @@ -195,12 +184,9 @@ private fun TokensInfo( } @Composable -private fun LoadingTokensInfo( - modifier: Modifier = Modifier, - isMultiCurrencyWallet: Boolean, -) { +private fun LoadingTokensInfo(isMultiCurrencyWallet: Boolean) { Column( - modifier = modifier.shimmer(), + modifier = Modifier.shimmer(), horizontalAlignment = Alignment.End, verticalArrangement = Arrangement.SpaceAround, ) { @@ -230,15 +216,8 @@ private fun LoadingTokensInfo( @OptIn(ExperimentalComposeUiApi::class) @Composable -private fun LoadedTokensInfo( - modifier: Modifier = Modifier, - balanceAmount: String, - tokensCount: Int?, -) { - Column( - modifier = modifier, - horizontalAlignment = Alignment.End, - ) { +private fun LoadedTokensInfo(balanceAmount: String, tokensCount: Int?) { + Column(horizontalAlignment = Alignment.End) { Text( text = balanceAmount, style = TangemTheme.typography.subtitle1, diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt index 9ff1ad727f..0afd4fe8f6 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/WelcomeFragment.kt @@ -34,10 +34,7 @@ internal class WelcomeFragment : ComposeFragment() { } @Composable - override fun ScreenContent( - modifier: Modifier, - state: WelcomeScreenState, - ) { + override fun ScreenContent(state: WelcomeScreenState, modifier: Modifier) { val snackbarHostState = remember { SnackbarHostState() } val errorMessage by rememberUpdatedState(newValue = state.error?.resolveReference()) diff --git a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt index de0ccac450..4cf55f6bcd 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/ui/components/WelcomeScreenContent.kt @@ -27,16 +27,12 @@ import com.tangem.wallet.R @Suppress("LongMethod") @Composable internal fun WelcomeScreenContent( - modifier: Modifier = Modifier, showUnlockProgress: Boolean, showScanCardProgress: Boolean, onUnlockClick: () -> Unit, onScanCardClick: () -> Unit, ) { - Column( - modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally, - ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { SpacerHMax() Icon( modifier = Modifier.size(TangemTheme.dimens.size96), diff --git a/buildSrc/src/main/java/Dependency.kt b/buildSrc/src/main/java/Dependency.kt index 3f2a1883da..e80049f27b 100644 --- a/buildSrc/src/main/java/Dependency.kt +++ b/buildSrc/src/main/java/Dependency.kt @@ -72,8 +72,12 @@ object Library { object Tangem { const val blockchain = "com.tangem:blockchain:" + Versions.tangemBlockchainSdk - const val cardAndroid = "com.tangem.tangem-sdk-kotlin:android:" + Versions.tangemCardSgk - const val cardCore = "com.tangem.tangem-sdk-kotlin:core:" + Versions.tangemCardSgk + const val cardAndroid = "com.tangem.tangem-sdk-kotlin:android:" + Versions.tangemCardSdk + const val cardCore = "com.tangem.tangem-sdk-kotlin:core:" + Versions.tangemCardSdk +} + +object Tools { + const val composeDetektRules = "ru.kode:detekt-rules-compose:" + Versions.composeDetektRules } object Test { diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index b7345c808d..a6de1c445e 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -61,10 +61,13 @@ object Versions { // region Tangem const val tangemBlockchainSdk = "develop-151" - - const val tangemCardSgk = "develop-179" + const val tangemCardSdk = "develop-179" // endregion Tangem + // region Tools + const val composeDetektRules = "1.2.2" + // endregion Tools + // region Testing const val espresso = "3.4.0" const val junit = "4.13.2" diff --git a/buildSrc/src/main/java/detekt-convention.gradle.kts b/buildSrc/src/main/java/detekt-convention.gradle.kts index 01220d13e0..ad110e1d9c 100644 --- a/buildSrc/src/main/java/detekt-convention.gradle.kts +++ b/buildSrc/src/main/java/detekt-convention.gradle.kts @@ -21,4 +21,8 @@ tasks.withType { } jvmTarget = "1.8" +} + +dependencies { + detektPlugins(Tools.composeDetektRules) } \ No newline at end of file diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 3022bed25f..8482adf3cc 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -14,10 +14,10 @@ console-reports: output-reports: active: true exclude: - # - 'TxtOutputReport' - - 'XmlOutputReport' - - 'HtmlOutputReport' - - 'MdOutputReport' + # - 'TxtOutputReport' + - 'XmlOutputReport' + - 'HtmlOutputReport' + - 'MdOutputReport' comments: active: false @@ -36,7 +36,7 @@ comments: endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' KDocReferencesNonPublicProperty: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] OutdatedDocumentation: active: false matchTypeParameters: true @@ -44,17 +44,17 @@ comments: allowParamOnConstructorProperties: false UndocumentedPublicClass: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] searchInNestedClass: true searchInInnerClass: true searchInInnerObject: true searchInInnerInterface: true UndocumentedPublicFunction: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] UndocumentedPublicProperty: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] complexity: active: true @@ -70,7 +70,7 @@ complexity: includePrivateDeclarations: false LabeledExpression: active: false - ignoredLabels: [] + ignoredLabels: [ ] LargeClass: active: true threshold: 300 @@ -83,7 +83,7 @@ complexity: constructorThreshold: 7 ignoreDefaultParameters: true ignoreDataClasses: true - ignoreAnnotated: ['Provides'] + ignoreAnnotated: [ 'Provides' ] MethodOverloading: active: true threshold: 6 @@ -107,14 +107,14 @@ complexity: active: true StringLiteralDuplication: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] threshold: 3 ignoreAnnotation: true excludeStringsWithLessThan5Characters: true ignoreStringsRegex: '$^' TooManyFunctions: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] thresholdInFiles: 20 thresholdInClasses: 20 thresholdInInterfaces: 20 @@ -189,7 +189,7 @@ exceptions: - 'toString' InstanceOfCheckForException: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] NotImplementedDeclaration: active: false ObjectExtendsThrowable: @@ -215,7 +215,7 @@ exceptions: active: false ThrowingExceptionsWithoutMessageOrCause: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] exceptions: - 'ArrayIndexOutOfBoundsException' - 'Exception' @@ -230,7 +230,7 @@ exceptions: active: true TooGenericExceptionCaught: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] exceptionNames: - 'ArrayIndexOutOfBoundsException' - 'Error' @@ -269,7 +269,7 @@ naming: enumEntryPattern: '[A-Z][_a-zA-Z0-9]*' ForbiddenClassName: active: false - forbiddenName: [] + forbiddenName: [ ] FunctionMaxLength: active: false maximumFunctionNameLength: 30 @@ -278,11 +278,11 @@ naming: minimumFunctionNameLength: 3 FunctionNaming: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] functionPattern: '[a-z][a-zA-Z0-9]*' excludeClassPattern: '$^' ignoreOverridden: true - ignoreAnnotated: ['Composable'] + ignoreAnnotated: [ 'Composable' ] FunctionParameterNaming: active: true parameterPattern: '[a-z][A-Za-z0-9]*' @@ -340,10 +340,10 @@ performance: threshold: 3 ForEachOnRange: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] SpreadOperator: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] UnnecessaryTemporaryInstantiation: active: true @@ -389,7 +389,7 @@ potential-bugs: - '*.CheckReturnValue' ignoreReturnValueAnnotations: - '*.CanIgnoreReturnValue' - ignoreFunctionCall: [] + ignoreFunctionCall: [ ] ImplicitDefaultLocale: active: true ImplicitUnitReturnType: @@ -403,14 +403,14 @@ potential-bugs: active: true LateinitUsage: active: false - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] - ignoreAnnotated: ['Inject'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] + ignoreAnnotated: [ 'Inject' ] ignoreOnClassesPattern: '' MapGetWithNotNullAssertionOperator: active: true MissingPackageDeclaration: active: true - excludes: ['**/*.kts'] + excludes: [ '**/*.kts' ] NullCheckOnMutableProperty: active: true NullableToStringCall: @@ -427,7 +427,7 @@ potential-bugs: active: true UnsafeCallOnNullableType: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**' ] UnsafeCast: active: true UnusedUnaryOperator: @@ -478,7 +478,7 @@ style: customMessage: '' ForbiddenImport: active: false - imports: [] + imports: [ ] forbiddenPatterns: '' ForbiddenMethodCall: active: false @@ -489,7 +489,7 @@ style: value: 'kotlin.io.println' ForbiddenSuppress: active: false - rules: [] + rules: [ ] ForbiddenVoid: active: false ignoreOverridden: false @@ -503,7 +503,7 @@ style: maxJumpCount: 2 MagicNumber: active: true - excludes: ['**/test/**', '**/androidTest/**', '**/commonTest/**', '**/*.kts'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/*.kts' ] ignoreNumbers: - '-1' - '0' @@ -519,7 +519,7 @@ style: ignoreEnums: false ignoreRanges: false ignoreExtensionFunctions: true - ignoreAnnotated: ['Preview'] + ignoreAnnotated: [ 'Preview' ] MandatoryBracesIfStatements: active: true MandatoryBracesLoops: @@ -613,11 +613,11 @@ style: active: true UnusedPrivateClass: active: true - ignoreAnnotated: ['UnusedRequiredComponent'] + ignoreAnnotated: [ 'UnusedRequiredComponent' ] UnusedPrivateMember: active: true allowedNames: '(_|ignored|expected|serialVersionUID)' - ignoreAnnotated: ['Preview', 'UnusedRequiredComponent'] + ignoreAnnotated: [ 'Preview', 'UnusedRequiredComponent' ] UseAnyOrNoneInsteadOfFind: active: true UseArrayLiteralsInAnnotations: @@ -654,3 +654,27 @@ style: active: false excludeImports: - 'java.util.*' + +compose: + ReusedModifierInstance: + active: true + UnnecessaryEventHandlerParameter: + active: true + ComposableEventParameterNaming: + active: true + ComposableParametersOrdering: + active: true + ModifierDefaultValue: + active: true + MissingModifierDefaultValue: + active: true + ModifierHeightWithText: + active: true + ModifierParameterPosition: + active: true + PublicComposablePreview: + active: true + TopLevelComposableFunctions: + active: true + ComposeFunctionName: + active: true diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Buttons.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Buttons.kt index 5584176306..7a262835b6 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Buttons.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Buttons.kt @@ -41,10 +41,10 @@ import com.tangem.core.ui.res.TangemTheme * */ @Composable fun TextButton( - modifier: Modifier = Modifier, text: String, - enabled: Boolean = true, onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, ) { TangemButton( modifier = modifier, @@ -63,11 +63,11 @@ fun TextButton( * */ @Composable fun TextButtonIconLeft( - modifier: Modifier = Modifier, text: String, icon: Painter, - enabled: Boolean = true, onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, ) { TangemButton( modifier = modifier, @@ -83,10 +83,10 @@ fun TextButtonIconLeft( @Composable fun WarningTextButton( - modifier: Modifier = Modifier, text: String, - enabled: Boolean = true, onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, ) { TangemButton( modifier = modifier, @@ -102,11 +102,11 @@ fun WarningTextButton( @Composable fun PrimaryButton( - modifier: Modifier = Modifier, text: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -124,12 +124,12 @@ fun PrimaryButton( * */ @Composable fun PrimaryButtonIconRight( - modifier: Modifier = Modifier, text: String, icon: Painter, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -147,12 +147,12 @@ fun PrimaryButtonIconRight( * */ @Composable fun PrimaryButtonIconLeft( - modifier: Modifier = Modifier, text: String, icon: Painter, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -167,11 +167,11 @@ fun PrimaryButtonIconLeft( @Composable fun SecondaryButton( - modifier: Modifier = Modifier, text: String, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -189,12 +189,12 @@ fun SecondaryButton( * */ @Composable fun SecondaryButtonIconRight( - modifier: Modifier = Modifier, text: String, icon: Painter, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -212,12 +212,12 @@ fun SecondaryButtonIconRight( * */ @Composable fun SecondaryButtonIconLeft( - modifier: Modifier = Modifier, text: String, icon: Painter, + onClick: () -> Unit, + modifier: Modifier = Modifier, showProgress: Boolean = false, enabled: Boolean = true, - onClick: () -> Unit, ) { TangemButton( modifier = modifier, @@ -234,13 +234,13 @@ fun SecondaryButtonIconLeft( @Suppress("LongParameterList") @Composable private fun TangemButton( - modifier: Modifier = Modifier, text: String, icon: TangemButtonIcon, onClick: () -> Unit, colors: ButtonColors, showProgress: Boolean, enabled: Boolean, + modifier: Modifier = Modifier, size: TangemButtonSize = TangemButtonSize.Default, elevation: ButtonElevation = TangemButtonsDefaults.elevation, ) { diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/ButtonsDeprecated.kt b/core/ui/src/main/java/com/tangem/core/ui/components/ButtonsDeprecated.kt index 26fe7edb44..a6aa96ec52 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/ButtonsDeprecated.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/ButtonsDeprecated.kt @@ -26,104 +26,104 @@ import com.tangem.core.ui.res.textColor @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryStartIconButton_Enabled_InLightTheme() { +private fun Preview_PrimaryStartIconButton_Enabled_InLightTheme() { TangemTheme(isDark = false) { PrimaryStartIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = true, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryStartIconButton_Enabled_InDarkTheme() { +private fun Preview_PrimaryStartIconButton_Enabled_InDarkTheme() { TangemTheme(isDark = true) { PrimaryStartIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = true, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryStartIconButton_Disabled_InLightTheme() { +private fun Preview_PrimaryStartIconButton_Disabled_InLightTheme() { TangemTheme(isDark = false) { PrimaryStartIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = false, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryStartIconButton_Disabled_InDarkTheme() { +private fun Preview_PrimaryStartIconButton_Disabled_InDarkTheme() { TangemTheme(isDark = true) { PrimaryStartIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = false, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryEndIconButton_Enabled_InLightTheme() { +private fun Preview_PrimaryEndIconButton_Enabled_InLightTheme() { TangemTheme(isDark = false) { PrimaryEndIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = true, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryEndIconButton_Enabled_InDarkTheme() { +private fun Preview_PrimaryEndIconButton_Enabled_InDarkTheme() { TangemTheme(isDark = true) { PrimaryEndIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = true, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryEndIconButton_Disabled_InLightTheme() { +private fun Preview_PrimaryEndIconButton_Disabled_InLightTheme() { TangemTheme(isDark = false) { PrimaryEndIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = false, - onClicked = {}, + onClick = {}, ) } } @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_PrimaryEndIconButton_Disabled_InDarkTheme() { +private fun Preview_PrimaryEndIconButton_Disabled_InDarkTheme() { TangemTheme(isDark = true) { PrimaryEndIconButton( text = "Manage tokens", iconResId = R.drawable.ic_tangem_24, enabled = false, - onClicked = {}, + onClick = {}, ) } } @@ -135,7 +135,7 @@ fun Preview_PrimaryEndIconButton_Disabled_InDarkTheme() { * @param text button text * @param iconResId button icon res id * @param enabled controls the enabled state of the button - * @param onClicked the lambda to be invoked when this button is pressed + * @param onClick the lambda to be invoked when this button is pressed * * @see Figma component @@ -143,20 +143,23 @@ fun Preview_PrimaryEndIconButton_Disabled_InDarkTheme() { @Deprecated("Use PrimaryButtonIconRight instead") @Composable fun PrimaryStartIconButton( - modifier: Modifier = Modifier, text: String, @DrawableRes iconResId: Int, + onClick: () -> Unit, + modifier: Modifier = Modifier, enabled: Boolean = true, - onClicked: () -> Unit, ) { - PrimaryButtonRow(modifier = modifier, enabled = enabled, onClicked = onClicked) { - Icon( - painter = painterResource(id = iconResId), - contentDescription = null, - ) - Spacer(modifier = Modifier.width(dimensionResource(R.dimen.spacing8))) - Text(text = text) - } + PrimaryButtonRow( + modifier = modifier, enabled = enabled, onClick = onClick, + content = { + Icon( + painter = painterResource(id = iconResId), + contentDescription = null, + ) + Spacer(modifier = Modifier.width(dimensionResource(R.dimen.spacing8))) + Text(text = text) + }, + ) } /** @@ -166,7 +169,7 @@ fun PrimaryStartIconButton( * @param text button text * @param iconResId button icon res id * @param enabled controls the enabled state of the button - * @param onClicked the lambda to be invoked when this button is pressed + * @param onClick the lambda to be invoked when this button is pressed * * @see Figma component @@ -174,31 +177,34 @@ fun PrimaryStartIconButton( @Deprecated("Use PrimaryButtonIconLeft instead") @Composable fun PrimaryEndIconButton( - modifier: Modifier = Modifier, text: String, @DrawableRes iconResId: Int, + onClick: () -> Unit, + modifier: Modifier = Modifier, enabled: Boolean = true, - onClicked: () -> Unit, ) { - PrimaryButtonRow(modifier = modifier, enabled = enabled, onClicked = onClicked) { - Text(text = text) - Spacer(modifier = Modifier.width(dimensionResource(R.dimen.spacing8))) - Icon( - painter = painterResource(id = iconResId), - contentDescription = null, - ) - } + PrimaryButtonRow( + modifier = modifier, enabled = enabled, onClick = onClick, + content = { + Text(text = text) + Spacer(modifier = Modifier.width(dimensionResource(R.dimen.spacing8))) + Icon( + painter = painterResource(id = iconResId), + contentDescription = null, + ) + }, + ) } @Composable private fun PrimaryButtonRow( - modifier: Modifier, enabled: Boolean, - onClicked: () -> Unit, + onClick: () -> Unit, content: @Composable (RowScope.() -> Unit), + modifier: Modifier = Modifier, ) { Button( - onClick = onClicked, + onClick = onClick, modifier = modifier .fillMaxWidth() .height(dimensionResource(R.dimen.size48)), diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Cards.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Cards.kt index db9c45339f..2a51162e97 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Cards.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Cards.kt @@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width @@ -39,7 +40,6 @@ import com.valentinilk.shimmer.shimmer */ @Composable fun SmallInfoCard( - modifier: Modifier = Modifier, startText: String, endText: String, isLoading: Boolean = false, @@ -50,7 +50,6 @@ fun SmallInfoCard( elevation = TangemTheme.dimens.elevation2, ) { CardInfoBox( - modifier = modifier, startText = startText, endText = endText, isLoading = isLoading, @@ -70,7 +69,6 @@ fun SmallInfoCard( */ @Composable fun SmallInfoCardWithWarning( - modifier: Modifier = Modifier, startText: String, endText: String, warningText: String, @@ -81,8 +79,7 @@ fun SmallInfoCardWithWarning( elevation = TangemTheme.dimens.elevation2, ) { Column( - modifier = modifier - .fillMaxWidth(), + modifier = Modifier.fillMaxWidth(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { @@ -148,7 +145,6 @@ fun SmallInfoCardWithWarning( */ @Composable fun CardWithIcon( - modifier: Modifier = Modifier, title: String, description: String, icon: @Composable () -> Unit, @@ -160,7 +156,6 @@ fun CardWithIcon( elevation = TangemTheme.dimens.elevation2, ) { IconWithTitleAndDescription( - modifier = modifier, title = title, description = description, icon = icon, @@ -188,10 +183,9 @@ fun IconWithTitleAndDescription( description: String, icon: @Composable () -> Unit, additionalContent: @Composable () -> Unit = {}, - modifier: Modifier = Modifier, ) { Row( - modifier = modifier + modifier = Modifier .wrapContentHeight() .fillMaxWidth() .padding( @@ -244,15 +238,14 @@ fun IconWithTitleAndDescription( @Composable private fun CardInfoBox( - modifier: Modifier = Modifier, startText: String, endText: String, isLoading: Boolean = false, ) { Row( - modifier = modifier + modifier = Modifier .fillMaxWidth() - .height(TangemTheme.dimens.size48) + .heightIn(TangemTheme.dimens.size48) .padding( horizontal = TangemTheme.dimens.spacing16, vertical = TangemTheme.dimens.spacing12, @@ -325,7 +318,7 @@ private fun CardsPreview() { @Preview(showBackground = true) @Composable -fun Preview_Cards_InLightTheme() { +private fun Preview_Cards_InLightTheme() { TangemTheme(isDark = false) { CardsPreview() } @@ -333,7 +326,7 @@ fun Preview_Cards_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_InfoCardWithWarning_InDarkTheme() { +private fun Preview_InfoCardWithWarning_InDarkTheme() { TangemTheme(isDark = true) { CardsPreview() } @@ -341,7 +334,7 @@ fun Preview_InfoCardWithWarning_InDarkTheme() { @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_SimpleInfoCard_InLightTheme() { +private fun Preview_SimpleInfoCard_InLightTheme() { TangemTheme(isDark = false) { SmallInfoCard(startText = "Balance", endText = "0.4405434 BTC") } @@ -349,7 +342,7 @@ fun Preview_SimpleInfoCard_InLightTheme() { @Preview(widthDp = 328, heightDp = 48, showBackground = true) @Composable -fun Preview_SimpleInfoCard_InDarkTheme() { +private fun Preview_SimpleInfoCard_InDarkTheme() { TangemTheme(isDark = true) { SmallInfoCard(startText = "Balance", endText = "0.4405434 BTC") } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/CurrencyPlaceholderIcon.kt b/core/ui/src/main/java/com/tangem/core/ui/components/CurrencyPlaceholderIcon.kt index 418f0692ed..bea33706ab 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/CurrencyPlaceholderIcon.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/CurrencyPlaceholderIcon.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.unit.sp import com.tangem.core.ui.res.TangemTheme @Composable -fun CurrencyPlaceholderIcon(modifier: Modifier = Modifier, id: String) { +fun CurrencyPlaceholderIcon(id: String, modifier: Modifier = Modifier) { val letterColor: Color = TangemTheme.colors.text.primary2 val circleColor: Color = TangemTheme.colors.icon.secondary @@ -42,7 +42,7 @@ fun CurrencyPlaceholderIcon(modifier: Modifier = Modifier, id: String) { @Preview(showBackground = true, heightDp = 40, widthDp = 40) @Composable -fun Preview_CurrencyPlaceholderIcon_InLightTheme() { +private fun Preview_CurrencyPlaceholderIcon_InLightTheme() { TangemTheme(isDark = false) { CurrencyPlaceholderIcon(id = "DAI") } @@ -50,7 +50,7 @@ fun Preview_CurrencyPlaceholderIcon_InLightTheme() { @Preview(showBackground = true, heightDp = 40, widthDp = 40) @Composable -fun Preview_CurrencyPlaceholderIcon_InDarkTheme() { +private fun Preview_CurrencyPlaceholderIcon_InDarkTheme() { TangemTheme(isDark = true) { CurrencyPlaceholderIcon(id = "DAI") } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt index 5afa4620fa..aa01105bc9 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Dialogs.kt @@ -24,12 +24,11 @@ import com.tangem.core.ui.res.TangemTheme */ @Composable fun BasicDialog( - modifier: Modifier = Modifier, message: String, - title: String? = null, confirmButton: DialogButton, - dismissButton: DialogButton? = null, onDismissDialog: () -> Unit, + title: String? = null, + dismissButton: DialogButton? = null, ) { AlertDialog( text = { @@ -68,8 +67,7 @@ fun BasicDialog( } }, shape = TangemTheme.shapes.roundedCornersLarge, - modifier = modifier - .padding(TangemTheme.dimens.spacing24), + modifier = Modifier.padding(TangemTheme.dimens.spacing24), ) } @@ -79,13 +77,8 @@ data class DialogButton( ) @Composable -fun SimpleOkDialog( - modifier: Modifier = Modifier, - message: String, - onDismissDialog: () -> Unit, -) { +fun SimpleOkDialog(message: String, onDismissDialog: () -> Unit) { BasicDialog( - modifier = modifier, message = message, confirmButton = DialogButton(onClick = onDismissDialog), onDismissDialog = onDismissDialog, @@ -95,23 +88,28 @@ fun SimpleOkDialog( // region Preview @Composable -private fun SimpleOkDialogPreview() = SimpleOkDialog( - message = "All protected passwords will be deleted from the " + - "secure storage, you must enter the wallet password to work with the app.", -) {} +private fun SimpleOkDialogPreview() { + SimpleOkDialog( + message = "All protected passwords will be deleted from the " + + "secure storage, you must enter the wallet password to work with the app.", + ) {} +} @Composable -private fun BasicDialogPreview() = BasicDialog( - message = "All protected passwords will be deleted from the secure storage, you must enter the wallet password " + - "to work with the app", - title = "Attention", - confirmButton = DialogButton {}, - dismissButton = DialogButton {}, -) {} +private fun BasicDialogPreview() { + BasicDialog( + message = "All protected passwords will be deleted from the secure storage, you must enter the wallet " + + "password to work with the app", + title = "Attention", + confirmButton = DialogButton {}, + dismissButton = DialogButton {}, + onDismissDialog = {}, + ) +} @Preview(showBackground = true) @Composable -fun Preview_SimpleOkDialog_InLightTheme() { +private fun Preview_SimpleOkDialog_InLightTheme() { TangemTheme(isDark = false) { SimpleOkDialogPreview() } @@ -119,7 +117,7 @@ fun Preview_SimpleOkDialog_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_BasicDialog_InLightTheme() { +private fun Preview_BasicDialog_InLightTheme() { TangemTheme(isDark = false) { BasicDialogPreview() } @@ -127,7 +125,7 @@ fun Preview_BasicDialog_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_SimpleOkDialog_InDarkTheme() { +private fun Preview_SimpleOkDialog_InDarkTheme() { TangemTheme(isDark = true) { SimpleOkDialogPreview() } @@ -135,7 +133,7 @@ fun Preview_SimpleOkDialog_InDarkTheme() { @Preview(showBackground = true) @Composable -fun Preview_BasicDialog_InDarkTheme() { +private fun Preview_BasicDialog_InDarkTheme() { TangemTheme(isDark = true) { BasicDialogPreview() } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt b/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt index 9067f17fd4..0c4c0c3610 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/ResizableText.kt @@ -16,10 +16,10 @@ import androidx.compose.ui.unit.sp @Composable fun ResizableText( text: String, + fontSizeRange: FontSizeRange, modifier: Modifier = Modifier, color: Color = Color.Unspecified, style: TextStyle = LocalTextStyle.current, - fontSizeRange: FontSizeRange, ) { val fontSizeValue = remember { mutableStateOf(fontSizeRange.max.value) } val readyToDraw = remember { mutableStateOf(false) } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/SuccessScreen.kt b/core/ui/src/main/java/com/tangem/core/ui/components/SuccessScreen.kt index ce91939f5e..af3482b826 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/SuccessScreen.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/SuccessScreen.kt @@ -46,15 +46,15 @@ import com.tangem.core.ui.res.TangemTheme */ @Composable fun ResultScreenContent( - modifier: Modifier = Modifier, resultMessage: String, + onButtonClick: () -> Unit, + modifier: Modifier = Modifier, @StringRes title: Int = R.string.common_success, resultColor: Color = TangemTheme.colors.icon.accent, @DrawableRes icon: Int = R.drawable.ic_check_24, @DrawableRes secondaryButtonIcon: Int? = null, @StringRes secondaryButtonText: Int? = null, onSecondaryButtonClick: (() -> Unit)? = null, - onButtonClick: () -> Unit, ) { Column( modifier = modifier @@ -92,8 +92,6 @@ fun ResultScreenContent( secondaryButtonText = secondaryButtonText, secondaryButtonIcon = secondaryButtonIcon, onSecondaryButtonClick = onSecondaryButtonClick, - modifier = Modifier - .fillMaxWidth(), ) SpacerH12() } @@ -142,23 +140,22 @@ fun SuccessImage( @Composable private fun SecondaryButtonForResultScreen( - modifier: Modifier = Modifier, @StringRes secondaryButtonText: Int, + onSecondaryButtonClick: () -> Unit, @DrawableRes secondaryButtonIcon: Int? = null, - onSecondaryButtonClick: (() -> Unit), ) { if (secondaryButtonIcon != null) { SecondaryButtonIconLeft( text = stringResource(id = secondaryButtonText), icon = painterResource(id = secondaryButtonIcon), onClick = onSecondaryButtonClick, - modifier = modifier, + modifier = Modifier.fillMaxWidth(), ) } else { SecondaryButton( text = stringResource(id = secondaryButtonText), onClick = onSecondaryButtonClick, - modifier = modifier, + modifier = Modifier.fillMaxWidth(), ) } } @@ -177,7 +174,7 @@ private fun SuccessScreenPreview() { @Preview(showBackground = true) @Composable -fun Preview_SuccessScreenContent_InLightTheme() { +private fun Preview_SuccessScreenContent_InLightTheme() { TangemTheme(isDark = false) { SuccessScreenPreview() } @@ -185,7 +182,7 @@ fun Preview_SuccessScreenContent_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_SuccessScreenContent_InDarkTheme() { +private fun Preview_SuccessScreenContent_InDarkTheme() { TangemTheme(isDark = true) { SuccessScreenPreview() } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt b/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt index d047f34cc2..6b9df80601 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/TextFields.kt @@ -50,9 +50,9 @@ import com.tangem.core.ui.res.TangemTypography * */ @Composable fun OutlineTextField( - modifier: Modifier = Modifier, value: TextFieldValue, onValueChange: (TextFieldValue) -> Unit, + modifier: Modifier = Modifier, label: String? = null, placeholder: String? = null, caption: String? = null, @@ -82,10 +82,10 @@ fun OutlineTextField( @Suppress("LongMethod") @Composable private fun TangemTextField( - modifier: Modifier = Modifier, value: TextFieldValue, singleLine: Boolean, onValueChange: (TextFieldValue) -> Unit, + modifier: Modifier = Modifier, label: String? = null, placeholder: String? = null, caption: String? = null, @@ -331,6 +331,7 @@ internal data class TangemTextFieldColors( return rememberUpdatedState(if (isError) errorCursorColor else cursorColor) } + @Suppress("TopLevelComposableFunctions") @Composable fun captionColor(enabled: Boolean, isError: Boolean): State { return rememberUpdatedState( diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/Warnings.kt b/core/ui/src/main/java/com/tangem/core/ui/components/Warnings.kt index 0b0968581c..275531f94f 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/Warnings.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/Warnings.kt @@ -25,13 +25,11 @@ import com.tangem.core.ui.res.TangemTheme */ @Composable fun WarningCard( - modifier: Modifier = Modifier, title: String, description: String, icon: @Composable (() -> Unit)? = null, ) { WarningCardSurface( - modifier = modifier, content = { WarningBody( title = title, @@ -54,14 +52,12 @@ fun WarningCard( */ @Composable fun ClickableWarningCard( - modifier: Modifier = Modifier, title: String, description: String, icon: @Composable (() -> Unit)? = null, onClick: () -> Unit, ) { WarningCardSurface( - modifier = modifier, content = { WarningBody(title = title, description = description, icon = icon) { SpacerW12() @@ -88,14 +84,12 @@ fun ClickableWarningCard( */ @Composable fun RefreshableWaringCard( - modifier: Modifier = Modifier, title: String, description: String, icon: @Composable (() -> Unit)? = null, onClick: () -> Unit, ) { WarningCardSurface( - modifier = modifier, content = { WarningBody(title = title, description = description, icon = icon) { SpacerW12() @@ -114,14 +108,12 @@ fun RefreshableWaringCard( @Composable private fun WarningBody( - modifier: Modifier = Modifier, title: String, description: String, icon: @Composable (() -> Unit)? = null, additionalContent: @Composable () -> Unit = {}, ) { IconWithTitleAndDescription( - modifier = modifier, title = title, description = description, additionalContent = additionalContent, @@ -136,7 +128,6 @@ private fun WarningBody( @Composable private fun WarningCardSurface( - modifier: Modifier = Modifier, onClick: (() -> Unit)? = null, content: @Composable () -> Unit, ) { @@ -144,7 +135,7 @@ private fun WarningCardSurface( shape = RoundedCornerShape(TangemTheme.dimens.size12), color = TangemTheme.colors.background.primary, elevation = TangemTheme.dimens.elevation2, - modifier = modifier.clickable( + modifier = Modifier.clickable( enabled = onClick != null, onClick = onClick ?: {}, ), @@ -158,7 +149,7 @@ private fun WarningCardSurface( // region Preview @Composable -fun WarningsPreview() { +private fun WarningsPreview() { Column(modifier = Modifier.fillMaxWidth()) { WarningCard( title = "Exchange rate has expired", @@ -181,7 +172,7 @@ fun WarningsPreview() { @Preview(showBackground = true) @Composable -fun Preview_Warning_InLightTheme() { +private fun Preview_Warning_InLightTheme() { TangemTheme(isDark = false) { WarningsPreview() } @@ -189,7 +180,7 @@ fun Preview_Warning_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_Warning_InDarkTheme() { +private fun Preview_Warning_InDarkTheme() { TangemTheme(isDark = true) { WarningsPreview() } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithAdditionalButtons.kt b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithAdditionalButtons.kt index 8594141486..1b910ca269 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithAdditionalButtons.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithAdditionalButtons.kt @@ -2,7 +2,7 @@ package com.tangem.core.ui.components.appbar import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material.Icon @@ -35,7 +35,7 @@ fun AppBarWithAdditionalButtons( Box( modifier = Modifier .fillMaxWidth() - .height(TangemTheme.dimens.size56) + .heightIn(TangemTheme.dimens.size56) .padding(all = TangemTheme.dimens.spacing16), ) { if (startButton != null) { @@ -72,7 +72,7 @@ fun AppBarWithAdditionalButtons( @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithAdditionalButtons_InLightTheme() { +private fun Preview_AppBarWithAdditionalButtons_InLightTheme() { TangemTheme(isDark = false) { AppBarWithAdditionalButtons( text = "Tangem", @@ -90,7 +90,7 @@ fun Preview_AppBarWithAdditionalButtons_InLightTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithAdditionalButtons_InDarkTheme() { +private fun Preview_AppBarWithAdditionalButtons_InDarkTheme() { TangemTheme(isDark = true) { AppBarWithAdditionalButtons( text = "Tangem", @@ -108,7 +108,7 @@ fun Preview_AppBarWithAdditionalButtons_InDarkTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithOnlyStartButtons_InLightTheme() { +private fun Preview_AppBarWithOnlyStartButtons_InLightTheme() { TangemTheme(isDark = false) { AppBarWithAdditionalButtons( text = "Tangem", @@ -122,7 +122,7 @@ fun Preview_AppBarWithOnlyStartButtons_InLightTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithOnlyStartButtons_InDarkTheme() { +private fun Preview_AppBarWithOnlyStartButtons_InDarkTheme() { TangemTheme(isDark = true) { AppBarWithAdditionalButtons( text = "Tangem", @@ -136,7 +136,7 @@ fun Preview_AppBarWithOnlyStartButtons_InDarkTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithOnlyEndButtons_InLightTheme() { +private fun Preview_AppBarWithOnlyEndButtons_InLightTheme() { TangemTheme(isDark = false) { AppBarWithAdditionalButtons( text = "Tangem", @@ -150,7 +150,7 @@ fun Preview_AppBarWithOnlyEndButtons_InLightTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun Preview_AppBarWithOnlyEndButtons_InDarkTheme() { +private fun Preview_AppBarWithOnlyEndButtons_InDarkTheme() { TangemTheme(isDark = true) { AppBarWithAdditionalButtons( text = "Tangem", diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithBackButton.kt b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithBackButton.kt index 384bdd6e14..855fcbbc34 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithBackButton.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithBackButton.kt @@ -30,9 +30,9 @@ import com.tangem.core.ui.res.TangemTheme */ @Composable fun AppBarWithBackButton( + onBackClick: () -> Unit, text: String? = null, @DrawableRes iconRes: Int? = null, - onBackClick: () -> Unit, ) { Row( modifier = Modifier @@ -63,7 +63,7 @@ fun AppBarWithBackButton( @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun PreviewAppBarWithBackButtonInLightTheme() { +private fun PreviewAppBarWithBackButtonInLightTheme() { TangemTheme(isDark = false) { AppBarWithBackButton(text = "Title", onBackClick = {}) } @@ -71,7 +71,7 @@ fun PreviewAppBarWithBackButtonInLightTheme() { @Preview(widthDp = 360, heightDp = 56, showBackground = true) @Composable -fun PreviewAppBarWithBackButtonInDarkTheme() { +private fun PreviewAppBarWithBackButtonInDarkTheme() { TangemTheme(isDark = true) { AppBarWithBackButton(text = "Title", onBackClick = {}) } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithSearch.kt b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithSearch.kt index 4d147b65fc..dfd9fba0e0 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithSearch.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/appbar/AppBarWithSearch.kt @@ -45,8 +45,8 @@ import com.tangem.core.ui.res.TangemTheme * @param expandedInitially whether the search is expanded on launch * @param tint tint for most of the visual elements of toolbar * @param onBackClick action when close button is clicked - * @param onSearchChanged action when search is modified - * @param onSearchDisplayClosed action when search is closed + * @param onSearchChange action when search is modified + * @param onSearchDisplayClose action when search is closed * * @see Unit, + onSearchChange: (String) -> Unit, + onSearchDisplayClose: () -> Unit, title: String? = null, placeholderSearchText: String = "", expandedInitially: Boolean = false, tint: Color = TangemTheme.colors.text.primary1, - onBackClick: () -> Unit, - onSearchChanged: (String) -> Unit, - onSearchDisplayClosed: () -> Unit, ) { val (expanded, onExpandedChanged) = remember { mutableStateOf(expandedInitially) } - Crossfade(targetState = expanded) { isSearchFieldVisible -> if (isSearchFieldVisible) { ExpandedSearchView( placeholderSearchText = placeholderSearchText, - onSearchChanged = onSearchChanged, - onSearchDisplayClosed = onSearchDisplayClosed, - onExpandedChanged = onExpandedChanged, - modifier = modifier, + onSearchChange = onSearchChange, + onSearchDisplayClose = onSearchDisplayClose, + onExpandedChange = onExpandedChanged, tint = tint, ) } else { CollapsedSearchView( title = title, onBackClick = onBackClick, - onExpandedChanged = onExpandedChanged, - modifier = modifier, + onExpandedChange = onExpandedChanged, tint = tint, ) } @@ -92,14 +88,13 @@ fun ExpandableSearchView( @Composable private fun CollapsedSearchView( - modifier: Modifier = Modifier, - title: String? = null, onBackClick: () -> Unit, - onExpandedChanged: (Boolean) -> Unit, + onExpandedChange: (Boolean) -> Unit, + title: String? = null, tint: Color = TangemTheme.colors.background.primary, ) { Row( - modifier = modifier + modifier = Modifier .background(TangemTheme.colors.background.primary) .padding(TangemTheme.dimens.spacing16) .fillMaxWidth(), @@ -128,7 +123,7 @@ private fun CollapsedSearchView( tint = tint, contentDescription = null, modifier = Modifier - .clickable { onExpandedChanged(true) }, + .clickable { onExpandedChange(true) }, ) } } @@ -136,10 +131,9 @@ private fun CollapsedSearchView( @Composable private fun ExpandedSearchView( placeholderSearchText: String, - onSearchChanged: (String) -> Unit, - onSearchDisplayClosed: () -> Unit, - onExpandedChanged: (Boolean) -> Unit, - modifier: Modifier = Modifier, + onSearchChange: (String) -> Unit, + onSearchDisplayClose: () -> Unit, + onExpandedChange: (Boolean) -> Unit, tint: Color = TangemTheme.colors.background.primary, ) { val focusManager = LocalFocusManager.current @@ -152,7 +146,7 @@ private fun ExpandedSearchView( var textFieldValue by remember { mutableStateOf(TextFieldValue("", TextRange("".length))) } Row( - modifier = modifier + modifier = Modifier .background(TangemTheme.colors.background.primary) .fillMaxWidth(), horizontalArrangement = Arrangement.Start, @@ -160,8 +154,8 @@ private fun ExpandedSearchView( ) { IconButton( onClick = { - onExpandedChanged(false) - onSearchDisplayClosed() + onExpandedChange(false) + onSearchDisplayClose() }, ) { Icon( @@ -174,7 +168,7 @@ private fun ExpandedSearchView( value = textFieldValue, onValueChange = { textFieldValue = it - onSearchChanged(it.text) + onSearchChange(it.text) }, singleLine = true, modifier = Modifier @@ -200,29 +194,29 @@ private fun ExpandedSearchView( @Preview @Composable -fun CollapsedSearchViewPreview() { +private fun CollapsedSearchViewPreview() { TangemTheme { ExpandableSearchView( title = "Choose Token", onBackClick = {}, placeholderSearchText = "Search", - onSearchChanged = {}, - onSearchDisplayClosed = {}, + onSearchChange = {}, + onSearchDisplayClose = {}, ) } } @Preview @Composable -fun ExpandedSearchViewPreview() { +private fun ExpandedSearchViewPreview() { TangemTheme { ExpandableSearchView( title = "Choose Token", onBackClick = {}, placeholderSearchText = "Search", - onSearchChanged = {}, + onSearchChange = {}, expandedInitially = true, - onSearchDisplayClosed = {}, + onSearchDisplayClose = {}, ) } } diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt index 35dab6bca0..f4759a6ed8 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeBottomSheetFragment.kt @@ -52,6 +52,7 @@ abstract class ComposeBottomSheetFragment : BottomSheetDialogFragme setContent { TangemTheme { ScreenContent( + state = provideState().value, modifier = Modifier .fillMaxWidth() .let { @@ -61,19 +62,20 @@ abstract class ComposeBottomSheetFragment : BottomSheetDialogFragme color = TangemTheme.colors.background.plain, shape = TangemTheme.shapes.bottomSheet, ), - state = provideState().value, ) } } } } + @Suppress("TopLevelComposableFunctions") @Composable protected abstract fun provideState(): State + @Suppress("TopLevelComposableFunctions") @Composable protected abstract fun ScreenContent( - modifier: Modifier, state: ScreenState, + modifier: Modifier, ) } \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt index 863f22f185..6b6865094a 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/fragments/ComposeFragment.kt @@ -36,22 +36,21 @@ abstract class ComposeFragment : Fragment() { } ScreenContent( + state = provideState().value, modifier = Modifier .fillMaxSize() .background(color = backgroundColor), - state = provideState().value, ) } } } } + @Suppress("TopLevelComposableFunctions") @Composable protected abstract fun provideState(): State + @Suppress("TopLevelComposableFunctions") @Composable - protected abstract fun ScreenContent( - modifier: Modifier, - state: ScreenState, - ) + protected abstract fun ScreenContent(state: ScreenState, modifier: Modifier) } \ No newline at end of file diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementBottomSheetContent.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementBottomSheetContent.kt index cb652db965..f1e6813e12 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementBottomSheetContent.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementBottomSheetContent.kt @@ -63,7 +63,7 @@ private fun AgreementHtmlView(url: String) { @Preview @Composable -fun Preview_AgreementBottomSheet_InLightTheme() { +private fun Preview_AgreementBottomSheet_InLightTheme() { TangemTheme(isDark = false) { AgreementBottomSheetContent(url = "https://tangem.com/en/") } @@ -71,7 +71,7 @@ fun Preview_AgreementBottomSheet_InLightTheme() { @Preview @Composable -fun Preview_AgreementBottomSheet_InDarkTheme() { +private fun Preview_AgreementBottomSheet_InDarkTheme() { TangemTheme(isDark = true) { AgreementBottomSheetContent(url = "https://tangem.com/en/") } diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementText.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementText.kt index 57cba8a1dd..c143b3b4e5 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementText.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/AgreementText.kt @@ -19,7 +19,7 @@ import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.referral.presentation.R @Composable -internal fun AgreementText(@StringRes firstPartResId: Int, onClicked: () -> Unit) { +internal fun AgreementText(@StringRes firstPartResId: Int, onClick: () -> Unit) { val agreementText = annotatedAgreementString(firstPart = stringResource(firstPartResId)) ClickableText( text = agreementText, @@ -31,7 +31,7 @@ internal fun AgreementText(@StringRes firstPartResId: Int, onClicked: () -> Unit onClick = { val clickableSpanStyle = requireNotNull(agreementText.spanStyles.getOrNull(1)) if (it in clickableSpanStyle.start..clickableSpanStyle.end) { - onClicked() + onClick() } }, ) @@ -54,20 +54,20 @@ private fun annotatedAgreementString(firstPart: String): AnnotatedString { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_AgreementText_InLightTheme() { +private fun Preview_AgreementText_InLightTheme() { TangemTheme(isDark = false) { Box(modifier = Modifier.background(TangemTheme.colors.background.primary)) { - AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClicked = {}) + AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClick = {}) } } } @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_AgreementText_InDarkTheme() { +private fun Preview_AgreementText_InDarkTheme() { TangemTheme(isDark = true) { Box(modifier = Modifier.background(TangemTheme.colors.background.primary)) { - AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClicked = {}) + AgreementText(firstPartResId = R.string.referral_tos_not_enroled_prefix, onClick = {}) } } } \ No newline at end of file diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/NonParticipateBottomBlock.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/NonParticipateBottomBlock.kt index c7ade39eb0..78a8239dc0 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/NonParticipateBottomBlock.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/NonParticipateBottomBlock.kt @@ -12,37 +12,37 @@ import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.referral.presentation.R @Composable -internal fun NonParticipateBottomBlock(onAgreementClicked: () -> Unit, onParticipateClicked: () -> Unit) { +internal fun NonParticipateBottomBlock(onAgreementClick: () -> Unit, onParticipateClick: () -> Unit) { Column { AgreementText( firstPartResId = R.string.referral_tos_not_enroled_prefix, - onClicked = onAgreementClicked, + onClick = onAgreementClick, ) PrimaryEndIconButton( modifier = Modifier.padding(all = TangemTheme.dimens.spacing16), text = stringResource(id = R.string.referral_button_participate), iconResId = R.drawable.ic_tangem_24, - onClicked = onParticipateClicked, + onClick = onParticipateClick, ) } } @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_NonParticipateBottomBlock_InLightTheme() { +private fun Preview_NonParticipateBottomBlock_InLightTheme() { TangemTheme(isDark = false) { Column(Modifier.background(TangemTheme.colors.background.primary)) { - NonParticipateBottomBlock(onAgreementClicked = {}, onParticipateClicked = {}) + NonParticipateBottomBlock(onAgreementClick = {}, onParticipateClick = {}) } } } @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_NonParticipateBottomBlock_InDarkTheme() { +private fun Preview_NonParticipateBottomBlock_InDarkTheme() { TangemTheme(isDark = true) { Column(Modifier.background(TangemTheme.colors.background.primary)) { - NonParticipateBottomBlock(onAgreementClicked = {}, onParticipateClicked = {}) + NonParticipateBottomBlock(onAgreementClick = {}, onParticipateClick = {}) } } } \ No newline at end of file diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ParticipateBottomBlock.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ParticipateBottomBlock.kt index 5d32a2adc4..169fb81271 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ParticipateBottomBlock.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ParticipateBottomBlock.kt @@ -36,10 +36,10 @@ internal fun ParticipateBottomBlock( purchasedWalletCount: Int, code: String, shareLink: String, - onAgreementClicked: () -> Unit, - showCopySnackbar: () -> Unit, - onCopyClicked: () -> Unit, - onShareClicked: () -> Unit, + onAgreementClick: () -> Unit, + onShowCopySnackbar: () -> Unit, + onCopyClick: () -> Unit, + onShareClick: () -> Unit, ) { Column( modifier = Modifier @@ -62,11 +62,11 @@ internal fun ParticipateBottomBlock( AdditionalButtons( code = code, shareLink = shareLink, - showCopySnackbar = showCopySnackbar, - onCopyClicked = onCopyClicked, - onShareClicked = onShareClicked, + onShowCopySnackbar = onShowCopySnackbar, + onCopyClick = onCopyClick, + onShareClick = onShareClick, ) - AgreementText(firstPartResId = R.string.referral_tos_enroled_prefix, onClicked = onAgreementClicked) + AgreementText(firstPartResId = R.string.referral_tos_enroled_prefix, onClick = onAgreementClick) } } @@ -106,9 +106,9 @@ private fun PersonalCodeCard(code: String) { private fun AdditionalButtons( code: String, shareLink: String, - showCopySnackbar: () -> Unit, - onCopyClicked: () -> Unit, - onShareClicked: () -> Unit, + onShowCopySnackbar: () -> Unit, + onCopyClick: () -> Unit, + onShareClick: () -> Unit, ) { val clipboardManager = LocalClipboardManager.current val hapticFeedback = LocalHapticFeedback.current @@ -121,11 +121,11 @@ private fun AdditionalButtons( modifier = Modifier.weight(1f), text = stringResource(id = R.string.common_copy), iconResId = R.drawable.ic_copy_24, - onClicked = { - onCopyClicked.invoke() + onClick = { + onCopyClick.invoke() hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) clipboardManager.setText(AnnotatedString(code)) - showCopySnackbar() + onShowCopySnackbar() }, ) @@ -134,8 +134,8 @@ private fun AdditionalButtons( modifier = Modifier.weight(1f), text = stringResource(id = R.string.common_share), iconResId = R.drawable.ic_share_24, - onClicked = { - onShareClicked.invoke() + onClick = { + onShareClick.invoke() hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) context.shareText(context.getString(R.string.referral_share_link, shareLink)) }, @@ -155,17 +155,17 @@ private fun Context.shareText(text: String) { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ParticipateBottomBlock_InLightTheme() { +private fun Preview_ParticipateBottomBlock_InLightTheme() { TangemTheme(isDark = false) { Column(Modifier.background(TangemTheme.colors.background.primary)) { ParticipateBottomBlock( purchasedWalletCount = 3, code = "x4JdK", shareLink = "", - onAgreementClicked = {}, - showCopySnackbar = {}, - onCopyClicked = {}, - onShareClicked = {}, + onAgreementClick = {}, + onShowCopySnackbar = {}, + onCopyClick = {}, + onShareClick = {}, ) } } @@ -173,17 +173,17 @@ fun Preview_ParticipateBottomBlock_InLightTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ParticipateBottomBlock_InDarkTheme() { +private fun Preview_ParticipateBottomBlock_InDarkTheme() { TangemTheme(isDark = true) { Column(Modifier.background(TangemTheme.colors.background.primary)) { ParticipateBottomBlock( purchasedWalletCount = 3, code = "x4JdK", shareLink = "", - onAgreementClicked = {}, - showCopySnackbar = {}, - onCopyClicked = {}, - onShareClicked = {}, + onAgreementClick = {}, + onShowCopySnackbar = {}, + onCopyClick = {}, + onShareClick = {}, ) } } diff --git a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt index 9a16507f78..5017af8c99 100644 --- a/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt +++ b/features/referral/presentation/src/main/java/com/tangem/feature/referral/ui/ReferralScreen.kt @@ -101,7 +101,7 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) { content = { ReferralContent( stateHolder = stateHolder, - onAgreementClicked = { + onAgreementClick = { stateHolder.analytics.onAgreementClicked.invoke() coroutineScope.launch { if (bottomSheetScaffoldState.bottomSheetState.isCollapsed) { @@ -119,7 +119,7 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) { @OptIn(ExperimentalFoundationApi::class) @Composable -private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClicked: () -> Unit) { +private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClick: () -> Unit) { val isCopyButtonPressed = remember { mutableStateOf(false) } Box { @@ -140,8 +140,8 @@ private fun ReferralContent(stateHolder: ReferralStateHolder, onAgreementClicked item { ReferralInfo( stateHolder = stateHolder, - onAgreementClicked = onAgreementClicked, - showCopySnackbar = { isCopyButtonPressed.value = true }, + onAgreementClick = onAgreementClick, + onShowCopySnackbar = { isCopyButtonPressed.value = true }, ) } } @@ -179,8 +179,8 @@ private fun Header() { @Composable private fun ReferralInfo( stateHolder: ReferralStateHolder, - onAgreementClicked: () -> Unit, - showCopySnackbar: () -> Unit, + onAgreementClick: () -> Unit, + onShowCopySnackbar: () -> Unit, ) { when (val state = stateHolder.referralInfoState) { is ReferralInfoState.ParticipantContent -> { @@ -189,18 +189,18 @@ private fun ReferralInfo( purchasedWalletCount = state.purchasedWalletCount, code = state.code, shareLink = state.shareLink, - onAgreementClicked = onAgreementClicked, - showCopySnackbar = showCopySnackbar, - onCopyClicked = stateHolder.analytics.onCopyClicked, - onShareClicked = stateHolder.analytics.onShareClicked, + onAgreementClick = onAgreementClick, + onShowCopySnackbar = onShowCopySnackbar, + onCopyClick = stateHolder.analytics.onCopyClicked, + onShareClick = stateHolder.analytics.onShareClicked, ) } is ReferralInfoState.NonParticipantContent -> { Conditions(state = state) VerticalSpacer(spaceResId = R.dimen.spacing44) NonParticipateBottomBlock( - onAgreementClicked = onAgreementClicked, - onParticipateClicked = state.onParticipateClicked, + onAgreementClick = onAgreementClick, + onParticipateClick = state.onParticipateClicked, ) } is ReferralInfoState.Loading -> { @@ -465,7 +465,7 @@ private fun BoxScope.CopySnackbarHost(isCopyButtonPressed: MutableState @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_Participant_InLightTheme() { +private fun Preview_ReferralScreen_Participant_InLightTheme() { TangemTheme(isDark = false) { ReferralScreen( stateHolder = ReferralStateHolder( @@ -493,7 +493,7 @@ fun Preview_ReferralScreen_Participant_InLightTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_Participant_InDarkTheme() { +private fun Preview_ReferralScreen_Participant_InDarkTheme() { TangemTheme(isDark = true) { ReferralScreen( stateHolder = ReferralStateHolder( @@ -521,7 +521,7 @@ fun Preview_ReferralScreen_Participant_InDarkTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_NonParticipant_InLightTheme() { +private fun Preview_ReferralScreen_NonParticipant_InLightTheme() { TangemTheme(isDark = false) { ReferralScreen( stateHolder = ReferralStateHolder( @@ -546,7 +546,7 @@ fun Preview_ReferralScreen_NonParticipant_InLightTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_NonParticipant_InDarkTheme() { +private fun Preview_ReferralScreen_NonParticipant_InDarkTheme() { TangemTheme(isDark = true) { ReferralScreen( stateHolder = ReferralStateHolder( @@ -571,7 +571,7 @@ fun Preview_ReferralScreen_NonParticipant_InDarkTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_Loading_InLightTheme() { +private fun Preview_ReferralScreen_Loading_InLightTheme() { TangemTheme(isDark = false) { ReferralScreen( stateHolder = ReferralStateHolder( @@ -590,7 +590,7 @@ fun Preview_ReferralScreen_Loading_InLightTheme() { @Preview(widthDp = 360, showBackground = true) @Composable -fun Preview_ReferralScreen_Loading_InDarkTheme() { +private fun Preview_ReferralScreen_Loading_InDarkTheme() { TangemTheme(isDark = true) { ReferralScreen( stateHolder = ReferralStateHolder( diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt index e81b1da59c..61c9aacf7c 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt @@ -88,10 +88,11 @@ fun SwapPermissionBottomSheetContent( SecondaryButton( text = stringResource(id = R.string.common_cancel), modifier = Modifier.fillMaxWidth(), - ) { - data?.cancelButton?.onClick?.invoke() - onCancel() - } + onClick = { + data?.cancelButton?.onClick?.invoke() + onCancel() + }, + ) SpacerH32() @@ -195,7 +196,7 @@ private fun FeeItem(fee: String) { @Preview @Composable -fun Preview_AgreementBottomSheet_InLightTheme() { +private fun Preview_AgreementBottomSheet_InLightTheme() { TangemTheme(isDark = false) { SwapPermissionBottomSheetContent(data = previewData) {} } @@ -203,7 +204,7 @@ fun Preview_AgreementBottomSheet_InLightTheme() { @Preview @Composable -fun Preview_AgreementBottomSheet_InDarkTheme() { +private fun Preview_AgreementBottomSheet_InDarkTheme() { TangemTheme(isDark = true) { SwapPermissionBottomSheetContent(data = previewData) {} } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt index 9dad0f4277..52b0e8963c 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt @@ -51,11 +51,7 @@ import com.tangem.feature.swap.presentation.R @Suppress("LongMethod") @Composable -internal fun SwapScreenContent( - modifier: Modifier = Modifier, - state: SwapStateHolder, - onPermissionWarningClick: () -> Unit, -) { +internal fun SwapScreenContent(state: SwapStateHolder, onPermissionWarningClick: () -> Unit) { val keyboard by keyboardAsState() Box( @@ -65,7 +61,7 @@ internal fun SwapScreenContent( ) { Column( - modifier = modifier + modifier = Modifier .fillMaxWidth() .background(color = TangemTheme.colors.background.primary) .verticalScroll(rememberScrollState()) @@ -308,7 +304,7 @@ private val state = SwapStateHolder( @Preview @Composable -fun SwapScreenContentPreview() { +private fun SwapScreenContentPreview() { TangemTheme(isDark = false) { SwapScreenContent(state = state) {} } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt index 19d8aa0a0a..2c210be72d 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSelectTokenScreen.kt @@ -49,8 +49,8 @@ fun SwapSelectTokenScreen(state: SwapSelectTokenStateHolder, onBack: () -> Unit) title = stringResource(R.string.swapping_token_list_your_title), onBackClick = onBack, placeholderSearchText = stringResource(id = R.string.search_tokens_title), - onSearchChanged = state.onSearchEntered, - onSearchDisplayClosed = { state.onSearchEntered("") }, + onSearchChange = state.onSearchEntered, + onSearchDisplayClose = { state.onSearchEntered("") }, ) }, ) @@ -85,7 +85,7 @@ private fun ListOfTokens(state: SwapSelectTokenStateHolder, modifier: Modifier = } @Composable -private fun TokenItem(token: TokenToSelect, onTokenClick: (String) -> Unit) { +private fun TokenItem(token: TokenToSelect, onTokenClick: () -> Unit) { Row( modifier = Modifier .fillMaxWidth() @@ -94,7 +94,7 @@ private fun TokenItem(token: TokenToSelect, onTokenClick: (String) -> Unit) { bottom = TangemTheme.dimens.spacing14, end = TangemTheme.dimens.spacing16, ) - .clickable { onTokenClick(token.id) }, + .clickable(onClick = onTokenClick), verticalAlignment = Alignment.CenterVertically, ) { TokenIcon(token = token) @@ -209,7 +209,7 @@ private val tokenNotAvailable = token.copy(available = false) @Preview @Composable -fun TokenScreenPreview() { +private fun TokenScreenPreview() { SwapSelectTokenScreen( state = SwapSelectTokenStateHolder( listOf(token, tokenNotAvailable, token), {}, {}, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt index f2bc335b92..1d2d30df86 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapSuccessScreen.kt @@ -48,7 +48,7 @@ private val state = SwapSuccessStateHolder( @Preview(showBackground = true) @Composable -fun Preview_Success_InLightTheme() { +private fun Preview_Success_InLightTheme() { TangemTheme(isDark = false) { SwapSuccessScreen(state) {} } @@ -56,7 +56,7 @@ fun Preview_Success_InLightTheme() { @Preview(showBackground = true) @Composable -fun Preview_Success_InDarkTheme() { +private fun Preview_Success_InDarkTheme() { TangemTheme(isDark = true) { SwapSuccessScreen(state) {} } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt index daaa05fc22..1e20e35e79 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/TransactionCard.kt @@ -63,7 +63,6 @@ import com.valentinilk.shimmer.shimmer @Suppress("LongParameterList") @Composable fun TransactionCard( - modifier: Modifier = Modifier, type: TransactionCardType, balance: String, amount: String?, @@ -74,7 +73,6 @@ fun TransactionCard( onChangeTokenClick: (() -> Unit)? = null, ) { Card( - modifier = modifier, shape = RoundedCornerShape(TangemTheme.dimens.radius12), backgroundColor = TangemTheme.colors.background.primary, elevation = TangemTheme.dimens.elevation2, @@ -211,7 +209,7 @@ private fun Content( is TransactionCardType.SendCard -> { AutoSizeTextField( amount = amount ?: "1", - onAmoutChanged = { type.onAmountChanged(it) }, + onAmountChange = { type.onAmountChanged(it) }, ) } } @@ -247,10 +245,7 @@ private fun Content( @Suppress("MagicNumber") @Composable -private fun AutoSizeTextField( - amount: String, - onAmoutChanged: (String) -> Unit, -) { +private fun AutoSizeTextField(amount: String, onAmountChange: (String) -> Unit) { val focusManager = LocalFocusManager.current val textFieldFocusRequester = remember { FocusRequester() } @@ -281,7 +276,7 @@ private fun AutoSizeTextField( BasicTextField( value = amount, onValueChange = { - onAmoutChanged(it) + onAmountChange(it) }, singleLine = true, modifier = Modifier @@ -338,7 +333,7 @@ fun Token( .crossfade(true) .build(), loading = { TokenImageShimmer(modifier = tokenImageModifier) }, - error = { CurrencyPlaceholderIcon(modifier = tokenImageModifier, tokenCurrency) }, + error = { CurrencyPlaceholderIcon(modifier = tokenImageModifier, id = tokenCurrency) }, contentDescription = null, ) @@ -412,7 +407,7 @@ private fun TokenImageShimmer( @Preview(widthDp = 328, heightDp = 116, showBackground = true) @Composable -fun Preview_SwapMainCard_InLightTheme() { +private fun Preview_SwapMainCard_InLightTheme() { TangemTheme(isDark = false) { TransactionCardPreview() } @@ -420,7 +415,7 @@ fun Preview_SwapMainCard_InLightTheme() { @Preview(widthDp = 328, heightDp = 116, showBackground = true) @Composable -fun Preview_SwapMainCard_InDarkTheme() { +private fun Preview_SwapMainCard_InDarkTheme() { TangemTheme(isDark = true) { TransactionCardPreview() }