Updated on 2026-08-14

This commit is contained in:
Tangem 2024-01-10 15:56:05 +03:00
commit 8bba8e1afa
825 changed files with 9837 additions and 22210 deletions

View file

@ -5,13 +5,13 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.ButtonColors
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.tooling.preview.Preview
import com.tangem.core.ui.R
import com.tangem.core.ui.components.buttons.common.*
import com.tangem.core.ui.components.buttons.common.TangemButtonsDefaults
import com.tangem.core.ui.res.TangemTheme
// region TextButton
@ -19,7 +19,13 @@ import com.tangem.core.ui.res.TangemTheme
* [Show in Figma](https://www.figma.com/file/14ISV23YB1yVW1uNVwqrKv/Android?node-id=97%3A103&t=TmfD6UBHPg9uYfev-4)
* */
@Composable
fun TextButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
fun TextButton(
text: String,
onClick: () -> Unit,
modifier: Modifier = Modifier,
colors: ButtonColors = TangemButtonsDefaults.defaultTextButtonColors,
enabled: Boolean = true,
) {
TangemButton(
modifier = modifier,
text = text,
@ -27,7 +33,7 @@ fun TextButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier,
onClick = onClick,
enabled = enabled,
showProgress = false,
colors = TangemButtonsDefaults.defaultTextButtonColors,
colors = colors,
size = TangemButtonSize.Text,
)
}
@ -41,6 +47,7 @@ fun TextButtonIconStart(
@DrawableRes iconResId: Int,
onClick: () -> Unit,
modifier: Modifier = Modifier,
colors: ButtonColors = TangemButtonsDefaults.defaultTextButtonColors,
enabled: Boolean = true,
) {
TangemButton(
@ -50,7 +57,7 @@ fun TextButtonIconStart(
onClick = onClick,
enabled = enabled,
showProgress = false,
colors = TangemButtonsDefaults.defaultTextButtonColors,
colors = colors,
size = TangemButtonSize.Text,
)
}

View file

@ -7,9 +7,7 @@ import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.RadioButton
import androidx.compose.material.RadioButtonDefaults
import androidx.compose.material.Text
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.remember
@ -24,6 +22,8 @@ import androidx.compose.ui.window.Dialog
import androidx.compose.ui.window.DialogProperties
import com.tangem.core.ui.R
import com.tangem.core.ui.components.SelctorDialogParamsProvider.SelectorDialogParams
import com.tangem.core.ui.components.buttons.common.TangemButtonsDefaults
import com.tangem.core.ui.components.fields.SimpleDialogTextField
import com.tangem.core.ui.res.TangemTheme
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
@ -118,6 +118,34 @@ fun TextInputDialog(
)
}
@Composable
fun TextInputDialog(
fieldValue: String,
confirmButton: DialogButton,
onDismissDialog: () -> Unit,
onValueChange: (String) -> Unit,
textFieldParams: AdditionalTextInputDialogParams,
title: String? = null,
dismissButton: DialogButton? = null,
isDismissable: Boolean = true,
) {
TangemDialog(
type = DialogType.SimpleTextInput(
value = fieldValue,
onValueChange = onValueChange,
params = textFieldParams,
),
confirmButton = confirmButton,
onDismissDialog = onDismissDialog,
title = title,
dismissButton = dismissButton,
properties = DialogProperties(
dismissOnBackPress = isDismissable,
dismissOnClickOutside = isDismissable,
),
)
}
@Composable
fun SelectorDialog(
selectedItemIndex: Int,
@ -164,6 +192,7 @@ data class AdditionalTextInputDialogParams(
val caption: String? = null,
val enabled: Boolean = true,
val isError: Boolean = false,
val errorText: String? = null,
)
// region Defaults
@ -194,6 +223,7 @@ private fun TangemDialog(
style = when (type) {
is DialogType.Message -> TangemTheme.typography.h2
is DialogType.TextInput -> TangemTheme.typography.h3
is DialogType.SimpleTextInput -> TangemTheme.typography.h3
is DialogType.Selector -> TangemTheme.typography.h2
},
color = TangemTheme.colors.text.primary1,
@ -231,6 +261,16 @@ private fun DialogContent(type: DialogType, modifier: Modifier = Modifier) {
color = TangemTheme.colors.text.secondary,
)
}
is DialogType.SimpleTextInput -> {
SimpleDialogTextField(
value = type.value,
onValueChange = type.onValueChange,
isError = type.params.isError,
errorText = type.params.errorText,
isEnabled = type.params.enabled,
placeholder = type.params.placeholder,
)
}
is DialogType.TextInput -> {
OutlineTextField(
modifier = Modifier
@ -305,6 +345,7 @@ private fun DialogButton(
text = text,
enabled = enabled,
onClick = onClick,
colors = TangemButtonsDefaults.positiveButtonColors,
)
}
}
@ -371,6 +412,12 @@ private sealed class DialogType {
val params: AdditionalTextInputDialogParams = AdditionalTextInputDialogParams(),
) : DialogType()
data class SimpleTextInput(
val value: String,
val onValueChange: (String) -> Unit,
val params: AdditionalTextInputDialogParams = AdditionalTextInputDialogParams(),
) : DialogType()
data class Selector(
val selectedItemIndex: Int,
val items: ImmutableList<String>,

View file

@ -2,40 +2,18 @@
package com.tangem.core.ui.components
import androidx.annotation.DimenRes
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
@Composable
fun VerticalSpacer(@DimenRes spaceResId: Int) {
Spacer(modifier = Modifier.height(dimensionResource(id = spaceResId)))
}
@Composable
fun HorizontalSpacer(@DimenRes spaceResId: Int) {
Spacer(modifier = Modifier.width(dimensionResource(id = spaceResId)))
}
// region Horizontal
@Composable
fun SpacerH(height: Dp, modifier: Modifier = Modifier) {
Spacer(modifier = modifier.height(height))
}
@Composable
fun SpacerH2(modifier: Modifier = Modifier) {
SpacerH(2.dp, modifier)
}
@Composable
fun SpacerH4(modifier: Modifier = Modifier) {
SpacerH(4.dp, modifier)
@ -76,11 +54,6 @@ fun SpacerH32(modifier: Modifier = Modifier) {
SpacerH(32.dp, modifier)
}
@Composable
fun SpacerH50(modifier: Modifier = Modifier) {
SpacerH(50.dp, modifier)
}
// TODO: Refactor with context receivers
@Composable
fun ColumnScope.SpacerHMax(modifier: Modifier = Modifier) {
@ -146,36 +119,4 @@ fun SpacerW32(modifier: Modifier = Modifier) {
fun RowScope.SpacerWMax(modifier: Modifier = Modifier) {
Spacer(modifier = modifier.weight(1f))
}
// endregion Vertical
// region Size
@Composable
fun SpacerS(size: Dp, modifier: Modifier = Modifier) {
Spacer(modifier = modifier.size(size))
}
@Composable
fun SpacerS4(modifier: Modifier = Modifier) {
SpacerS(4.dp, modifier)
}
@Composable
fun SpacerS8(modifier: Modifier = Modifier) {
SpacerS(8.dp, modifier)
}
@Composable
fun SpacerS16(modifier: Modifier = Modifier) {
SpacerS(16.dp, modifier)
}
@Composable
fun SpacerS24(modifier: Modifier = Modifier) {
SpacerS(24.dp, modifier)
}
@Composable
fun SpacerS32(modifier: Modifier = Modifier) {
SpacerS(32.dp, modifier)
}
// endregion Size
// endregion Vertical

View file

@ -21,7 +21,7 @@ import kotlinx.coroutines.launch
@Composable
inline fun <reified T : TangemBottomSheetConfigContent> TangemBottomSheet(
config: TangemBottomSheetConfig,
contentColor: Color = TangemTheme.colors.background.primary,
containerColor: Color = TangemTheme.colors.background.primary,
crossinline content: @Composable ColumnScope.(T) -> Unit,
) {
var isVisible by remember { mutableStateOf(value = config.isShow) }
@ -31,9 +31,9 @@ inline fun <reified T : TangemBottomSheetConfigContent> TangemBottomSheet(
ModalBottomSheet(
onDismissRequest = config.onDismissRequest,
sheetState = sheetState,
containerColor = contentColor,
containerColor = containerColor,
shape = TangemTheme.shapes.bottomSheetLarge,
dragHandle = { TangemBottomSheetDraggableHeader(contentColor) },
dragHandle = { TangemBottomSheetDraggableHeader(color = containerColor) },
) {
content(config.content)
}

View file

@ -66,4 +66,14 @@ internal object TangemButtonsDefaults {
disabledBackgroundColor = Color.Transparent,
disabledContentColor = TangemTheme.colors.text.disabled,
)
val positiveButtonColors: ButtonColors
@Composable
@ReadOnlyComposable
get() = TangemButtonColors(
backgroundColor = Color.Transparent,
contentColor = TangemTheme.colors.text.accent,
disabledBackgroundColor = Color.Transparent,
disabledContentColor = TangemTheme.colors.text.disabled,
)
}

View file

@ -1,12 +1,12 @@
package com.tangem.core.ui.components.currency.tokenicon.converter
import com.tangem.common.Converter
import com.tangem.core.ui.components.currency.tokenicon.TokenIconState
import com.tangem.core.ui.extensions.getTintForTokenIcon
import com.tangem.core.ui.extensions.networkIconResId
import com.tangem.core.ui.extensions.tryGetBackgroundForTokenIcon
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.utils.converter.Converter
/**
* Converts [CryptoCurrencyStatus] to [TokenIconState]

View file

@ -0,0 +1,97 @@
package com.tangem.core.ui.components.fields
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.SolidColor
import com.tangem.core.ui.res.TangemTheme
/**
* A simple input field for a basic dialog with input
*
* [Show in Figma] (https://www.figma.com/file/14ISV23YB1yVW1uNVwqrKv/Android?type=design&node-id=48%3A30&mode=design
* &t=OsU3Nqsm9d8WDNuv-1)
*/
@Composable
fun SimpleDialogTextField(
value: String,
onValueChange: (String) -> Unit,
isError: Boolean = false,
errorText: String? = null,
isEnabled: Boolean = true,
placeholder: String? = null,
) {
val strokeColor = if (isError) {
TangemTheme.colors.icon.warning
} else {
TangemTheme.colors.stroke.primary
}
Column {
BasicTextField(
value = value,
onValueChange = onValueChange,
textStyle = TangemTheme.typography.body1,
cursorBrush = SolidColor(TangemTheme.colors.text.primary1),
singleLine = true,
readOnly = !isEnabled,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = TangemTheme.dimens.spacing24)
.drawBehind {
val strokeWidth = 2f
val y = size.height - strokeWidth / 2
drawLine(
strokeColor,
Offset(0f, y),
Offset(size.width, y),
strokeWidth,
)
},
decorationBox = { textValue ->
Box {
this@Column.AnimatedVisibility(
visible = value.isBlank() && placeholder != null,
enter = fadeIn(),
exit = fadeOut(),
) {
if (value.isBlank() && placeholder != null) {
Text(
text = placeholder,
style = TangemTheme.typography.body1,
color = TangemTheme.colors.text.disabled,
)
}
}
textValue()
}
},
)
AnimatedVisibility(
visible = errorText != null,
enter = fadeIn(),
exit = fadeOut(),
) {
if (errorText != null) {
Text(
text = errorText,
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.warning,
modifier = Modifier
.padding(
horizontal = TangemTheme.dimens.spacing24,
),
)
}
}
}
}

View file

@ -1,8 +1,10 @@
package com.tangem.core.ui.components.inputrow
import androidx.compose.animation.AnimatedContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment.Companion.CenterVertically
@ -48,6 +50,7 @@ fun InputRowRecipient(
error: TextReference? = null,
isError: Boolean = false,
showDivider: Boolean = false,
isLoading: Boolean = false,
) {
val (titleText, color) = if (isError && error != null) {
error to TangemTheme.colors.text.warning
@ -63,23 +66,36 @@ fun InputRowRecipient(
.fillMaxWidth()
.padding(TangemTheme.dimens.spacing12),
) {
Text(
text = titleText.resolveReference(),
style = TangemTheme.typography.caption2,
color = color,
)
AnimatedContent(targetState = titleText, label = "Title Change") {
Text(
text = it.resolveReference(),
style = TangemTheme.typography.caption2,
color = color,
)
}
Row(
modifier = Modifier
.padding(top = TangemTheme.dimens.spacing8),
) {
IdentIcon(
address = value,
AnimatedContent(
targetState = isLoading,
label = "Indicator Show Change",
modifier = Modifier
.align(CenterVertically)
.clip(RoundedCornerShape(TangemTheme.dimens.radius18))
.size(TangemTheme.dimens.size36)
.background(TangemTheme.colors.background.tertiary),
)
) { showIndicator ->
if (showIndicator) {
CircularProgressIndicator(
color = TangemTheme.colors.icon.informative,
modifier = Modifier
.padding(TangemTheme.dimens.spacing8),
)
} else {
IdentIcon(address = value)
}
}
SimpleTextField(
value = value,
placeholder = placeholder,
@ -115,6 +131,7 @@ private fun InputRowRecipientPreview_Light(
placeholder = TextReference.Res(R.string.send_optional_field),
error = TextReference.Str("Error"),
isError = value.isError,
isLoading = value.isLoading,
showDivider = true,
onValueChange = {},
onPasteClick = {},
@ -134,6 +151,7 @@ private fun InputRowRecipientPreview_Dark(
title = TextReference.Res(R.string.send_recipient),
placeholder = TextReference.Res(R.string.send_optional_field),
error = TextReference.Str("Error"),
isLoading = value.isLoading,
isError = value.isError,
showDivider = true,
onValueChange = {},
@ -146,6 +164,7 @@ private fun InputRowRecipientPreview_Dark(
private data class InputRowRecipientPreviewData(
val value: String,
val isError: Boolean,
val isLoading: Boolean = false,
)
private class InputRowRecipientPreviewDataProvider : PreviewParameterProvider<InputRowRecipientPreviewData> {
@ -161,6 +180,7 @@ private class InputRowRecipientPreviewDataProvider : PreviewParameterProvider<In
),
InputRowRecipientPreviewData(
value = "0x391316d97a07027a0702c8A002c8A0C25d8470",
isLoading = true,
isError = true,
),
)

View file

@ -50,6 +50,53 @@ fun getActiveIconRes(blockchainId: String): Int {
}
}
@Suppress("ComplexMethod")
@DrawableRes
fun getActiveIconResByNetworkId(networkId: String): Int {
return when (networkId) {
"arbitrum-one", "arbitrum-one/test" -> R.drawable.img_arbitrum_22
"avalanche", "avalanche-2", "avalanche/test", "avalanche-2/test" -> R.drawable.img_avalanche_22
"binance-smart-chain", "binance-smart-chain/test", "binancecoin", "binancecoin/test" -> R.drawable.img_bsc_22
"bitcoin", "bitcoin/test" -> R.drawable.img_btc_22
"bitcoin-cash", "bitcoin-cash/test" -> R.drawable.img_btc_cash_22
"litecoin", "litecoin/test" -> R.drawable.img_litecoin_22
"ethereum", "ethereum/test" -> R.drawable.img_eth_22
"ethereum-classic", "ethereum-classic/test" -> R.drawable.img_eth_classic_22
"rootstock" -> R.drawable.img_rsk_22
"cardano", "cardano/test" -> R.drawable.img_cardano_22
"tezos" -> R.drawable.img_tezos_22
"xrp", "ripple" -> R.drawable.img_xrp_22
"stellar", "stellar/test" -> R.drawable.img_stellar_22
"polygon-pos", "polygon-pos/test" -> R.drawable.img_polygon_22
"solana", "solana/test" -> R.drawable.img_solana_22
"fantom", "fantom/test" -> R.drawable.img_fantom_22
"dogecoin" -> R.drawable.img_dogecoin_22
"tron", "tron/test" -> R.drawable.img_tron_22
"xdai" -> R.drawable.img_gnosis_22
"ethereum-pow-iou", "ethereum-pow-iou/test" -> R.drawable.img_eth_pow_22
"ethereumfair" -> R.drawable.img_eth_fair_22
"polkadot", "polkadot/test" -> R.drawable.img_polkadot_22
"kusama" -> R.drawable.img_kusama_22
"optimistic-ethereum", "optimistic-ethereum/test" -> R.drawable.img_optimism_22
"dash" -> R.drawable.img_dash_22
"kaspa" -> R.drawable.img_kaspa_22
"the-open-network", "the-open-network/test" -> R.drawable.img_ton_22
"kava", "kava/test" -> R.drawable.img_kava_22
"ravencoin", "ravencoin/test" -> R.drawable.img_ravencoin_22
"cosmos", "cosmos/test" -> R.drawable.img_cosmos_22
"terra", "terra-luna" -> R.drawable.img_terra_22
"terra-2", "terra-luna-2" -> R.drawable.img_terra2_22
"cronos" -> R.drawable.img_cronos_22
"telos", "telos/test" -> R.drawable.img_telos_22
"aleph-zero", "aleph-zero/test" -> R.drawable.img_azero_22
"octaspace", "octaspace/test" -> R.drawable.img_octaspace_22
"chia", "chia/test" -> R.drawable.img_chia_22
"near-protocol", "near-protocol/test" -> R.drawable.img_near_22
"decimal", "decimal/test" -> R.drawable.img_decimal_22
else -> R.drawable.ic_alert_24
}
}
@Suppress("ComplexMethod")
@DrawableRes
fun getActiveIconResByCoinId(coinId: String): Int {
@ -139,4 +186,51 @@ fun getGreyedOutIconRes(blockchainId: String): Int {
"decimal", "decimal/test" -> R.drawable.ic_decimal_22
else -> R.drawable.ic_alert_24
}
}
@Suppress("ComplexMethod")
@DrawableRes
fun getGreyedOutIconResByNetworkId(networkId: String): Int {
return when (networkId) {
"arbitrum-one", "arbitrum-one/test" -> R.drawable.ic_arbitrum_22
"avalanche", "avalanche-2", "avalanche/test", "avalanche-2/test" -> R.drawable.ic_avalanche_22
"binance-smart-chain", "binance-smart-chain/test", "binancecoin", "binancecoin/test" -> R.drawable.ic_bsc_16
"bitcoin", "bitcoin/test" -> R.drawable.ic_bitcoin_16
"bitcoin-cash", "bitcoin-cash/test" -> R.drawable.ic_bitcoin_cash_16
"litecoin", "litecoin/test" -> R.drawable.ic_litecoin_22
"ethereum", "ethereum/test" -> R.drawable.ic_eth_16
"ethereum-classic", "ethereum-classic/test" -> R.drawable.ic_eth_16
"rootstock" -> R.drawable.ic_rsk_16
"cardano", "cardano/test" -> R.drawable.ic_cardano_16
"tezos" -> R.drawable.ic_tezos_16
"xrp", "ripple" -> R.drawable.ic_xrp_22
"stellar", "stellar/test" -> R.drawable.ic_stellar_16
"polygon-pos", "polygon-pos/test" -> R.drawable.ic_polygon_16
"solana", "solana/test" -> R.drawable.ic_solana_16
"fantom", "fantom/test" -> R.drawable.ic_fantom_22
"dogecoin" -> R.drawable.ic_dogecoin_16
"tron", "tron/test" -> R.drawable.ic_tron_22
"xdai" -> R.drawable.ic_gnosis_22
"ethereum-pow-iou", "ethereum-pow-iou/test" -> R.drawable.ic_ethereumpow_22
"ethereumfair" -> R.drawable.ic_ethereumfair_22
"polkadot", "polkadot/test" -> R.drawable.ic_polkadot_16
"kusama" -> R.drawable.ic_kusama_16
"optimistic-ethereum", "optimistic-ethereum/test" -> R.drawable.ic_optimism_22
"dash" -> R.drawable.ic_dash_22
"kaspa" -> R.drawable.ic_kaspa_22
"the-open-network", "the-open-network/test" -> R.drawable.ic_ton_22
"kava", "kava/test" -> R.drawable.ic_kava_22
"ravencoin", "ravencoin/test" -> R.drawable.ic_ravencoin_22
"cosmos", "cosmos/test" -> R.drawable.ic_cosmos_22
"terra", "terra-luna" -> R.drawable.ic_terra_22
"terra-2", "terra-luna-2" -> R.drawable.ic_terra2_22
"cronos" -> R.drawable.ic_cronos_22
"telos", "telos/test" -> R.drawable.ic_telos_22
"aleph-zero", "aleph-zero/test" -> R.drawable.ic_azero_22
"octaspace", "octaspace/test" -> R.drawable.ic_octaspace_22
"chia", "chia/test" -> R.drawable.ic_chia_22
"near-protocol", "near-protocol/test" -> R.drawable.ic_near_22
"decimal", "decimal/test" -> R.drawable.ic_decimal_22
else -> R.drawable.ic_alert_24
}
}

View file

@ -1,25 +0,0 @@
package com.tangem.core.ui.utils
import android.os.SystemClock
import android.view.View
/**
* Implementation of click listener for preventing multiple click events
*
* @property action action that called when a view has been clicked
*/
class OneTouchClickListener(private val action: () -> Unit) : View.OnClickListener {
private var lastClickTimeMs: Long = 0L
override fun onClick(v: View?) {
if (SystemClock.elapsedRealtime() - lastClickTimeMs > CLICK_DELAY_MS) {
lastClickTimeMs = SystemClock.elapsedRealtime()
action()
}
}
companion object {
private const val CLICK_DELAY_MS = 500L
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -1,27 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<group>
<clip-path android:pathData="M0,0h24v24h-24z" />
<path
android:fillColor="#000000"
android:pathData="M12,7m-1.25,0a1.25,1.25 0,1 1,2.5 0a1.25,1.25 0,1 1,-2.5 0" />
<path
android:fillColor="#00000000"
android:pathData="M14.5,9.5C15.881,8.119 15.881,5.881 14.5,4.5M9.5,9.5C8.119,8.119 8.119,5.881 9.5,4.5"
android:strokeWidth="2"
android:strokeColor="#000000" />
<path
android:fillColor="#00000000"
android:pathData="M17,12C19.761,9.239 19.761,4.761 17,2M7,12C4.239,9.239 4.239,4.761 7,2"
android:strokeWidth="2"
android:strokeColor="#000000" />
<path
android:fillColor="#00000000"
android:pathData="M12.485,12.121L22.577,22.213A1,1 51.198,0 1,22.577 23.627L17.627,28.577A1,1 128.802,0 1,16.213 28.577L6.121,18.485A1,1 0,0 1,6.121 17.071L11.071,12.121A1,1 77.649,0 1,12.485 12.121z"
android:strokeWidth="2"
android:strokeColor="#000000" />
</group>
</vector>

View file

@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,19C6,19.53 6.211,20.039 6.586,20.414C6.961,20.789 7.47,21 8,21H16C16.53,21 17.039,20.789 17.414,20.414C17.789,20.039 18,19.53 18,19V7H6V19ZM8,9H16V19H8V9ZM15.5,4L14.5,3H9.5L8.5,4H5V6H19V4H15.5Z"
android:fillColor="#000000"/>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

View file

@ -10,157 +10,154 @@
<path
android:fillColor="#F6F5FF"
android:pathData="M11,22C17.075,22 22,17.075 22,11C22,4.925 17.075,0 11,0C4.925,0 0,4.925 0,11C0,17.075 4.925,22 11,22Z" />
<group>
<clip-path android:pathData="M11,3.85L11,3.85A4.4,4.4 0,0 1,15.4 8.25L15.4,13.75A4.4,4.4 0,0 1,11 18.15L11,18.15A4.4,4.4 0,0 1,6.6 13.75L6.6,8.25A4.4,4.4 0,0 1,11 3.85z" />
<path android:pathData="M10.998,3.85L10.902,4.176V13.629L10.998,13.725L15.397,11.131L10.998,3.85Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="13.5"
android:endY="12.5"
android:startX="11.5"
android:startY="6.5"
android:type="linear">
<item
android:color="#FFE1F0F3"
android:offset="0" />
<item
android:color="#FFB3DBF5"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M10.998,3.85L6.6,11.131L10.998,13.725V9.136V3.85Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="6.5"
android:endY="11"
android:startX="10.75"
android:startY="4"
android:type="linear">
<item
android:color="#FFE1F0F3"
android:offset="0.161" />
<item
android:color="#FFA795F2"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#C6C7FA"
android:pathData="M10.998,14.556L10.944,14.622V17.989L10.998,18.147L15.4,11.963L10.998,14.556Z" />
<path
android:fillColor="#6E89D5"
android:pathData="M10.998,18.147V14.556L6.6,11.963L10.998,18.147Z" />
<path
android:fillColor="#F2F6F4"
android:pathData="M10.998,13.725L15.397,11.131L10.998,9.137V13.725Z" />
<path android:pathData="M6.6,11.131L10.998,13.725V9.137L6.6,11.131Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="9"
android:endY="12.5"
android:startX="11"
android:startY="9"
android:type="linear">
<item
android:color="#FFDDE1F9"
android:offset="0" />
<item
android:color="#FFD7D1FA"
android:offset="0.993" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#B2B6E9"
android:fillType="evenOdd"
android:pathData="M7.966,8.88C8.032,8.861 8.101,8.899 8.12,8.966L9.039,12.18L10.805,9.09C10.891,8.939 11.109,8.939 11.195,9.09L12.961,12.18L13.88,8.966C13.899,8.899 13.968,8.861 14.034,8.88C14.101,8.899 14.139,8.968 14.12,9.034L13.185,12.306C13.131,12.498 12.873,12.529 12.774,12.356L11,9.252L9.226,12.356C9.128,12.529 8.869,12.498 8.815,12.306L7.88,9.034C7.861,8.968 7.899,8.899 7.966,8.88Z" />
<path android:pathData="M11.75,9.1C11.75,9.514 11.414,9.85 11,9.85C10.586,9.85 10.25,9.514 10.25,9.1C10.25,8.686 10.586,8.35 11,8.35C11.414,8.35 11.75,8.686 11.75,9.1Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="11"
android:endY="9.85"
android:startX="11"
android:startY="8.35"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M8.6,8.75C8.6,9.164 8.264,9.5 7.85,9.5C7.435,9.5 7.1,9.164 7.1,8.75C7.1,8.336 7.435,8 7.85,8C8.264,8 8.6,8.336 8.6,8.75Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="7.85"
android:endY="9.5"
android:startX="7.85"
android:startY="8"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M14.899,8.75C14.899,9.164 14.564,9.5 14.149,9.5C13.735,9.5 13.399,9.164 13.399,8.75C13.399,8.336 13.735,8 14.149,8C14.564,8 14.899,8.336 14.899,8.75Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="14.149"
android:endY="9.5"
android:startX="14.149"
android:startY="8"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M13.6,12.35C13.6,12.764 13.264,13.1 12.85,13.1C12.435,13.1 12.1,12.764 12.1,12.35C12.1,11.936 12.435,11.6 12.85,11.6C13.264,11.6 13.6,11.936 13.6,12.35Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="12.85"
android:endY="13.1"
android:startX="12.85"
android:startY="11.6"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M9.899,12.35C9.899,12.764 9.564,13.1 9.149,13.1C8.735,13.1 8.399,12.764 8.399,12.35C8.399,11.936 8.735,11.6 9.149,11.6C9.564,11.6 9.899,11.936 9.899,12.35Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="9.149"
android:endY="13.1"
android:startX="9.149"
android:startY="11.6"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</group>
<path android:pathData="M10.998,3.85L10.902,4.176V13.629L10.998,13.725L15.397,11.131L10.998,3.85Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="13.5"
android:endY="12.5"
android:startX="11.5"
android:startY="6.5"
android:type="linear">
<item
android:color="#FFE1F0F3"
android:offset="0" />
<item
android:color="#FFB3DBF5"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M10.998,3.85L6.6,11.131L10.998,13.725V9.136V3.85Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="6.5"
android:endY="11"
android:startX="10.75"
android:startY="4"
android:type="linear">
<item
android:color="#FFE1F0F3"
android:offset="0.161" />
<item
android:color="#FFA795F2"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#C6C7FA"
android:pathData="M10.998,14.556L10.944,14.622V17.989L10.998,18.147L15.4,11.963L10.998,14.556Z" />
<path
android:fillColor="#6E89D5"
android:pathData="M10.998,18.147V14.556L6.6,11.963L10.998,18.147Z" />
<path
android:fillColor="#F2F6F4"
android:pathData="M10.998,13.725L15.397,11.131L10.998,9.137V13.725Z" />
<path android:pathData="M6.6,11.131L10.998,13.725V9.137L6.6,11.131Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="9"
android:endY="12.5"
android:startX="11"
android:startY="9"
android:type="linear">
<item
android:color="#FFDDE1F9"
android:offset="0" />
<item
android:color="#FFD7D1FA"
android:offset="0.993" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#B2B6E9"
android:fillType="evenOdd"
android:pathData="M7.966,8.88C8.032,8.861 8.101,8.899 8.12,8.966L9.039,12.18L10.805,9.09C10.891,8.939 11.109,8.939 11.195,9.09L12.961,12.18L13.88,8.966C13.899,8.899 13.968,8.861 14.034,8.88C14.101,8.899 14.139,8.968 14.12,9.034L13.185,12.306C13.131,12.498 12.873,12.529 12.774,12.356L11,9.252L9.226,12.356C9.128,12.529 8.869,12.498 8.815,12.306L7.88,9.034C7.861,8.968 7.899,8.899 7.966,8.88Z" />
<path android:pathData="M11.75,9.1C11.75,9.514 11.414,9.85 11,9.85C10.586,9.85 10.25,9.514 10.25,9.1C10.25,8.686 10.586,8.35 11,8.35C11.414,8.35 11.75,8.686 11.75,9.1Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="11"
android:endY="9.85"
android:startX="11"
android:startY="8.35"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M8.6,8.75C8.6,9.164 8.264,9.5 7.85,9.5C7.435,9.5 7.1,9.164 7.1,8.75C7.1,8.336 7.435,8 7.85,8C8.264,8 8.6,8.336 8.6,8.75Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="7.85"
android:endY="9.5"
android:startX="7.85"
android:startY="8"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M14.899,8.75C14.899,9.164 14.564,9.5 14.149,9.5C13.735,9.5 13.399,9.164 13.399,8.75C13.399,8.336 13.735,8 14.149,8C14.564,8 14.899,8.336 14.899,8.75Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="14.149"
android:endY="9.5"
android:startX="14.149"
android:startY="8"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M13.6,12.35C13.6,12.764 13.264,13.1 12.85,13.1C12.435,13.1 12.1,12.764 12.1,12.35C12.1,11.936 12.435,11.6 12.85,11.6C13.264,11.6 13.6,11.936 13.6,12.35Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="12.85"
android:endY="13.1"
android:startX="12.85"
android:startY="11.6"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path android:pathData="M9.899,12.35C9.899,12.764 9.564,13.1 9.149,13.1C8.735,13.1 8.399,12.764 8.399,12.35C8.399,11.936 8.735,11.6 9.149,11.6C9.564,11.6 9.899,11.936 9.899,12.35Z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="9.149"
android:endY="13.1"
android:startX="9.149"
android:startY="11.6"
android:type="linear">
<item
android:color="#FFC4C9F4"
android:offset="0" />
<item
android:color="#FF859ADC"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
</group>
</vector>

View file

@ -3,19 +3,19 @@
android:height="22dp"
android:viewportWidth="22"
android:viewportHeight="22">
<path
android:fillColor="#384182"
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
<group>
<clip-path android:pathData="M7,4h8.483v14h-8.483z" />
<clip-path android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z" />
<path
android:fillColor="#ffffff"
android:pathData="M10.678,15.359L7,18L9.335,7.256L10.678,15.359ZM10.752,15.335L12.992,15.364L9.421,7.298L10.752,15.335ZM13.203,15.157L14.917,8.802L14.269,8.008L13.203,15.157ZM12.376,5.194L9.554,7.095L13.678,5.76L12.376,5.194ZM12.021,5.194L10.269,5.252L10.012,5.983L12.021,5.194Z" />
android:pathData="M11,0L11,0A11,11 0,0 1,22 11L22,11A11,11 0,0 1,11 22L11,22A11,11 0,0 1,0 11L0,11A11,11 0,0 1,11 0z"
android:fillColor="#384182" />
<path
android:fillColor="#ffffff"
android:pathData="M14.145,7.764L9.628,7.145L13.698,5.864L14.145,7.764ZM13.074,5.376L13.322,4.702L12.021,4.136L13.074,5.376ZM13.45,4.636L13.744,5.694L15.479,5.236L13.45,4.636Z" />
android:pathData="M10.678,15.359L7,18L9.335,7.256L10.678,15.359ZM10.752,15.335L12.992,15.364L9.421,7.298L10.752,15.335ZM13.203,15.157L14.917,8.802L14.269,8.008L13.203,15.157ZM12.376,5.194L9.554,7.095L13.678,5.76L12.376,5.194ZM12.021,5.194L10.269,5.252L10.012,5.983L12.021,5.194Z"
android:fillColor="#ffffff" />
<path
android:fillColor="#ffffff"
android:pathData="M13.091,15.322L9.471,7.223L14.19,7.884L13.091,15.322ZM12.24,5.194L10.008,6.066L9.471,7.058L12.24,5.194ZM10.855,4.533L10.297,5.149L12.149,5.103L10.855,4.533ZM11.831,4.054L10.946,4.463L12.963,5.351L11.831,4.054ZM12.839,4H11.888L13.359,4.57L12.839,4ZM13.388,4.756L13.161,5.434L13.616,5.653L13.388,4.756Z" />
android:pathData="M14.145,7.764L9.628,7.145L13.698,5.864L14.145,7.764ZM13.074,5.376L13.322,4.702L12.021,4.136L13.074,5.376ZM13.45,4.636L13.744,5.694L15.479,5.236L13.45,4.636Z"
android:fillColor="#ffffff" />
<path
android:pathData="M13.091,15.322L9.471,7.223L14.19,7.884L13.091,15.322ZM12.24,5.194L10.008,6.066L9.471,7.058L12.24,5.194ZM10.855,4.533L10.297,5.149L12.149,5.103L10.855,4.533ZM11.831,4.054L10.946,4.463L12.963,5.351L11.831,4.054ZM12.839,4H11.888L13.359,4.57L12.839,4ZM13.388,4.756L13.161,5.434L13.616,5.653L13.388,4.756Z"
android:fillColor="#ffffff" />
</group>
</vector>