Updated on 2026-08-14

This commit is contained in:
Tangem 2023-04-07 20:39:24 +08:00
parent 069605e151
commit 36516c900f
234 changed files with 902 additions and 1618 deletions

View file

@ -18,7 +18,8 @@ import java.util.concurrent.Executors
/**
[REDACTED_AUTHOR]
*/
interface GlobalAnalyticsEventHandler : AnalyticsEventHandler,
interface GlobalAnalyticsEventHandler :
AnalyticsEventHandler,
AnalyticsHandlerHolder,
AnalyticsFilterHolder,
ParamsInterceptorHolder

View file

@ -4,15 +4,9 @@ package com.tangem.core.analytics.api
[REDACTED_AUTHOR]
*/
interface EventLogger {
fun logEvent(
event: String,
params: Map<String, String> = emptyMap(),
)
fun logEvent(event: String, params: Map<String, String> = emptyMap())
}
interface ErrorEventLogger {
fun logErrorEvent(
error: Throwable,
params: Map<String, String> = emptyMap(),
)
fun logErrorEvent(error: Throwable, params: Map<String, String> = emptyMap())
}

View file

@ -22,10 +22,7 @@ interface AnalyticsHandler : AnalyticsEventHandler {
}
interface ErrorEventHandler {
fun send(
error: Throwable,
params: Map<String, String> = emptyMap(),
)
fun send(error: Throwable, params: Map<String, String> = emptyMap())
}
interface AnalyticsHandlerHolder {

View file

@ -33,10 +33,7 @@ interface TangemTechApi {
): CoinsResponse
@GET("rates")
suspend fun getRates(
@Query("currencyId") currencyId: String,
@Query("coinIds") coinIds: String,
): RatesResponse
suspend fun getRates(@Query("currencyId") currencyId: String, @Query("coinIds") coinIds: String): RatesResponse
@GET("currencies")
suspend fun getCurrencyList(): CurrenciesResponse

View file

@ -43,11 +43,13 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
override fun resetToDefault(name: String) {
when (name) {
IS_SENDING_TO_PAY_ID_ENABLED -> config =
config.copy(isSendingToPayIdEnabled = defaultConfig.isSendingToPayIdEnabled)
IS_SENDING_TO_PAY_ID_ENABLED ->
config =
config.copy(isSendingToPayIdEnabled = defaultConfig.isSendingToPayIdEnabled)
IS_TOP_UP_ENABLED -> config = config.copy(isTopUpEnabled = defaultConfig.isTopUpEnabled)
IS_CREATING_TWIN_CARDS_ALLOWED -> config =
config.copy(isCreatingTwinCardsAllowed = defaultConfig.isCreatingTwinCardsAllowed)
IS_CREATING_TWIN_CARDS_ALLOWED ->
config =
config.copy(isCreatingTwinCardsAllowed = defaultConfig.isCreatingTwinCardsAllowed)
}
}

View file

@ -16,6 +16,6 @@ sealed class RequestHeader(vararg pairs: Pair<String, String>) {
class AuthenticationHeader(authProvider: AuthProvider) : RequestHeader(
"card_public_key" to authProvider.getCardPublicKey(),
"card_id" to authProvider.getCardId()
"card_id" to authProvider.getCardId(),
)
}

View file

@ -42,12 +42,7 @@ 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, enabled: Boolean = true) {
TangemButton(
modifier = modifier,
text = text,
@ -84,12 +79,7 @@ fun TextButtonIconLeft(
}
@Composable
fun WarningTextButton(
text: String,
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
) {
fun WarningTextButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
TangemButton(
modifier = modifier,
text = text,
@ -239,12 +229,7 @@ fun SecondaryButtonIconLeft(
// region Other
@Composable
fun SelectorButton(
text: String,
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
) {
fun SelectorButton(text: String, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true) {
TangemButton(
modifier = modifier,
text = text,
@ -461,9 +446,7 @@ private open class TangemButtonColors(
// region Preview
@Composable
private fun PrimaryButtonSample(
modifier: Modifier = Modifier,
) {
private fun PrimaryButtonSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.primary),
@ -537,9 +520,7 @@ private fun PrimaryButtonPreview_Dark() {
}
@Composable
private fun SecondaryButtonSample(
modifier: Modifier = Modifier,
) {
private fun SecondaryButtonSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.primary),
@ -613,9 +594,7 @@ private fun SecondaryButtonPreview_Dark() {
}
@Composable
private fun TextButtonSample(
modifier: Modifier = Modifier,
) {
private fun TextButtonSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.primary),

View file

@ -43,11 +43,7 @@ import com.valentinilk.shimmer.shimmer
* >Figma component</a>
*/
@Composable
fun SmallInfoCard(
startText: String,
endText: String,
isLoading: Boolean = false,
) {
fun SmallInfoCard(startText: String, endText: String, isLoading: Boolean = false) {
Surface(
shape = RoundedCornerShape(TangemTheme.dimens.radius12),
color = TangemTheme.colors.background.primary,
@ -74,12 +70,7 @@ fun SmallInfoCard(
* >Figma component</a>
*/
@Composable
fun SmallInfoCardWithDisclaimer(
startText: String,
endText: String,
disclaimer: String,
isLoading: Boolean = false,
) {
fun SmallInfoCardWithDisclaimer(startText: String, endText: String, disclaimer: String, isLoading: Boolean = false) {
Surface(
shape = RoundedCornerShape(TangemTheme.dimens.radius12),
color = TangemTheme.colors.background.primary,
@ -106,12 +97,7 @@ fun SmallInfoCardWithDisclaimer(
* >Figma component</a>
*/
@Composable
fun SmallInfoCardWithWarning(
startText: String,
endText: String,
warningText: String,
disclaimer: String? = null,
) {
fun SmallInfoCardWithWarning(startText: String, endText: String, warningText: String, disclaimer: String? = null) {
Surface(
shape = RoundedCornerShape(TangemTheme.dimens.size12),
color = TangemTheme.colors.background.primary,
@ -274,12 +260,7 @@ fun IconWithTitleAndDescription(
// region elements
@Composable
private fun CardInfoBox(
startText: String,
endText: String,
disclaimer: String?,
isLoading: Boolean = false,
) {
private fun CardInfoBox(startText: String, endText: String, disclaimer: String?, isLoading: Boolean = false) {
val isOpened = remember { mutableStateOf(false) }
Column {
Row(

View file

@ -159,10 +159,7 @@ private fun TangemDialog(
}
@Composable
private fun DialogContent(
type: DialogType,
modifier: Modifier = Modifier,
) {
private fun DialogContent(type: DialogType, modifier: Modifier = Modifier) {
Column(
modifier = modifier,
verticalArrangement = Arrangement.Center,
@ -196,11 +193,7 @@ private fun DialogContent(
}
@Composable
private fun DialogButtons(
confirmButton: DialogButton,
dismissButton: DialogButton?,
modifier: Modifier = Modifier,
) {
private fun DialogButtons(confirmButton: DialogButton, dismissButton: DialogButton?, modifier: Modifier = Modifier) {
Row(
modifier = modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(
@ -315,9 +308,7 @@ private fun Preview_BasicDialog_InDarkTheme() {
}
@Composable
private fun WarningBasicDialogSample(
modifier: Modifier = Modifier,
) {
private fun WarningBasicDialogSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier,
) {
@ -349,9 +340,7 @@ private fun WarningBasicDialogPreview_Dark() {
}
@Composable
private fun TextInputDialogSample(
modifier: Modifier = Modifier,
) {
private fun TextInputDialogSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier,
) {

View file

@ -153,21 +153,19 @@ private class BoundCounter(
private var _nextCharWidth: Float? = null
private var invalidCharsCount = 0
fun widthWithNextChar(): Float =
width + nextCharWidth()
fun widthWithNextChar(): Float = width + nextCharWidth()
private fun nextCharWidth(): Float =
_nextCharWidth ?: run {
var boundingBox: Rect
// invalidCharsCount fixes this bug: https://issuetracker.google.com/issues/197146630
invalidCharsCount--
do {
boundingBox = textLayoutResult
.getBoundingBox(charPosition(string.count() + ++invalidCharsCount))
} while (boundingBox.right == 0f)
_nextCharWidth = boundingBox.width
boundingBox.width
}
private fun nextCharWidth(): Float = _nextCharWidth ?: run {
var boundingBox: Rect
// invalidCharsCount fixes this bug: https://issuetracker.google.com/issues/197146630
invalidCharsCount--
do {
boundingBox = textLayoutResult
.getBoundingBox(charPosition(string.count() + ++invalidCharsCount))
} while (boundingBox.right == 0f)
_nextCharWidth = boundingBox.width
boundingBox.width
}
fun addNextChar() {
string += text[charPosition(string.count())]

View file

@ -106,10 +106,7 @@ fun ResultScreenContent(
}
@Composable
fun SuccessImage(
resultColor: Color,
@DrawableRes icon: Int,
) {
fun SuccessImage(resultColor: Color, @DrawableRes icon: Int) {
Box(
modifier = Modifier
.background(

View file

@ -6,9 +6,7 @@ import com.google.accompanist.systemuicontroller.SystemUiController
import com.google.accompanist.systemuicontroller.rememberSystemUiController
@Composable
fun SystemBarsEffect(
block: SystemUiController.() -> Unit,
) {
fun SystemBarsEffect(block: SystemUiController.() -> Unit) {
val systemUiController = rememberSystemUiController()
SideEffect { block(systemUiController) }
}

View file

@ -180,7 +180,7 @@ private fun TangemTextField(
}
private enum class TangemTextFieldSize {
Default
Default,
}
@Composable
@ -305,11 +305,7 @@ internal data class TangemTextFieldColors(
}
@Composable
override fun labelColor(
enabled: Boolean,
error: Boolean,
interactionSource: InteractionSource,
): State<Color> {
override fun labelColor(enabled: Boolean, error: Boolean, interactionSource: InteractionSource): State<Color> {
val focused by interactionSource.collectIsFocusedAsState()
val targetValue = when {
@ -347,9 +343,7 @@ internal data class TangemTextFieldColors(
// region Preview
@Composable
private fun OutlineTextFieldSample(
modifier: Modifier = Modifier,
) {
private fun OutlineTextFieldSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.primary)

View file

@ -24,11 +24,7 @@ import com.tangem.core.ui.res.TangemTheme
* >Figma component</a>
*/
@Composable
fun WarningCard(
title: String,
description: String,
icon: @Composable (() -> Unit)? = null,
) {
fun WarningCard(title: String, description: String, icon: @Composable (() -> Unit)? = null) {
WarningCardSurface(
content = {
WarningBody(
@ -128,10 +124,7 @@ private fun WarningBody(
@OptIn(ExperimentalMaterialApi::class)
@Composable
private fun WarningCardSurface(
onClick: (() -> Unit)? = null,
content: @Composable () -> Unit,
) {
private fun WarningCardSurface(onClick: (() -> Unit)? = null, content: @Composable () -> Unit) {
Card(
shape = RoundedCornerShape(TangemTheme.dimens.size12),
backgroundColor = TangemTheme.colors.background.primary,

View file

@ -18,9 +18,7 @@ import com.tangem.core.ui.res.TangemTheme
* [Show in Figma](https://www.figma.com/file/17JyRbuUEZ42DluaFEuGQk/Atoms?node-id=135%3A25&t=Jo68S6ilyewVU8MV-4)
* */
@Composable
fun Hand(
modifier: Modifier = Modifier,
) {
fun Hand(modifier: Modifier = Modifier) {
Box(
modifier = modifier
.padding(vertical = TangemTheme.dimens.spacing8)
@ -41,9 +39,7 @@ fun Hand(
// region Preview
@Composable
private fun HandSample(
modifier: Modifier = Modifier,
) {
private fun HandSample(modifier: Modifier = Modifier) {
Column(
modifier = modifier
.background(TangemTheme.colors.background.primary)

View file

@ -26,11 +26,7 @@ abstract class ComposeBottomSheetFragment<ScreenState> : BottomSheetDialogFragme
override fun getTheme(): Int = R.style.AppTheme_TransparentBottomSheetDialog
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return createComposeView(inflater.context)
}

View file

@ -7,11 +7,7 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
abstract class ComposeFragment<ScreenState> : Fragment(), ComposeScreen<ScreenState> {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return createComposeView(inflater.context)
}
}

View file

@ -40,8 +40,5 @@ internal interface ComposeScreen<ScreenState> {
@Suppress("TopLevelComposableFunctions")
@Composable
fun ScreenContent(
state: ScreenState,
modifier: Modifier,
)
fun ScreenContent(state: ScreenState, modifier: Modifier)
}

View file

@ -17,7 +17,7 @@ enum class ButtonColorType(val lightColor: Color, val darkColor: Color) {
SECONDARY(lightColor = Light2, darkColor = Dark5),
DISABLED(lightColor = Light2, darkColor = Dark6),
POSITIVE(lightColor = Meadow, darkColor = Meadow),
POSITIVE_DISABLED(lightColor = MagicMint, darkColor = DarkGreen)
POSITIVE_DISABLED(lightColor = MagicMint, darkColor = DarkGreen),
}
@Composable

View file

@ -24,7 +24,7 @@ enum class IconColorType(val lightColor: Color, val darkColor: Color) {
INACTIVE(lightColor = Light4, darkColor = Dark4),
ACCENT(lightColor = Meadow, darkColor = Meadow),
WARNING(lightColor = Amaranth, darkColor = Amaranth),
ATTENTION(lightColor = Tangerine, darkColor = Tangerine)
ATTENTION(lightColor = Tangerine, darkColor = Tangerine),
}
@Composable

View file

@ -69,10 +69,7 @@ object TangemTheme {
@Stable
@Composable
private fun materialThemeColors(
colors: TangemColors,
isDark: Boolean,
): Colors {
private fun materialThemeColors(colors: TangemColors, isDark: Boolean): Colors {
return Colors(
primary = colors.background.primary,
primaryVariant = colors.background.secondary,

View file

@ -24,7 +24,7 @@ enum class TextColorType(val lightColor: Color, val darkColor: Color) {
ACCENT(lightColor = Meadow, darkColor = Meadow),
WARNING(lightColor = Amaranth, darkColor = Amaranth),
ATTENTION(lightColor = Tangerine, darkColor = Tangerine),
CONSTANT_WHITE(lightColor = White, darkColor = White)
CONSTANT_WHITE(lightColor = White, darkColor = White),
}
@Composable

View file

@ -25,11 +25,7 @@ class Debouncer {
private var debounceJob: Job? = null
fun debounce(
waitMs: Long = 300L,
coroutineScope: CoroutineScope,
destinationFunction: () -> Unit,
) {
fun debounce(waitMs: Long = 300L, coroutineScope: CoroutineScope, destinationFunction: () -> Unit) {
debounceJob?.cancel()
debounceJob = coroutineScope.launch {
delay(waitMs)

View file

@ -22,7 +22,7 @@ package com.tangem.utils.detekt
AnnotationTarget.TYPE,
AnnotationTarget.EXPRESSION,
AnnotationTarget.FILE,
AnnotationTarget.TYPEALIAS
AnnotationTarget.TYPEALIAS,
)
@Retention(AnnotationRetention.SOURCE)
annotation class UnusedRequiredComponent(val description: String)