diff --git a/app/build.gradle b/app/build.gradle
index c22170efcc4..337774fada9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,7 +19,7 @@ android {
compileSdk compile_sdk_version
minSdkVersion min_sdk_version
targetSdkVersion compile_sdk_version
- versionCode 111
+ versionCode 114
versionName "0.40.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -275,7 +275,7 @@ dependencies {
implementation 'com.github.horizontalsystems:blockchain-fee-rate-kit-android:1d3bd49'
implementation 'com.github.horizontalsystems:binance-chain-kit-android:c1509a2'
implementation 'com.github.horizontalsystems:market-kit-android:636ca4d'
- implementation 'com.github.horizontalsystems:solana-kit-android:ec238b4'
+ implementation 'com.github.horizontalsystems:solana-kit-android:ce738d8'
implementation 'com.github.horizontalsystems:tron-kit-android:dc3dca7'
// Zcash SDK
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 76022b09285..b671a4a0c4b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -92,6 +92,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt
index e645e6ac42b..0479db62528 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/Extensions.kt
@@ -1,5 +1,8 @@
package io.horizontalsystems.bankwallet.core
+import android.app.Activity
+import android.content.Context
+import android.content.ContextWrapper
import android.content.Intent
import android.os.Parcelable
import android.widget.ImageView
@@ -224,4 +227,10 @@ suspend fun retryWhen(
delay(1000)
}
return block()
+}
+
+fun Context.findActivity(): Activity? = when (this) {
+ is Activity -> this
+ is ContextWrapper -> baseContext.findActivity()
+ else -> null
}
\ No newline at end of file
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt
index eba4b873021..66b25457695 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/Interfaces.kt
@@ -7,6 +7,7 @@ import io.horizontalsystems.bankwallet.core.adapters.zcash.ZcashAdapter
import io.horizontalsystems.bankwallet.core.managers.ActiveAccountState
import io.horizontalsystems.bankwallet.core.managers.Bep2TokenInfoService
import io.horizontalsystems.bankwallet.core.managers.EvmKitWrapper
+import io.horizontalsystems.bankwallet.core.managers.MiniAppRegisterService.RegisterAppResponse
import io.horizontalsystems.bankwallet.core.providers.FeeRates
import io.horizontalsystems.bankwallet.core.utils.AddressUriResult
import io.horizontalsystems.bankwallet.entities.Account
@@ -214,6 +215,7 @@ interface INetworkManager {
fun ping(host: String, url: String, isSafeCall: Boolean): Flowable
fun getEvmInfo(host: String, path: String): Single
suspend fun getBep2Tokens(): List
+ suspend fun registerApp(userId: String, referralCode: String): RegisterAppResponse
}
interface IClipboardManager {
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt b/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt
index 468e88ce96c..24d0a2a059b 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/core/managers/NetworkManager.kt
@@ -53,6 +53,11 @@ class NetworkManager : INetworkManager {
override suspend fun getBep2Tokens(): List {
return Bep2TokenInfoService.service().tokens()
}
+
+ override suspend fun registerApp(userId: String, referralCode: String)
+ : MiniAppRegisterService.RegisterAppResponse {
+ return MiniAppRegisterService.service().registerApp(userId, referralCode)
+ }
}
object ServiceFullTransaction {
@@ -145,6 +150,28 @@ object ServiceChangeLogs {
}
}
+object MiniAppRegisterService {
+ private val apiUrl = "https://be.unstoppable.money/"
+
+ fun service(): UnstoppableApi {
+ return APIClient.retrofit(apiUrl, 60)
+ .create(UnstoppableApi::class.java)
+ }
+
+ interface UnstoppableApi {
+ @GET("api/v1/tasks/registerApp")
+ suspend fun registerApp(
+ @Query("userId") userId: String,
+ @Query("referralCode") referralCode: String
+ ): RegisterAppResponse
+ }
+
+ data class RegisterAppResponse(
+ val success: Boolean,
+ val message: String
+ )
+}
+
object APIClient {
private val logger = HttpLoggingInterceptor().apply {
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt
new file mode 100644
index 00000000000..2f407df94be
--- /dev/null
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddSolanaTokenBlockchainService.kt
@@ -0,0 +1,50 @@
+package io.horizontalsystems.bankwallet.modules.addtoken
+
+import io.horizontalsystems.bankwallet.core.customCoinUid
+import io.horizontalsystems.bankwallet.modules.addtoken.AddTokenModule.IAddTokenBlockchainService
+import io.horizontalsystems.marketkit.models.Blockchain
+import io.horizontalsystems.marketkit.models.Coin
+import io.horizontalsystems.marketkit.models.Token
+import io.horizontalsystems.marketkit.models.TokenQuery
+import io.horizontalsystems.marketkit.models.TokenType
+import io.horizontalsystems.solanakit.core.TokenProvider
+import io.horizontalsystems.solanakit.models.Address
+import io.horizontalsystems.solanakit.transactions.SolanaFmService
+
+class AddSolanaTokenBlockchainService(
+ private val blockchain: Blockchain,
+ private val tokenProvider: TokenProvider
+) : IAddTokenBlockchainService {
+
+ override fun isValid(reference: String): Boolean {
+ return try {
+ Address(reference)
+ true
+ } catch (e: Throwable) {
+ false
+ }
+ }
+
+ override fun tokenQuery(reference: String): TokenQuery {
+ return TokenQuery(blockchain.type, TokenType.Spl(reference))
+ }
+
+ override suspend fun token(reference: String): Token {
+ val tokenInfo = tokenProvider.getTokenInfo(reference)
+ val tokenQuery = tokenQuery(reference)
+ return Token(
+ coin = Coin(tokenQuery.customCoinUid, tokenInfo.name, tokenInfo.symbol, tokenInfo.decimals),
+ blockchain = blockchain,
+ type = tokenQuery.tokenType,
+ decimals = tokenInfo.decimals
+ )
+ }
+
+ companion object {
+ fun getInstance(blockchain: Blockchain): AddSolanaTokenBlockchainService {
+ val tokenProvider = TokenProvider(SolanaFmService())
+ return AddSolanaTokenBlockchainService(blockchain, tokenProvider)
+ }
+ }
+
+}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt
index 5cfd2c8fdb4..caef99814b1 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/addtoken/AddTokenService.kt
@@ -33,6 +33,7 @@ class AddTokenService(
BlockchainType.Fantom,
BlockchainType.ArbitrumOne,
BlockchainType.Optimism,
+ BlockchainType.Solana
)
val blockchains = marketKit
@@ -52,6 +53,9 @@ class AddTokenService(
BlockchainType.Tron -> {
AddTronTokenBlockchainService.getInstance(blockchain)
}
+ BlockchainType.Solana -> {
+ AddSolanaTokenBlockchainService.getInstance(blockchain)
+ }
else -> AddEvmTokenBlockchainService.getInstance(blockchain)
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt
index 37542aa1a63..db138acc523 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/coin/overview/ui/Chart.kt
@@ -24,7 +24,6 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.Icon
-import androidx.compose.material.ScrollableTabRow
import androidx.compose.material.Tab
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
@@ -64,6 +63,7 @@ import io.horizontalsystems.bankwallet.ui.compose.ComposeAppTheme
import io.horizontalsystems.bankwallet.ui.compose.components.GraphicBars
import io.horizontalsystems.bankwallet.ui.compose.components.GraphicBarsWithNegative
import io.horizontalsystems.bankwallet.ui.compose.components.HSpacer
+import io.horizontalsystems.bankwallet.ui.compose.components.HsPeriodsScrollableTabRow
import io.horizontalsystems.bankwallet.ui.compose.components.RowUniversal
import io.horizontalsystems.bankwallet.ui.compose.components.TabButtonSecondaryTransparent
import io.horizontalsystems.bankwallet.ui.compose.components.TabItem
@@ -702,28 +702,31 @@ fun ChartTab(modifier: Modifier = Modifier, tabItems: List>, onSe
val tabIndex = tabItems.indexOfFirst { it.selected }
TabPeriod(modifier = modifier) {
- ScrollableTabRow(
+ HsPeriodsScrollableTabRow(
selectedTabIndex = tabIndex,
modifier = Modifier,
backgroundColor = Color.Transparent,
- edgePadding = 0.dp,
+ edgePadding = 12.dp,
indicator = {},
divider = {}
) {
tabItems.forEachIndexed { index, tabItem ->
val selected = tabIndex == index
-
- Tab(
- selected = selected,
- onClick = { },
+ Row(
+ modifier = Modifier.padding(horizontal = 4.dp)
) {
- TabButtonSecondaryTransparent(
- title = tabItem.title,
- onSelect = {
- onSelect.invoke(tabItem.item)
- },
- selected = selected
- )
+ Tab(
+ selected = selected,
+ onClick = { },
+ ) {
+ TabButtonSecondaryTransparent(
+ title = tabItem.title,
+ onSelect = {
+ onSelect.invoke(tabItem.item)
+ },
+ selected = selected
+ )
+ }
}
}
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt
index ab26473d100..51fcefd1bf2 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainFragment.kt
@@ -1,6 +1,5 @@
package io.horizontalsystems.bankwallet.modules.main
-import android.net.Uri
import android.os.Bundle
import androidx.activity.OnBackPressedCallback
import androidx.activity.compose.BackHandler
@@ -38,6 +37,7 @@ import androidx.navigation.NavController
import androidx.navigation.navGraphViewModels
import io.horizontalsystems.bankwallet.R
import io.horizontalsystems.bankwallet.core.BaseComposeFragment
+import io.horizontalsystems.bankwallet.core.findActivity
import io.horizontalsystems.bankwallet.core.managers.RateAppManager
import io.horizontalsystems.bankwallet.core.slideFromBottom
import io.horizontalsystems.bankwallet.core.slideFromRight
@@ -73,21 +73,17 @@ import kotlinx.coroutines.launch
class MainFragment : BaseComposeFragment() {
private val transactionsViewModel by navGraphViewModels(R.id.mainFragment) { TransactionsModule.Factory() }
- private var intentUri: Uri? = null
@Composable
override fun GetContent(navController: NavController) {
MainScreenWithRootedDeviceCheck(
transactionsViewModel = transactionsViewModel,
- deepLink = intentUri,
navController = navController,
)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- intentUri = activity?.intent?.data
- activity?.intent?.data = null //clear intent data
requireActivity().onBackPressedDispatcher.addCallback(
this,
@@ -103,14 +99,13 @@ class MainFragment : BaseComposeFragment() {
@Composable
private fun MainScreenWithRootedDeviceCheck(
transactionsViewModel: TransactionsViewModel,
- deepLink: Uri?,
navController: NavController,
rootedDeviceViewModel: RootedDeviceViewModel = viewModel(factory = RootedDeviceModule.Factory())
) {
if (rootedDeviceViewModel.showRootedDeviceWarning) {
RootedDeviceScreen { rootedDeviceViewModel.ignoreRootedDeviceWarning() }
} else {
- MainScreen(transactionsViewModel, deepLink, navController)
+ MainScreen(transactionsViewModel, navController)
}
}
@@ -118,17 +113,27 @@ private fun MainScreenWithRootedDeviceCheck(
@Composable
private fun MainScreen(
transactionsViewModel: TransactionsViewModel,
- deepLink: Uri?,
fragmentNavController: NavController,
- viewModel: MainViewModel = viewModel(factory = MainModule.Factory(deepLink))
+ viewModel: MainViewModel = viewModel(factory = MainModule.Factory())
) {
val uiState = viewModel.uiState
+ val context = LocalContext.current
val selectedPage = uiState.selectedTabIndex
val pagerState = rememberPagerState(initialPage = selectedPage) { uiState.mainNavItems.size }
val coroutineScope = rememberCoroutineScope()
val modalBottomSheetState = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
+ LaunchedEffect(Unit) {
+ context.findActivity()?.let { activity ->
+ activity.intent?.data?.let { uri ->
+ viewModel.handleDeepLink(uri)
+ activity.intent?.data = null //clear intent data
+ }
+ }
+ }
+
+
ModalBottomSheetLayout(
sheetState = modalBottomSheetState,
sheetBackgroundColor = ComposeAppTheme.colors.transparent,
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt
index c12e3dfc3a0..5c42615e66a 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainModule.kt
@@ -15,7 +15,7 @@ import kotlinx.parcelize.Parcelize
object MainModule {
- class Factory(private val wcDeepLink: Uri?) : ViewModelProvider.Factory {
+ class Factory : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun create(modelClass: Class): T {
return MainViewModel(
@@ -28,7 +28,7 @@ object MainModule {
App.localStorage,
App.wcSessionManager,
App.wcManager,
- wcDeepLink
+ App.networkManager,
) as T
}
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt
index 0f16fa15cd8..01b63ad02ec 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/main/MainViewModel.kt
@@ -1,12 +1,14 @@
package io.horizontalsystems.bankwallet.modules.main
import android.net.Uri
+import android.util.Log
import androidx.lifecycle.viewModelScope
import cash.z.ecc.android.sdk.ext.collectWith
import io.horizontalsystems.bankwallet.R
import io.horizontalsystems.bankwallet.core.IAccountManager
import io.horizontalsystems.bankwallet.core.IBackupManager
import io.horizontalsystems.bankwallet.core.ILocalStorage
+import io.horizontalsystems.bankwallet.core.INetworkManager
import io.horizontalsystems.bankwallet.core.IRateAppManager
import io.horizontalsystems.bankwallet.core.ITermsManager
import io.horizontalsystems.bankwallet.core.ViewModelUiState
@@ -41,7 +43,7 @@ class MainViewModel(
private val localStorage: ILocalStorage,
wcSessionManager: WCSessionManager,
private val wcManager: WCManager,
- deepLink: Uri?
+ private val networkManager: INetworkManager
) : ViewModelUiState() {
private var wcPendingRequestsCount = 0
@@ -79,7 +81,7 @@ class MainViewModel(
)
}
- private var selectedTabIndex = getTabIndexToOpen(deepLink)
+ private var selectedTabIndex = getTabIndexToOpen()
private var deeplinkPage: DeeplinkPage? = null
private var mainNavItems = navigationItems()
private var showRateAppDialog = false
@@ -248,14 +250,7 @@ class MainViewModel(
}
}
- private fun getTabIndexToOpen(deepLink: Uri? = null): Int {
- deepLink?.let {
- val (tab, deeplinkPageData) = getNavigationDataForDeeplink(it)
- deeplinkPage = deeplinkPageData
- currentMainTab = tab
- return items.indexOf(tab)
- }
-
+ private fun getTabIndexToOpen(): Int {
val tab = when {
relaunchBySettingChange -> {
relaunchBySettingChange = false
@@ -328,11 +323,34 @@ class MainViewModel(
}
}
+ deeplinkString.startsWith("https://unstoppable.money/referral") -> {
+ val userId: String? = deepLink.getQueryParameter("userId")
+ val referralCode: String? = deepLink.getQueryParameter("referralCode")
+ if (userId != null && referralCode != null) {
+ registerApp(userId, referralCode)
+ }
+ }
+
else -> {}
}
return Pair(tab, deeplinkPage)
}
+ private fun registerApp(userId: String, referralCode: String) {
+ viewModelScope.launch {
+ try {
+ val response = networkManager.registerApp(userId, referralCode)
+ if (response.success) {
+ //do nothing
+ } else {
+ Log.e("MainViewModel", "registerApp api fail message: ${response.message}")
+ }
+ } catch (e: Exception) {
+ Log.e("MainViewModel", "registerApp error: ", e)
+ }
+ }
+ }
+
private fun syncNavigation() {
mainNavItems = navigationItems()
if (selectedTabIndex >= mainNavItems.size) {
@@ -370,4 +388,12 @@ class MainViewModel(
emitState()
}
+ fun handleDeepLink(uri: Uri) {
+ val (tab, deeplinkPageData) = getNavigationDataForDeeplink(uri)
+ deeplinkPage = deeplinkPageData
+ currentMainTab = tab
+ selectedTabIndex = items.indexOf(tab)
+ syncNavigation()
+ }
+
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt
index 1b2957d6053..b33da1f6a92 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/market/platform/MarketPlatformFragment.kt
@@ -6,7 +6,6 @@ import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.Surface
@@ -192,37 +191,34 @@ private fun PlatformScreen(
@Composable
private fun HeaderContent(title: String, description: String, image: ImageSource) {
- Column {
- Row(
+ Row(
+ modifier = Modifier
+ .padding(horizontal = 16.dp)
+ .background(ComposeAppTheme.colors.tyler)
+ ) {
+ Column(
modifier = Modifier
- .height(100.dp)
- .padding(horizontal = 16.dp)
- .background(ComposeAppTheme.colors.tyler)
+ .padding(top = 12.dp, bottom = 16.dp)
+ .weight(1f)
) {
- Column(
- modifier = Modifier
- .padding(top = 12.dp)
- .weight(1f)
- ) {
- title3_leah(
- text = title,
- )
- subhead2_grey(
- text = description,
- modifier = Modifier.padding(top = 4.dp),
- maxLines = 3,
- overflow = TextOverflow.Ellipsis
- )
- }
- Image(
- painter = image.painter(),
- contentDescription = null,
- modifier = Modifier
- .align(Alignment.CenterVertically)
- .padding(start = 24.dp)
- .size(32.dp),
+ title3_leah(
+ text = title,
+ )
+ subhead2_grey(
+ text = description,
+ modifier = Modifier.padding(top = 4.dp),
+ maxLines = 3,
+ overflow = TextOverflow.Ellipsis
)
}
+ Image(
+ painter = image.painter(),
+ contentDescription = null,
+ modifier = Modifier
+ .align(Alignment.CenterVertically)
+ .padding(start = 24.dp)
+ .size(32.dp),
+ )
}
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt
index 277c05dabca..453a49854c3 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SuggestionsBar.kt
@@ -38,7 +38,7 @@ fun SuggestionsBar(
Text(
text = "$percent%",
modifier = modifier,
- style = ComposeAppTheme.typography.subhead1,
+ style = ComposeAppTheme.typography.captionSB,
color = if (selectEnabled) {
ComposeAppTheme.colors.leah
} else {
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt
index 82541bfbbad..2f23c0f3294 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapQuoteService.kt
@@ -141,7 +141,10 @@ class SwapQuoteService {
}
.awaitAll()
.filterNotNull()
- .sortedByDescending { it.amountOut }
+ .sortedWith(
+ compareByDescending { it.provider.priority }
+ .thenByDescending { it.amountOut }
+ )
}
fun setAmount(v: BigDecimal?) {
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt
index a7f6d0fcf67..b645a7686c7 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/SwapSelectProviderFragment.kt
@@ -35,7 +35,6 @@ import io.horizontalsystems.bankwallet.ui.compose.components.HSpacer
import io.horizontalsystems.bankwallet.ui.compose.components.MenuItem
import io.horizontalsystems.bankwallet.ui.compose.components.RowUniversal
import io.horizontalsystems.bankwallet.ui.compose.components.VSpacer
-import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_green50
import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_grey
import io.horizontalsystems.bankwallet.ui.compose.components.subhead2_leah
@@ -126,13 +125,6 @@ private fun SwapSelectProviderScreenInner(
text = provider.title,
textAlign = TextAlign.End
)
- if (i == 0) {
- VSpacer(height = 1.dp)
- subhead2_green50(
- text = stringResource(R.string.Swap_BestPrice),
- textAlign = TextAlign.End
- )
- }
}
HFillSpacer(minWidth = 8.dp)
Column(horizontalAlignment = Alignment.End) {
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt
index 1e9529eaac5..ae6035339ef 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/IMultiSwapProvider.kt
@@ -12,6 +12,7 @@ interface IMultiSwapProvider {
val title: String
val url: String
val icon: Int
+ val priority: Int
fun supports(tokenFrom: Token, tokenTo: Token): Boolean {
return tokenFrom.blockchainType == tokenTo.blockchainType &&
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt
index e8cd42540db..b57007de91e 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/OneInchProvider.kt
@@ -32,6 +32,7 @@ object OneInchProvider : EvmSwapProvider() {
override val title = "1inch"
override val url = "https://app.1inch.io/"
override val icon = R.drawable.oneinch
+ override val priority = 100
private val oneInchKit by lazy { OneInchKit.getInstance(App.appConfigProvider.oneInchApiKey) }
private const val PARTNER_FEE: Float = 0.3F
private const val PARTNER_ADDRESS: String = "0xe42BBeE8389548fAe35C09072065b7fEc582b590"
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt
index 45f3ec9cf7e..25ad533d11f 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapProvider.kt
@@ -8,6 +8,7 @@ object PancakeSwapProvider : BaseUniswapProvider() {
override val title = "PancakeSwap"
override val url = "https://pancakeswap.finance/"
override val icon = R.drawable.pancake
+ override val priority = 0
override fun supports(blockchainType: BlockchainType): Boolean {
return blockchainType == BlockchainType.BinanceSmartChain
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt
index 87194089f31..ef21ad2dacc 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/PancakeSwapV3Provider.kt
@@ -9,6 +9,7 @@ object PancakeSwapV3Provider : BaseUniswapV3Provider(DexType.PancakeSwap) {
override val title = "PancakeSwap V3"
override val url = "https://pancakeswap.finance/"
override val icon = R.drawable.pancake_v3
+ override val priority = 0
override fun supports(blockchainType: BlockchainType) = when (blockchainType) {
BlockchainType.BinanceSmartChain,
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt
index 13f8d5747cd..972cbe17eff 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/QuickSwapProvider.kt
@@ -8,6 +8,7 @@ object QuickSwapProvider : BaseUniswapProvider() {
override val title = "QuickSwap"
override val url = "https://quickswap.exchange/"
override val icon = R.drawable.quickswap
+ override val priority = 0
override fun supports(blockchainType: BlockchainType): Boolean {
return blockchainType == BlockchainType.Polygon
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt
index 2e85740f521..afa5e92b6f0 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapProvider.kt
@@ -8,6 +8,7 @@ object UniswapProvider : BaseUniswapProvider() {
override val title = "Uniswap"
override val url = "https://uniswap.org/"
override val icon = R.drawable.uniswap
+ override val priority = 0
override fun supports(blockchainType: BlockchainType): Boolean {
return blockchainType == BlockchainType.Ethereum
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt
index d0e1503af70..1da5b507fd1 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/multiswap/providers/UniswapV3Provider.kt
@@ -9,6 +9,7 @@ object UniswapV3Provider : BaseUniswapV3Provider(DexType.Uniswap) {
override val title = "Uniswap V3"
override val url = "https://uniswap.org/"
override val icon = R.drawable.uniswap_v3
+ override val priority = 0
override fun supports(blockchainType: BlockchainType) = when (blockchainType) {
BlockchainType.Ethereum,
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt
index 63200c3c06b..b4570006003 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/restoreaccount/restoremnemonic/RestorePhraseScreen.kt
@@ -98,8 +98,8 @@ import io.horizontalsystems.bankwallet.ui.compose.components.SelectorItem
import io.horizontalsystems.bankwallet.ui.compose.components.TextImportantWarning
import io.horizontalsystems.bankwallet.ui.compose.components.body_grey50
import io.horizontalsystems.bankwallet.ui.compose.components.body_leah
+import io.horizontalsystems.bankwallet.ui.compose.components.captionSB_leah
import io.horizontalsystems.bankwallet.ui.compose.components.caption_lucian
-import io.horizontalsystems.bankwallet.ui.compose.components.subhead1_leah
import io.horizontalsystems.bankwallet.ui.compose.observeKeyboardState
import io.horizontalsystems.core.helpers.HudHelper
import kotlinx.coroutines.CoroutineScope
@@ -522,7 +522,7 @@ fun SuggestionsBar(
onClick.invoke(wordItem, suggestion)
}
) {
- subhead1_leah(text = suggestion)
+ captionSB_leah(text = suggestion)
}
Spacer(modifier = Modifier.width(12.dp))
}
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt b/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt
index e5d87e34d85..cd5d625d503 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/modules/walletconnect/request/sendtransaction/WCSendEthereumTransactionRequestViewModel.kt
@@ -9,6 +9,7 @@ import io.horizontalsystems.bankwallet.core.ViewModelUiState
import io.horizontalsystems.bankwallet.core.ethereum.CautionViewItem
import io.horizontalsystems.bankwallet.core.ethereum.EvmCoinServiceFactory
import io.horizontalsystems.bankwallet.core.providers.Translator
+import io.horizontalsystems.bankwallet.core.toHexString
import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionData
import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionServiceEvm
import io.horizontalsystems.bankwallet.modules.multiswap.sendtransaction.SendTransactionServiceState
@@ -20,7 +21,6 @@ import io.horizontalsystems.bankwallet.modules.sendevmtransaction.ValueType
import io.horizontalsystems.bankwallet.modules.sendevmtransaction.ViewItem
import io.horizontalsystems.bankwallet.modules.walletconnect.WCDelegate
import io.horizontalsystems.bankwallet.modules.walletconnect.request.WCChainData
-import io.horizontalsystems.core.toHexString
import io.horizontalsystems.ethereumkit.models.TransactionData
import io.horizontalsystems.marketkit.models.BlockchainType
import kotlinx.coroutines.Dispatchers
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt
index d935651b73a..bb391bbacd9 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/ButtonSecondary.kt
@@ -243,7 +243,7 @@ fun ButtonSecondary(
enabled = enabled,
) {
ProvideTextStyle(
- value = ComposeAppTheme.typography.subhead1
+ value = ComposeAppTheme.typography.captionSB
) {
Row(
Modifier
diff --git a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt
index 72e09a022c4..593a7f5c435 100644
--- a/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt
+++ b/app/src/main/java/io/horizontalsystems/bankwallet/ui/compose/components/TabButton.kt
@@ -1,33 +1,68 @@
package io.horizontalsystems.bankwallet.ui.compose.components
-import androidx.compose.foundation.layout.*
+import androidx.compose.animation.core.AnimationSpec
+import androidx.compose.animation.core.FastOutSlowInEasing
+import androidx.compose.animation.core.animateDpAsState
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.ScrollState
+import androidx.compose.foundation.background
+import androidx.compose.foundation.horizontalScroll
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.selection.selectableGroup
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.material.*
-import androidx.compose.runtime.*
+import androidx.compose.material.Button
+import androidx.compose.material.Divider
+import androidx.compose.material.ExperimentalMaterialApi
+import androidx.compose.material.LocalContentAlpha
+import androidx.compose.material.LocalContentColor
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.ProvideTextStyle
+import androidx.compose.material.ScrollableTabRow
+import androidx.compose.material.Surface
+import androidx.compose.material.TabRow
+import androidx.compose.material.TabRowDefaults
+import androidx.compose.material.Text
+import androidx.compose.material.contentColorFor
+import androidx.compose.material.primarySurface
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.UiComposable
+import androidx.compose.ui.composed
+import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
+import androidx.compose.ui.layout.SubcomposeLayout
+import androidx.compose.ui.platform.debugInspectorInfo
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.fastForEach
+import androidx.compose.ui.util.fastMap
import io.horizontalsystems.bankwallet.ui.compose.ComposeAppTheme
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
-@Composable
-fun TabButtonSecondary(
- title: String,
- onSelect: () -> Unit,
- selected: Boolean = false,
- enabled: Boolean = true
-) {
- TabBox(
- colors = TabDefaults.textButtonColors(
- backgroundColor = ComposeAppTheme.colors.steel20,
- ),
- content = { Text(title) },
- selected = selected,
- enabled = enabled,
- onSelect = onSelect
- )
-}
@Composable
fun TabButtonSecondaryTransparent(
@@ -58,7 +93,9 @@ fun TabBox(
) {
Box {
val contentColor by if (enabled) colors.contentColor(selected) else colors.contentColorDisabled()
- val backgroundColor by if (enabled) colors.backgroundColor(selected) else colors.backgroundColor(false)
+ val backgroundColor by if (enabled) colors.backgroundColor(selected) else colors.backgroundColor(
+ false
+ )
Surface(
onClick = onSelect,
color = backgroundColor,
@@ -71,7 +108,7 @@ fun TabBox(
// style property.
CompositionLocalProvider(LocalContentAlpha provides contentColor.alpha) {
ProvideTextStyle(
- value = ComposeAppTheme.typography.subhead1
+ value = ComposeAppTheme.typography.captionSB
) {
Row(
Modifier
@@ -80,7 +117,12 @@ fun TabBox(
minHeight = TabDefaults.MinHeight
)
.height(TabDefaults.MinHeight)
- .padding(contentPadding),
+ .padding(
+ PaddingValues(
+ start = 0.dp,
+ end = 0.dp,
+ )
+ ),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
content = content
@@ -91,6 +133,304 @@ fun TabBox(
}
}
+//Customized version of ScrollableTabRow
+//needed to make
+@Composable
+@UiComposable
+fun HsPeriodsScrollableTabRow(
+ selectedTabIndex: Int,
+ modifier: Modifier = Modifier,
+ backgroundColor: Color = MaterialTheme.colors.primarySurface,
+ contentColor: Color = contentColorFor(backgroundColor),
+ edgePadding: Dp = HsTabRowDefaults.ScrollableTabRowPadding,
+ indicator: @Composable @UiComposable
+ (tabPositions: List) -> Unit = @Composable { tabPositions ->
+ HsTabRowDefaults.Indicator(
+ Modifier.hsTabIndicatorOffset(tabPositions[selectedTabIndex])
+ )
+ },
+ divider: @Composable @UiComposable () -> Unit =
+ @Composable {
+ TabRowDefaults.Divider()
+ },
+ tabs: @Composable @UiComposable () -> Unit
+) {
+ Surface(
+ modifier = modifier,
+ color = backgroundColor,
+ contentColor = contentColor
+ ) {
+ val scrollState = rememberScrollState()
+ val coroutineScope = rememberCoroutineScope()
+ val scrollableTabData = remember(scrollState, coroutineScope) {
+ HsScrollableTabData(
+ scrollState = scrollState,
+ coroutineScope = coroutineScope
+ )
+ }
+ SubcomposeLayout(
+ Modifier
+ .fillMaxWidth()
+ .wrapContentSize(align = Alignment.CenterStart)
+ .horizontalScroll(scrollState)
+ .selectableGroup()
+ .clipToBounds()
+ ) { constraints ->
+ val minTabWidth = 40.dp.roundToPx()
+ val padding = edgePadding.roundToPx()
+ val tabConstraints = constraints.copy(minWidth = minTabWidth)
+
+ val tabPlaceables = subcompose(HsTabSlots.Tabs, tabs)
+ .fastMap { it.measure(tabConstraints) }
+
+ var layoutWidth = padding * 2
+ var layoutHeight = 0
+ tabPlaceables.fastForEach {
+ layoutWidth += it.width
+ layoutHeight = maxOf(layoutHeight, it.height)
+ }
+
+ // Position the children.
+ layout(layoutWidth, layoutHeight) {
+ // Place the tabs
+ val tabPositions = mutableListOf()
+ var left = padding
+ tabPlaceables.fastForEach {
+ it.placeRelative(left, 0)
+ tabPositions.add(TabPosition(left = left.toDp(), width = it.width.toDp()))
+ left += it.width
+ }
+
+ // The divider is measured with its own height, and width equal to the total width
+ // of the tab row, and then placed on top of the tabs.
+ subcompose(HsTabSlots.Divider, divider).fastForEach {
+ val placeable = it.measure(
+ constraints.copy(
+ minHeight = 0,
+ minWidth = layoutWidth,
+ maxWidth = layoutWidth
+ )
+ )
+ placeable.placeRelative(0, layoutHeight - placeable.height)
+ }
+
+ // The indicator container is measured to fill the entire space occupied by the tab
+ // row, and then placed on top of the divider.
+ subcompose(HsTabSlots.Indicator) {
+ indicator(tabPositions)
+ }.fastForEach {
+ it.measure(Constraints.fixed(layoutWidth, layoutHeight)).placeRelative(0, 0)
+ }
+
+ scrollableTabData.onLaidOut(
+ density = this@SubcomposeLayout,
+ edgeOffset = padding,
+ tabPositions = tabPositions,
+ selectedTab = selectedTabIndex
+ )
+ }
+ }
+ }
+}
+
+private fun Modifier.hsTabIndicatorOffset(
+ currentTabPosition: TabPosition
+): Modifier = composed(
+ inspectorInfo = debugInspectorInfo {
+ name = "tabIndicatorOffset"
+ value = currentTabPosition
+ }
+) {
+ val currentTabWidth by animateDpAsState(
+ targetValue = currentTabPosition.width,
+ animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing)
+ )
+ val indicatorOffset by animateDpAsState(
+ targetValue = currentTabPosition.left,
+ animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing)
+ )
+ fillMaxWidth()
+ .wrapContentSize(Alignment.BottomStart)
+ .offset(x = indicatorOffset)
+ .width(currentTabWidth)
+}
+
+private class HsScrollableTabData(
+ private val scrollState: ScrollState,
+ private val coroutineScope: CoroutineScope
+) {
+ private var selectedTab: Int? = null
+
+ fun onLaidOut(
+ density: Density,
+ edgeOffset: Int,
+ tabPositions: List,
+ selectedTab: Int
+ ) {
+ // Animate if the new tab is different from the old tab, or this is called for the first
+ // time (i.e selectedTab is `null`).
+ if (this.selectedTab != selectedTab) {
+ this.selectedTab = selectedTab
+ tabPositions.getOrNull(selectedTab)?.let {
+ // Scrolls to the tab with [tabPosition], trying to place it in the center of the
+ // screen or as close to the center as possible.
+ val calculatedOffset = it.hsCalculateTabOffset(density, edgeOffset, tabPositions)
+ if (scrollState.value != calculatedOffset) {
+ coroutineScope.launch {
+ scrollState.animateScrollTo(
+ calculatedOffset,
+ animationSpec = ScrollableTabRowScrollSpec
+ )
+ }
+ }
+ }
+ }
+ }
+
+ private fun TabPosition.hsCalculateTabOffset(
+ density: Density,
+ edgeOffset: Int,
+ tabPositions: List
+ ): Int = with(density) {
+ val totalTabRowWidth = tabPositions.last().right.roundToPx() + edgeOffset
+ val visibleWidth = totalTabRowWidth - scrollState.maxValue
+ val tabOffset = left.roundToPx()
+ val scrollerCenter = visibleWidth / 2
+ val tabWidth = width.roundToPx()
+ val centeredTabOffset = tabOffset - (scrollerCenter - tabWidth / 2)
+ // How much space we have to scroll. If the visible width is <= to the total width, then
+ // we have no space to scroll as everything is always visible.
+ val availableSpace = (totalTabRowWidth - visibleWidth).coerceAtLeast(0)
+ return centeredTabOffset.coerceIn(0, availableSpace)
+ }
+}
+
+@Immutable
+class TabPosition internal constructor(val left: Dp, val width: Dp) {
+ val right: Dp get() = left + width
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (other !is TabPosition) return false
+
+ if (left != other.left) return false
+ if (width != other.width) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = left.hashCode()
+ result = 31 * result + width.hashCode()
+ return result
+ }
+
+ override fun toString(): String {
+ return "TabPosition(left=$left, right=$right, width=$width)"
+ }
+}
+
+object HsTabRowDefaults {
+ /**
+ * Default [Divider], which will be positioned at the bottom of the [TabRow], underneath the
+ * indicator.
+ *
+ * @param modifier modifier for the divider's layout
+ * @param thickness thickness of the divider
+ * @param color color of the divider
+ */
+ @Composable
+ fun Divider(
+ modifier: Modifier = Modifier,
+ thickness: Dp = DividerThickness,
+ color: Color = LocalContentColor.current.copy(alpha = DividerOpacity)
+ ) {
+ androidx.compose.material.Divider(modifier = modifier, thickness = thickness, color = color)
+ }
+
+ /**
+ * Default indicator, which will be positioned at the bottom of the [TabRow], on top of the
+ * divider.
+ *
+ * @param modifier modifier for the indicator's layout
+ * @param height height of the indicator
+ * @param color color of the indicator
+ */
+ @Composable
+ fun Indicator(
+ modifier: Modifier = Modifier,
+ height: Dp = IndicatorHeight,
+ color: Color = LocalContentColor.current
+ ) {
+ Box(
+ modifier
+ .fillMaxWidth()
+ .height(height)
+ .background(color = color)
+ )
+ }
+
+ /**
+ * [Modifier] that takes up all the available width inside the [TabRow], and then animates
+ * the offset of the indicator it is applied to, depending on the [currentTabPosition].
+ *
+ * @param currentTabPosition [TabPosition] of the currently selected tab. This is used to
+ * calculate the offset of the indicator this modifier is applied to, as well as its width.
+ */
+ fun Modifier.tabIndicatorOffset(
+ currentTabPosition: androidx.compose.material.TabPosition
+ ): Modifier = composed(
+ inspectorInfo = debugInspectorInfo {
+ name = "tabIndicatorOffset"
+ value = currentTabPosition
+ }
+ ) {
+ val currentTabWidth by animateDpAsState(
+ targetValue = currentTabPosition.width,
+ animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing)
+ )
+ val indicatorOffset by animateDpAsState(
+ targetValue = currentTabPosition.left,
+ animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing)
+ )
+ fillMaxWidth()
+ .wrapContentSize(Alignment.BottomStart)
+ .offset(x = indicatorOffset)
+ .width(currentTabWidth)
+ }
+
+ /**
+ * Default opacity for the color of [Divider]
+ */
+ const val DividerOpacity = 0.12f
+
+ /**
+ * Default thickness for [Divider]
+ */
+ val DividerThickness = 1.dp
+
+ /**
+ * Default height for [Indicator]
+ */
+ val IndicatorHeight = 2.dp
+
+ /**
+ * The default padding from the starting edge before a tab in a [ScrollableTabRow].
+ */
+ val ScrollableTabRowPadding = 52.dp
+}
+
+private val ScrollableTabRowScrollSpec: AnimationSpec = tween(
+ durationMillis = 250,
+ easing = FastOutSlowInEasing
+)
+
+private enum class HsTabSlots {
+ Tabs,
+ Divider,
+ Indicator
+}
+
object TabDefaults {
private val ButtonHorizontalPadding = 16.dp
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 8ed30cb3d18..994642f3bce 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -204,6 +204,7 @@
Hohe Wahrscheinlichkeit für Preissenkungen.
Erhöhtes Risikoniveau, erfordert Vorsicht.
Denken Sie immer daran, das Risikomanagement anzuwenden und beachten Sie, dass dies keine finanzielle Beratung ist.
+ Aktivieren
Top 100
Top 200
Top 300
@@ -223,9 +224,12 @@
Marktkapitalisierung aller Protokolle auf der %s Kette
Diagramm
+ Total Cap
BTC-Dominanz in Prozent
+ 24 Std. Vol.
DeFi MK
TVL in DeFi
+ ETF Inflow
Gesamtmarktwert aller Kryptowährungen.
The historical change in ratio between the market cap of Bitcoin to the rest of the cryptocurrency markets. \n\nTypically, when Bitcoin dominance trending higher the rest of the crypto market trends down and vice versa.
Das 24h Handelsvolumen des Krypto-Marktes.
@@ -237,6 +241,7 @@
Diese Münze wird noch nicht unterstützt
This project doesn’t have a coin
+ Gesamtnettonzufluss
Der Nettogeldzufluss eines ETFs entspricht seinen Geldeingängen abzüglich der Abflüsse.
Höchste Vermögenswerte
Niedrigste Vermögenswerte
@@ -485,6 +490,7 @@
Gebühr
Die geschätzten Kosten für den Versand einer Transaktion im Netzwerk (ohne Energie-, Bandbreiten- und Aktivierungsgebühren)
Aktivierungsgebühr
+ Diese Adresse ist nicht aktiv. Die Übertragung von TRX- oder TRC-10-Token an eine inaktive Account-Adresse wird das Konto aktivieren.
Verbrauchte Ressourcen
Bandbreite ist die Einheit, die die Größe der in der Blockchain-Datenbank gespeicherten Transaktionsbytes misst. Je größer die Transaktion, desto mehr Ressourcen werden verbraucht.\n\nEnergie ist die Einheit, die die Anzahl der Berechnungen misst, die von der virtuellen TRON-Maschine benötigt werden, um bestimmte Operationen im TRON-Netzwerk durchzuführen.\n\nDa intelligente Vertragsabschlüsse die Verwendung von Rechnerressourcen erfordern, muss für jeden Smart Contract eine Energiegebühr bezahlt werden.
@@ -528,6 +534,9 @@
Kein passendes Konto
Kein passendes evm Kit
Datenverarbeitungsfehler
+ Nicht unterstützte Ketten: %s
+ Nicht unterstützte Methoden: %s
+ Nicht unterstützte Ereignisse: %s
Anforderungsfehler nicht gefunden
Du hast keine verbundenen Dapps
Ausstehende Anfragen
@@ -819,6 +828,7 @@
per e-Mail
Auto-Sperren
Sei unaufhaltsam
+ Lernen Sie Kryptographie über exklusive Videos. Lernen Sie uns informell kennen. Sei der Erste, der Dinge sieht, an denen wir arbeiten.
Persönlicher Support
Geben Sie Ihren Telegram-Kontonamen ein, um einen persönlichen Support-Chat mit unserem Team zu starten. Wir werden uns mit Ihnen in Verbindung setzen und anfangen, an Ihrem Problem zu arbeiten, sobald wir es sehen.
Sie haben bereits einen privaten Chat angefordert, finden Sie ihn auf Telegram
@@ -844,7 +854,10 @@
1 Stunde
THEMA
TAB EINSTELLUNGEN
+ MARKETS TAB
+ BALANCE TAB
STARTBILDSCHIRM
+ APP ICON
Saldokonvertierung
Saldo Wert
Das Ändern des Symbols schließt die Anwendung
@@ -882,6 +895,7 @@
Sprache, Währung, Erscheinung ...
Unstoppable sammelt keine persönlichen Daten, die Ihre privaten Informationen offen legen, z.B. Münzsalden oder Adressen. Während wir einige UI-Nutzungsstatistiken sammeln, dient es allein dazu, unsere Benutzer- und App-Nutzungstrends zu verstehen. Dies kann deaktiviert werden, wenn Sie es wünschen.
+ Die Brieftasche sammelt keine persönlichen Daten.
Es gibt keine Benutzerkonten oder Datenbanken, die Benutzerdaten speichern.
Wenn erlaubt, teilt die Brieftasche App-Nutzungsgewohnheiten mit dem unaufhaltsamen Team. Dies ist zu verstehen, welche Funktionen von unseren Benutzern verwendet werden (oder nicht). Als datenschutzorientierte App brauchen wir eine Möglichkeit, unsere Bemühungen zu bewerten, und ohne dies haben wir keine Ahnung, ob die von uns erstellten Funktionen genutzt werden oder nicht.
UI-Daten teilen
@@ -953,6 +967,7 @@
Wallets auswählen
Wählen Sie die Wallets, die im Duress Modus angezeigt werden.
WALLETS
+ WATCH WALLETS
Die unaufhaltsame Brieftasche ist für diejenigen gedacht, die Kryptowährungen auf private und unabhängige Weise investieren und speichern möchten.\n\nEs ist eine nicht-Custodial, Peer-to-Peer-Wallet, bei der nur der Benutzer die Kontrolle über das Guthaben hat. Es sammelt keine Daten und hält den Benutzer unabhängig, indem er das Guthaben des Benutzers nicht an eine bestimmte Wallet-App sperrt.\n\nDie unaufhaltsame Brieftasche ist vollständig Open-Source und jeder kann bestätigen, dass die App genau so funktioniert, wie sie es vorgibt.
Sicheres Backup der Wiederherstellungsausdrücke für jede Wallet. Dies ist die einzige Möglichkeit, den Zugriff auf Gelder zurückzugewinnen, wenn die App nicht funktioniert.
@@ -1136,6 +1151,7 @@
BIP32 Root Key
Tippen um privaten Schlüssel anzuzeigen
+ To do
Private Schlüssel
EVM privater Schlüssel
@@ -1264,6 +1280,8 @@
Ausgabe
Zentralisiert
Dezentralisiert
+ Confiscation-resistance
+ Censorship-resistance
Prüfungen
24h Range
Info
@@ -1301,6 +1319,7 @@
Zum Wallet hinzugefügt
In Wallet
Favorit
+ Unfavorite
1 Woche
1 Monate
Lesen Sie mehr
@@ -1557,6 +1576,7 @@
Ereignistyp auswählen
Alle
Liste
+ Sale
Abbrechen
Gebot eingegeben
Gebot zurückgezogen
@@ -1582,6 +1602,7 @@
Melden
Der Fehlertext wird in die Zwischenablage kopiert, falls Sie den Fehler melden möchten.
+ UNSTOPPABLES beitreten
Folge Uns
Gesperrt
Pro Users
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 90e6117e6a4..cc222354518 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -46,6 +46,7 @@
Buscar
Atrás
Copiar
+ Browser
Eliminar
Aprender más
Activar
@@ -199,9 +200,10 @@
Probable aumento del precio en el futuro cercano.
No hay una tendencia clara, el mercado está en equilibrio.
Probable disminución del precio en el futuro cercano.
- High probability of price decrease.
+ Alta probabilidad de disminución del precio.
Nivel de riesgo elevado, requiere precaución.
Recuerda siempre aplicar gestión de riesgos, y ten en cuenta que esto no es un consejo financiero.
+ Activar
Top 100
Top 200
Top 300
@@ -223,6 +225,7 @@
Diagrama
Capitalización Total
Dominio de BTC
+ Vol. de 24h
Cap. DeFi
TVL en DeFi
Entrada ETF
@@ -486,6 +489,7 @@
Comisión
El coste estimado del envío de una transacción en la red. (sin excluir Energía, Ancho de Banda y Tarifa Activa)
Tarifa de activación
+ Esta dirección no está activa. Transferir tokens TRX o TRC-10 a una dirección de cuenta inactiva activará la cuenta.
Recursos consumidos
El bandwidth es la unidad que mide el tamaño de los bytes de transacción almacenados en la base de datos de la cadena de bloques. Cuanto más grande sea la transacción, más recursos de ancho de banda se consumirán.\n\nEnerge es la unidad que mide la cantidad de computación requerida por la máquina virtual TRON para realizar operaciones específicas en la red TRON.\n\nDado que las transacciones de contratos inteligentes requieren recursos informáticos para ejecutarse, cada transacción de contrato inteligente debe pagar la tarifa de energy.
@@ -495,6 +499,8 @@
Las cuentas recién creadas en la cadena de bloques TRON están inactivas y no se pueden consultar ni explorar. Necesitan ser activadas.\n\nPara activar una cuenta inactiva, transfiera tokens TRX o TRC-10 a su dirección. Para activar una nueva cuenta en la cadena Tron, se requiere una cuota de 1 TRX
No se puede transferir TRX a ti mismo
No se puede transferir 0 %s
+ Cuenta No Activa
+ Las nuevas billeteras TRON requieren un depósito de al menos 1 TRX para activarse. Las billeteras inactivas pueden mantener y recibir tokens, pero no corregirán los saldos hasta que se activen.
Pedido
Enviar
@@ -527,6 +533,9 @@
No hay cuenta adecuada
No hay kit de evm adecuado
Error de análisis de datos
+ Cadenas no compatibles: %s
+ Métodos no soportados: %s
+ Eventos no soportados: %s
Petición no encontrada error
No tienes ninguna dapps conectadas
Solicitudes Pendientes
@@ -690,6 +699,7 @@
Procesando
Enviado
Burned
+ Minted
Aprobar
Cambiado
Falla
@@ -802,6 +812,7 @@
Ajustes
Seguridad
Notificaciones
+ Experimental
Moneda principal
Idioma
Tema
@@ -816,10 +827,12 @@
vía E-mail
Bloqueo automático
Be Unstoppable
+ Aprende y domina criptografía a través de vídeos exclusivos. Conozca informalmente. Sé el primero en ver las cosas en las que trabajamos.
Soporte personal
Introduzca su nombre de cuenta de Telegram para iniciar un chat de asistencia personal con nuestro equipo. Nos pondremos en contacto contigo y comenzaremos a trabajar en tu problema tan pronto como lo veamos.
Ya has solicitado un chat privado, encuentra en Telegram
Cuenta
+ \@username
Solicitado
Pedido
Nueva requisición
@@ -840,16 +853,25 @@
1 hora
TEMA
ESPECIALES DE OBJETO
+ MARKETS TAB
+ BALANCE TAB
ACTUALIZAR SCREEN
ICONO APP
+ Conversión de balance
+ Valor de Saldo
Cambiar icono cerrará la aplicación
+ Ocultar Mercados
+ Ocultar Botones
+ Esta configuración oculta los botones Enviar, Recibir e Intercambiar en la pestaña Balance.
Saldo Auto Ocultar
Oculta automáticamente el balance cada vez que se abre la aplicación, independientemente de las preferencias anteriores.
+ Cambio de Precio %
Valor de la moneda
Valor Fiat
Sobre la aplicacion
Sitio Web
Qué novedades hay
+ Versión de la Aplicación
Configuración de Blockchain
@@ -871,7 +893,13 @@
Ajustes de app
Idioma, moneda, Apariencia …
+ Unstoppable no recopila datos personales que exponen su información privada, es decir, saldos de monedas o direcciones. Mientras recopilamos algunas estadísticas de uso de la interfaz de usuario, es sólo para entender nuestras tendencias de uso de la base de usuarios y de la aplicación. Esto puede desactivarse si lo desea.
+ La cartera no recoge ningún dato personal.
+ No hay cuentas de usuario o bases de datos almacenando datos de usuario.
+ Si se permite el monedero compartirá los hábitos de uso de la aplicación con el equipo imparable. Esto es para entender qué características están siendo utilizadas (o no) por nuestros usuarios. Siendo una aplicación enfocada a la privacidad, necesitamos alguna forma de evaluar nuestros esfuerzos y sin esto no tenemos ni idea de si las características que construimos están siendo usadas o no.
+ Compartir datos de UI
+ INTERNET
Añadir Nuevo
Añadido
@@ -910,6 +938,7 @@
Las notificaciones para la aplicación del Monedero Unstoppable están desactivadas. Necesita activarlas para poder recibir alertas de cambio de precios.
Aleatoriamente
Indexación aleatoria
+ Deterministic
Bip69 determinista
Indexación Lexicográfica
API de Blockchair
@@ -965,6 +994,7 @@
Largo Plazo 6M
Largo plazo
+ Auto
Saldo
Visión General del Mercado
Lista de Seguimiento
@@ -1008,6 +1038,7 @@
Hay 2 formatos de dirección de las carteras Bitcoin Cash pueden usar para recibir pagos entrantes:\n\n- TYPE 0 (más antiguo)\n- TYPE 145 (más reciente)\n\nMientras que el monedero imparable soporta ambos se recomienda usar un monedero Bitcoin Cash que funcione en formato TYPE 145.
AÑADIR CONTRACTO
+ Experimental
Las siguientes características son experimentales y deben utilizarse con precaución. Aunque hemos probado a fondo estas características usando nuestros propios fondos criptográficos, no podemos garantizar que funcionen como se espera en todos los casos posibles.
Permite enviar Bitcoins que no se pueden gastar hasta la fecha establecida.\n\nEl receptor de dicha transacción debe utilizar el monedero Unstoppable.\n\nSólo el monedero Unstoppable puede identificar correctamente tales transacciones en la red Bitcoin, así como permitir que el receptor gaste esos Bitcoins después de que expire el período de bloqueo.\n\nSi eres un HODLer, puedes usar esta función para obligarte a retener tus Bitcoins enviándote dicha transacción a ti mismo.\n\nPor ser característica experimental, la cantidad máxima por transacción está limitada a 0.5 BTC.
@@ -1115,6 +1146,7 @@
BIP32 Root Key
Toca para mostrar la clave privada
+ Para hacer
Claves privadas
Clave Privada EVM
@@ -1213,7 +1245,12 @@
Estadísticas
Tweets
Hoy
+ 1D
+ 7D
+ 1M
2 S
+ 3M
+ 6M
1A
2A
5A
@@ -1264,6 +1301,11 @@
Cap. de Mercado Diluida
En circulación
Suministro total
+ K
+ M
+ B
+ T
+ Q
Capitalización de Mercado / Proporción TVL
La proporción del tope de mercado de la ficha de proyecto sobre su TVL.
Volumen
@@ -1304,6 +1346,7 @@
Datos Insuficientes
No hay suficientes puntos de datos para mostrar el indicador EMA 1. Por favor, ajuste el período de tiempo para generar una vista de la línea media de movimiento. No hay suficiente punto para mostrar EMA 1.
Tipo
+ Period
Longitud RSI
Longitud rápida
Longitud lenta
@@ -1369,6 +1412,7 @@
Titulares
Proyecto TVL
Proyecto TVL (Valor Total bloqueado)
+ M.Cap / TVL Ratio
Ingresos del Proyecto
Tarifa del proyecto
Rango de Ingresos del Proyecto
@@ -1417,15 +1461,29 @@
No hay datos
Análisis de contratos inteligente
Elementos de Alto Riesgo
+ Elementos de Riesgo Medio
Arriesgado
+ Atención Requerida
Desarrollado por De.Fi
%d Artículos
Indicadores técnicos
+ Recuerda siempre aplicar gestión de riesgos, y ten en cuenta que esto no es un consejo financiero.
+ sobrecomprado
+ sobrevendido
+ abajo
+ abajo
+ Las acciones con el activo son riesgosas.
+ Comenzando desde el %s
+ El activo está fuera del canal de bandas de Bollinger y %s.
+ RSI = %1$s. Esto también indica que el activo está %2$s.
+ Podría haber un fuerte movimiento hacia %s, por lo que es mejor esperar a que el precio del activo regrese al canal.
+ el activo estaba %s, pero ahora ha regresado al canal de Bandas de Bollinger. Esto indica una posible reversión de la tendencia.
Mientras tanto, el RSI es %1$s, lo que aún indica que está %2$s.
Este podría ser una señal muy fuerte para ingresar al mercado. Ten en cuenta que puede haber varios intentos de movimiento hacia %s después de regresar al canal, así que no olvides el manejo del riesgo.
Mientras tanto, el RSI es %s, lo que también indica una reversión de la tendencia (el RSI cruzó el límite del 70\%%).
El precio está volviendo a niveles neutrales; sin embargo, aún existe potencial para movimientos hacia arriba. Ten en cuenta que RSI = 50 y el centro de las Bandas de Bollinger son resistencias fuertes y posibles puntos de reversión de la tendencia. No olvides el manejo del riesgo.
RSI = $s también confirma la ausencia de una tendencia fuerte.
+ el activo estaba en la zona de sobrecompra/sobreventa, pero en este momento el precio ha regresado al canal de las Bandas de Bollinger en la zona neutral. El RSI es %s, lo que también confirma la ausencia de una tendencia fuerte, por lo que en general el precio del activo se está moviendo hacia la media y es posible un movimiento adicional en cualquier dirección.
En general, el precio del activo se está moviendo hacia la media y es posible que se produzca un movimiento en cualquier dirección.
Por favor, toma nota:
arriba
@@ -1505,7 +1563,9 @@
Promedio de tiempo
%d Artículos
Súbditos de hoy
+ %s NFT
~%s por NFT
+ Royalty
Fecha de inicio
Seleccionar Tipo de Evento
@@ -1521,6 +1581,7 @@
Personalizado
Pagos
Cancelar en masa
+ Mint
Desconocido
Ganadores
@@ -1536,9 +1597,11 @@
Reportar
El texto de error se copiará al portapapeles si decides reportarlo.
+ ÚNETE A UNSTOPPABLES
Síguenos
Bloqueado
Usuario Pro
+ Unstoppable Pass
Información adicional del token
Para activar estos datos, debes obtener NFT de bronce de nivel \"Coin Info+\"\n\nTambién obtendrás acceso a los datos a continuación:
Volumen y Rango DEX
diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml
index 6458a655775..e439e846ca4 100644
--- a/app/src/main/res/values-fa/strings.xml
+++ b/app/src/main/res/values-fa/strings.xml
@@ -1,7 +1,6 @@
- %1$s%2$s
انصراف
رونوشت
بستن
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 5182c4a19aa..f0b631ab8c8 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -149,7 +149,7 @@
Essayez CEX
Sélectionnez l\'exchange centralisé auquel vous voulez vous connecter.
Veuillez renseigner vos clés API (API Keys and Secrets) pour pouvoir vous connecter à votre exchange de cryptomonnaies.
- API Key
+ Clé API
Code Secret
Vérification…
@@ -203,6 +203,7 @@
Probabilité élevée de diminution du prix.
Niveau de risque élevé, nécessite de la prudence.
N\'oubliez pas d\'appliquer une gestion des risques, et notez que ceci n\'est pas un conseil financier.
+ Activer
Top 100
Top 200
Top 300
@@ -224,6 +225,7 @@
Graphique
Cap totale
Pourcentage de Dominance du BTC
+ Vol. 24h
Cap DeFi
TVL en DeFi
Entrées d\'ETF
@@ -487,6 +489,7 @@
Frais
Le coût estimé pour envoyer une transaction donnée sur le réseau (sans exclure les coûts d\'énergie, de bande passante et d\'activation)
Frais d\'activation
+ Cette adresse n\'est pas active. Le transfert de jetons TRX ou TRC-10 vers une adresse de compte inactive activera le compte.
Ressources consommées
La bande passante est l\'unité qui mesure la taille des octets de transaction stockés dans la base de données blockchain. Plus la transaction est grande, plus la bande passante sera consommée.\n\nL\'énergie est l\'unité qui mesure le montant de calcul requis par la machine virtuelle TRON pour effectuer des opérations spécifiques sur le réseau TRON.\n\nÉtant donné que les transactions de contrats intelligents nécessitent des ressources informatiques pour être exécutées, chaque transaction de contrat intelligent nécessite le paiement de frais d\'énergie.
@@ -530,6 +533,9 @@
Aucun compte approprié
Aucun kit evm approprié
Erreur d\'analyse des données
+ Chaînes non prises en charge : %s
+ Méthodes non prises en charge : %s
+ Événements non pris en charge : %s
Erreur de requête non trouvée
Vous n\'avez aucune dapp connectée
Demandes en attente
@@ -821,6 +827,7 @@
par e-mail
Verrouillage automatique
Soyez Unstoppable
+ Apprenez et maîtrisez les crypto-monnaies grâce à des vidéos exclusives. Faites connaissance avec nous de manière informelle. Soyez les premiers à voir les projets sur lesquels nous travaillons.
Assistance Personnelle
Entrez le nom de votre compte Telegram pour commencer une conversation de soutien personnelle avec notre équipe. Nous reviendrons vers vous et commencerons à travailler sur votre problème dès que nous le verrons.
Vous avez déjà demandé une conversation privée, la trouver sur Telegram
@@ -846,12 +853,16 @@
1 heure
Thème
PARAMÈTRES DES TAB
+ TAB DES MARCHÉS
+ BALANCE TAB
ÉCRAN DE LÉCHARGEMENT
ICON APPLICATION
Conversion du solde
+ Valeur du solde
La modification de l\'icône fermera l\'application
Masquer les marchés
Masquer les boutons
+ Cette configuration masque les boutons Envoyer, Recevoir et Permuter dans l\'onglet Balance.
Masquer le Solde Automatiquement
Masque automatiquement le solde à chaque ouverture de l\'application, indépendamment des préférences précédentes.
Variation de prix %
@@ -868,6 +879,7 @@
Restaurer la sauvegarde
Créer une nouvelle sauvegarde
Fichier de sauvegarde
+ WALLETS
AUTRE
Restaurer
Liste des contenus dans le fichier de sauvegarde.
@@ -882,6 +894,7 @@
Langue, Devise, Apparence ...
Unstoppable ne collecte pas de données personnelles exposant vos informations privées, telles que les soldes de coins ou les adresses. Bien que nous recueillions certaines statistiques d\'utilisation de l\'interface utilisateur, cela sert uniquement à comprendre notre base d\'utilisateurs et les tendances d\'utilisation de l\'application. Cela peut être désactivé si vous le souhaitez.
+ Le portefeuille ne recueille aucune donnée personnelle.
Il n\'y a pas de comptes utilisateurs ni de bases de données stockant les données des utilisateurs.
Si autorisé, le portefeuille partagera les habitudes d\'utilisation de l\'application avec l\'équipe d\'Unstoppable. Cela permet de comprendre quelles fonctionnalités sont utilisées (ou non) par nos utilisateurs. Étant une application axée sur la confidentialité, nous avons besoin d\'une manière d\'évaluer nos efforts, et sans cela, nous n\'avons aucune idée si les fonctionnalités que nous avons développées sont utilisées ou non.
Partager les données UI
@@ -1135,6 +1148,7 @@
BIP32 Root Key
Appuyez pour afficher la clé privée
+ À faire
Clés privées
Clé privée EVM
@@ -1289,6 +1303,8 @@
Cap. marché diluée
Offre en Circulation
Offre totale
+ K
+ M
G
MM
P
@@ -1456,6 +1472,8 @@
N\'oubliez pas d\'appliquer une gestion des risques, et notez que ceci n\'est pas un conseil financier.
suracheté
sursoldé
+ moins
+ plus
Les actions liées à l\'actif comportent des risques.
À partir du %s
L\'actif est en dehors du canal de bandes de Bollinger et %s.
@@ -1467,6 +1485,7 @@
Pendant ce temps, le RSI est %s, ce qui indique également un renversement de tendance (le RSI a franchi la limite à 70\%%).
Le prix revient à des niveaux neutres, cependant, il existe encore un potentiel de mouvement à la hausse. Gardez à l\'esprit que le RSI = 50 et le milieu des bandes de Bollinger sont des résistances fortes et des points possibles de renversement de tendance. N\'oubliez pas la gestion des risques.
Le RSI = $s confirme également l\'absence d\'une forte tendance.
+ L\'actif se trouvait dans la zone de surachat/survente, mais pour le moment, le prix est revenu dans le canal de Bandes de Bollinger dans la zone neutre. Le RSI est %s, ce qui confirme également l\'absence d\'une forte tendance, donc dans l\'ensemble, le prix de l\'actif se rapproche de la moyenne et un mouvement ultérieur est possible dans n\'importe quelle direction.
En général, le prix de l\'actif se rapproche de la moyenne et un mouvement ultérieur est possible dans n\'importe quelle direction.
Veuillez noter:
au-dessus
@@ -1580,6 +1599,7 @@
Signaler
Le texte de l\'erreur sera copié dans votre presse-papiers si vous décidez de le signaler.
+ REJOIGNEZ LES UNSTOPPABLES
Suivez-nous
Verrouillé
Utilisateur Pro
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 2045fba9aea..d68049e12d4 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -60,6 +60,8 @@
공유
적용
금액 설정
+ %1$s 이하나 %2$s 이상이어야 합니다.
+ 잘못된 정수 숫자
오류
N/A
어떤
@@ -201,6 +203,7 @@
가격 하락의 높은 확률.
고위험 수준, 주의가 필요합니다.
언제나 위험 관리를 적용하는 것을 기억하세요. 이것은 금융 조언이 아님을 유의하세요.
+ 켜다
상위 100
상위 200
상위 300
@@ -369,7 +372,7 @@
주소 유형
잠김
방송
- Memo (Tag)
+ 메모 (태그)
인식할 수 없음
이 주소는 관찰 중인 계정의 주소입니다
필요한 메모 (태그)를 제공하고 호환되는 네트워크 토큰만 보내십시오. 그렇지 않으면 소멸됩니다.
@@ -490,6 +493,7 @@
수수료
네트워크에서 거래하는 데 드는 예상 비용입니다. (energy, bandwidth 및 활성화 수수료 제외)
활성화 수수료
+ 이 주소는 활성화되지 않았습니다. 비활성화된 계정 주소로 TRX 또는 TRC-10 토큰을 전송하면 계정이 활성화됩니다
소모된 자원
Bandwidth 은 블록체인 데이터베이스에 저장된 트랜잭션 바이트 크기를 측정하는 단위입니다. 거래가 클수록 대역폭 자원이 더 많이 사용됩니다.\n\nEnergy 는 TRON 가상 머신이 TRON 네트워크에서 특정 작업을 수행하기 위해 필요한 계산 양을 측정하는 단위입니다. \n\n스마트 계약 트랜잭션은 실행에 계산 자원이 필요하기 때문에 각 스마트 계약 트랜잭션에는 energy 수수료를 지불해야합니다.
@@ -533,6 +537,9 @@
적합한 계정이 없습니다.
적합한 evm 키트가 없습니다.
데이터 파싱 오류
+ 지원되지 않는 체인: %s
+ 지원되지 않는 메서드: %s
+ 지원되지 않는 이벤트: %s
요청을 찾을 수 없음 오류
연결된 dapp이 없습니다.
보류 중인 요청
@@ -850,6 +857,8 @@
1시간
주제
탭 설정
+ 마켓 탭
+ 잔고 탭
시작 화면
앱 아이콘
잔액 변환
@@ -857,6 +866,7 @@
아이콘을 변경하면 애플리케이션이 종료됩니다.
마켓 숨기기
숨김 버튼
+ 이 설정은 잔고 탭에서 보내기, 받기 및 스왑 버튼을 숨깁니다.
밸런스 자동 숨기기
앱이 열릴 때마다 잔고를 자동으로 숨깁니다. 이전 설정에 관계없이 적용됩니다.
가격 변경 %
@@ -888,6 +898,7 @@
언어, 통화, 외관...
Unstoppable 는 코인 잔액이나 주소와 같은 개인 정보를 노출하는 개인 데이터를 수집하지 않습니다. UI 사용 통계를 수집하긴 하지만, 이는 사용자 기반 및 앱 사용 트렌드를 이해하기 위한 것입니다. 원하신다면 비활성화할 수 있습니다.
+ 이 지갑은 개인 데이터를 수집하지 않습니다.
사용자 계정이나 사용자 데이터를 저장하는 데이터베이스가 없습니다.
허용된 경우, 지갑은 앱 사용 습관을 Unstoppable 팀과 공유할 것입니다. 이는 사용자가 어떤 기능을 사용하고 있는지 (또는 사용하지 않는지) 이해하기 위한 것입니다. 개인 정보 보호를 중시하는 앱이지만, 우리의 노력을 평가할 방법이 필요합니다. 이를 통해 만든 기능이 사용되고 있는지 여부를 알 수 없기 때문입니다.
UI 데이터 공유
@@ -1143,6 +1154,7 @@
BIP32 Root Key
개인 키 보기
+ 할 일
개인 암호
EVM 개인 키
@@ -1593,6 +1605,7 @@
보고
나중에 보고할 수 있도록 에러 텍스트가 클립보드에 복사됩니다.
+ JOIN UNSTOPPABLES
팔로우
잠김
Pro Users
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index cf3a214c9bf..2d2d67702f7 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -160,6 +160,7 @@
Mercados
Buscar
RECENTES
+ POPULAR
PARÂMETROS DE MERCADO
PARÂMETROS DE PREÇO
PARÂMETROS DE REDE
@@ -492,6 +493,7 @@
Taxa
O custo estimado de envio de determinada transação na rede. (Sem excluir Eneregy, Bandwidth e Taxa de Ativação)
Taxa de ativação
+ Este endereço não está ativo. A transferência de tokens TRX ou TRC-10 para um endereço de conta inativo irá ativar a conta.
Recursos consumidos
A bandwidth é a unidade que mede o tamanho dos bytes de transação armazenados no banco de dados blockchain. Quanto maior a transação, mais recursos de largura de banda serão consumidos.\n\nEnergy é a unidade que mede a quantidade de computação necessária pela máquina virtual TRON para realizar operações específicas na rede TRON.\n\nComo as transações de contrato inteligente exigem recursos de computação para executar, cada transação de contrato inteligente requer o pagamento da taxa de energy.
@@ -535,6 +537,9 @@
Sem conta adequada
Nenhum kit evm adequado
Erro de análise de dados
+ Correntes não suportadas: %s
+ Métodos não suportados: %s
+ Eventos não suportados: %s
Pedido não encontrado erro
Você não tem nenhum Dapps conectado
Solicitações Pendentes
@@ -852,6 +857,8 @@
1 hora
TEMA
DEFINIÇÕES DO TAB
+ TAB MARKETS
+ BALANCE TAB
TELA DE INÍCIO
ICONE DE APLICATIVO
Conversão de saldo
@@ -891,6 +898,7 @@
Linguagem, Moeda, Aparência …
Unstoppable não coleta dados pessoais que exponham suas informações privadas, como saldos de moedas ou endereços. Embora coletemos algumas estatísticas de uso da interface do usuário, é exclusivamente para entender nossa base de usuários e tendências de uso do aplicativo. Isso pode ser desativado se você desejar.
+ A carteira não coleta nenhum dado pessoal.
Não há contas de usuário ou bancos de dados armazenando dados do usuário.
Se permitido, a carteira compartilhará os hábitos de uso do aplicativo com a equipe do Unstoppable. Isso é para entender quais recursos estão sendo usados (ou não) pelos nossos usuários. Sendo um aplicativo focado em privacidade, precisamos de alguma maneira de avaliar nossos esforços e sem isso não temos ideia se os recursos que construímos estão sendo utilizados ou não.
Compartilhar Dados de UI
@@ -1147,6 +1155,7 @@
Chave Raiz BIP32
Toque para mostrar a chave privada
+ Para fazer
Chave Privada
Chave Privada EVM
@@ -1597,6 +1606,7 @@
Reportar
O texto de erro será copiado para a área de transferência caso você decida reportá-lo.
+ JUNTE-SE EM REPARÁVEIS
Siga a gente
Bloqueado
Usuários Pro
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 0f5011c7912..e9b9e7963a9 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -185,14 +185,30 @@
Работает на DefiLlama API
Обзор
Новости
+ Монеты
+ Платформы
+ Пары
Секторы
Избранное
Список избранного пуст.
Топ токены
Топ токенов по рыночной капитализации
+ Сигналы
+ Объем
Рын. капитализация
+ TVL
+ Нижеследующие сигналы основаны на технических индикаторах ценового диапазона Боллинджера и RSI за последние приблизительно 30 дней. Эти сигналы алгоритмические и могут часто изменяться.
+ Высокая уверенность в повышении цен.
+ Вероятное увеличение цены в ближайшем будущем.
+ Нет чёткого тренда, рынок находится в равновесии.
+ Вероятное снижение цен в ближайшем будущем.
+ Высокая вероятность снижения цены.
+ Повышенный уровень риска, требует осторожности.
Всегда помните о применении управления рисками, и обратите внимание, что это не финансовый совет.
+ Включить
Топ 100
+ Топ 200
+ Топ 300
Топ 500
Лучшие рыночные пары
Лучшие торговые пары по объему на каждой бирже
@@ -209,9 +225,12 @@
Капитализация рынка всех протоколов на блокчейне %s
График
+ Общая капитализация
Доминирование BTC
+ Объём
Капитализация DeFi
TVL в DeFi
+ ETF приток
Общая рыночная стоимость всех криптовалют.
Историческое изменение соотношения рыночной капитализации биткойнов к остальным криптовалютным рынкам. \n\nОбычно, в этом случае биткойны доминируют над остальными тенденциями криптовалютного рынка наоборот.
24-часовой объем крипторынка.
@@ -223,7 +242,14 @@
Этот токен еще не поддерживается
У этого проекта нет токена
+ Общий чистый приток
+ Чистый приток (net inflow) ETF равен разнице между поступлениями и оттоками наличных средств.
+ Наивысшие активы
+ Наименьшие активы
+ Приток
+ Расход
Все
+ Всего чистых активов
Ничего не найдено
Фильтры
@@ -237,6 +263,8 @@
Ценовой период
Торговые сигналы
Изменение цены
+ 24 Часа
+ Полночь по UTC
Блокчейны
Обошел BTC
Обошел ETH
@@ -256,6 +284,7 @@
Активно продавать
Продавать
Риски
+ Показывают рост
Топ 100
Топ 250
Топ 500
@@ -290,8 +319,12 @@
1 Неделя
2 Недели
1 Месяц
+ 3 Месяца
6 Месяцев
1 Год
+ Вручную
+ Показывают рост
+ Теряют в цене
Наивысшей кап.
Наименьшей кап.
@@ -310,6 +343,7 @@
до %s
Синхронизация…
Поиск транзакций...
+ %s tx
Синхронизация… %s%%
Отключена монета %s
По балансу
@@ -457,6 +491,7 @@
Комиссия
Ориентировочные затраты на отправку данной транзакции по сети (без учёта energy, Bandwidth и комиссии за активацию) предполагаются
Комиссия за активацию
+ Этот адрес не активен. Перевод TRX или токенов TRC-10 на неактивный адрес активирует аккаунт.
Расходуемые ресурсы
Bandwidth - это единица, которая измеряет размер байт транзакции, хранящихся в базе данных блокчейна. Чем больше транзакция, тем больше bandwidth будет потребляться.\n\nEnergy — это единица, измеряющая количество вычислений, требуемых виртуальной машиной TRON для выполнения конкретных операций в сети TRON.\n\nПоскольку транзакции смарт-контракта требуют выполнения вычислительных ресурсов, каждая сделка по контракту требует оплаты energy комиссии.
@@ -466,6 +501,8 @@
Недавно созданные учетные записи в блокчейне TRON неактивны и не могут быть запрошены или изучены. Они должны быть активированы.\n\nАктивация новой учетной записи в цепочке Tron требует комиссию в размере 1 TRX. Для активации достаточно просто перевести токены TRX или TRC-10 на неактивный адрес аккаунта
Невозможно отправить TRX самому себе
Невозможно отправить 0 %s
+ Аккаунт не активен
+ Новым кошелькам TRON требуется депозит как минимум 1 TRX для активации. Неактивные кошельки могут принимать и хранить токены, но не будут корректировать балансы до момента активации.
Запрос
Отправить
@@ -498,6 +535,9 @@
Нет подходящей учетной записи
Нет подходящего evm kit
Ошибка разбора данных
+ Неподдерживаемые чейны: %s
+ Неподдерживаемые методы: %s
+ Неподдерживаемые события: %s
Запрос не найден
У вас нет подключенных dapps
Ожидающие запросы
@@ -789,10 +829,12 @@
по электронной почте
Блокировка
Продолжить
+ Изучайте и осваивайте криптовалюты с помощью эксклюзивных видео. Узнавайте о нас неформально. Будьте первыми, кто увидит то, над чем мы работаем.
Персональная поддержка
Введите имя вашей учетной записи Telegram, чтобы начать чат с нашей командой. Мы свяжемся с вами и начнем работать над вашей проблемой, как только увидим ее.
Вы уже запросили приватный чат, найдите его в Telegram
Аккаунт
+ \@username
Запрошено
Запрос
Новый запрос
@@ -813,16 +855,25 @@
1 час
ТЕМА
НАСТРОЙКИ ВКЛАДКИ
+ ВКЛАДКА РЫНКИ
+ ВКЛАДКА БАЛАНС
ЗАПУСК ЭКРАНА
ИКОНКА ПРИЛОЖЕНИЯ
+ Конвертация баланса
+ Значение баланса
Изменение значка закроет приложение
+ Скрыть рынки
+ Скрыть кнопки
+ Эта конфигурация скрывает кнопки Отправить, Получить и Обмен на вкладке баланса.
Автоскрытие баланса
Автоматически скрывает баланс при открытии приложения, независимо от предыдущих настроек.
+ Изменение цены %
Токен значение
Фиатное значение
О приложении
Веб-сайт
Что нового
+ Версия приложения
Настройки блокчейна
@@ -844,6 +895,11 @@
Настройки приложения
Язык, валюта, внешний вид
+ Unstoppable не собирает персональные данные, которые могут раскрывать вашу частную информацию, такую как балансы монет или адреса. Мы собираем некоторую статистику использования интерфейса исключительно для понимания нашей пользовательской базы и тенденций использования приложения. Эта функция может быть отключена по вашему желанию.
+ Кошелек не собирает личные данные.
+ Здесь нет пользовательских аккаунтов или баз данных для хранения данных пользователей.
+ Если разрешено, кошелек будет делиться с командой Unstoppable информацией о привычках использования приложения. Это необходимо для понимания, какие функции используются (или нет) нашими пользователями. В качестве приложения, ориентированного на конфиденциальность, нам нужен способ оценить наши усилия, и без этого мы не сможем определить, используются ли построенные нами функции или нет.
+ Поделиться данными UI
ИНТЕРНЕТ
@@ -851,6 +907,7 @@
Добавлено
Режим синхронизации
+ RPC Url
Добавить источник RPC
По названию
Базовая авторизация (опц.)
@@ -886,6 +943,7 @@
Детерминированный
Deterministic Bip69
Лексикографическая индексация
+ Blockchair API
Быстрый, Конфиденциальный, Централизованный
API + Блокчейн
Блокчейн
@@ -1087,8 +1145,10 @@
Этот ключ предназначен для всех EVM-совместимых блокчейнов. Не передавайте его никому.
Нажмите, чтобы показать приватный ключ
+ BIP32 Root Key
Нажмите, чтобы показать приватный ключ
+ Выполнить
Приватные ключи
Приватный ключ EVM
@@ -1143,6 +1203,7 @@
Символ
Код токена
Десятичные знаки
+ …
ТИПЫ ТОКЕНОВ
УЖЕ ДОБАВЛЕНО
Адрес контракта
@@ -1186,6 +1247,7 @@
Аналитика
Твиты
СГД
+ 1Д
7Д
1М
2Н
@@ -1503,6 +1565,7 @@
Средняя оценка за все время
%d Элементов
Продажи за сегодня
+ %s NFT
~%s за NFT
Вознаграждение
Дата старта
@@ -1523,6 +1586,8 @@
Минт
Неизвестная
+ Показывают рост
+ Теряют в цене
Новости
%dд назад
%dч назад
@@ -1534,9 +1599,11 @@
Пожаловаться
Сообщение об ошибке будет скопировано в ваш буфер обмена данными на случай, если вы решите о ней сообщить.
+ Be Unstoppable
Мы в соцсетях
Заблокировано
Pro-пользователь
+ Unstoppable Pass
Дополнительная информация о токене
Чтобы включить эти данные, вы должны получить бронзовый уровень UW NFTs “Coin Info+”\n\nТакже вы получите доступ к данным ниже:
DEX объем и рейтинг
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index e04de569678..f5a51812f7f 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -8,6 +8,7 @@
Kapat
Yükleniyor...
Yeniden başlat
+ ASKIYA ALINDI
GERİ ALMA
Göster
Gizle
@@ -48,7 +49,9 @@
Tarayıcı
Sil
Daha fazla bilgi edin
+ Activate
kaydol
+ Activating
API Anahtarı alın
Giriş yapmak
Üye olmak
@@ -57,6 +60,8 @@
Paylaş
Uygula
Miktarı Ayarla
+ %1$s\'den küçük veya %2$s\'den büyük olamaz
+ Hatalı tam sayı numarası
Hata
N/A
Herhangi
@@ -67,6 +72,7 @@
Bu cüzdan, gizli sözcükler listesinde ve/veya bir şifrede standart olmayan bir karakter kullanıyor gibi görünüyor. Bir bakiye veya işlem göremiyorsanız lütfen bilgi için aşağıya bakınız.\n\nDAHA FAZLA BİLGİ ALMAK İÇİN TIKLAYINIZ
Bu standart olmayan bir cüzdandır. \n\nDAHA FAZLA BİLGİ ALMAK İÇİN TIKLAYIN
+ Be Unstoppable
Varlıkları Serbest Bırak
Kendinizi kilitlemeyin ve başkalarının bunu sizin için yapmasına izin vermeyin.
Sınırları Kaldırın
@@ -167,29 +173,62 @@
En Düşük Fiyat
Sıralama şekli
Total Cap
+ BTC Hakimiyeti
24 saat hacim
+ TVL in DeFi
+ DeFi Cap
Hepsini Gör
CoinGecko API İle Güçlendirildi
Horizontal API Tarafından Desteklenmektedir
DefiLlama API İle Güçlendirildi
İzleme
Haberler
+ Coin\'ler
+ Platformlar
+ Çiftler
Sektörler
İzleme Listesi
İzleme listeniz boş.
En iyi Coinler
P. Değerine Göre En Iyi Coinler
+ Sinyaller
+ Hacim
Piyasa Değeri
+ TVL
+ Aşağıdaki sinyaller yaklaşık olarak son 30 gün boyunca Bollinger Bantları ve RSI teknik fiyat göstergelerine dayanmaktadır. Bu sinyaller algoritmiktir ve sık sık değişebilir.
+ Fiyat artışında yüksek güven.
+ Yakın gelecekte muhtemel fiyat artışı.
+ Net bir trend yok, piyasa denge durumunda.
+ Yakın gelecekte muhtemel fiyat düşüşü.
+ Fiyatın yüksek olasılıkla düşeceği.
+ Yüksek risk seviyesi, dikkat gerektirir.
+ Her zaman risk yönetimini uygulamayı unutmayın ve bu finansal tavsiye değildir.
+ Aç
+ Top 100
+ Top 200
+ Top 300
+ Top 500
+ En İyi Piyasa Çiftleri
Her borsada hacme göre en üstte olan işlem çiftleri
+ En İyi Piyasa Çiftleri
En İyi Sektörler
Sektörler
En İyi Platformlar
En İyi Blok Zinciri Platformları
Leading blockchain platforms by the cumulative market of projects built on top.
+ Protocols: %s
+ %s Ekosistemi
%s zincirindeki tüm protokollerin piyasa değeri
+ Chart
+ Toplam Piyasa Değeri
+ BTC Hakimiyeti
+ 24s Hacim
+ DeFi Cap
+ TVL in DeFi
+ ETF Girişi
Tüm kripto paraların toplam piyasa değeri.
The historical change in ratio between the market cap of Bitcoin to the rest of the cryptocurrency markets. \n\nTypically, when Bitcoin dominance trending higher the rest of the crypto market trends down and vice versa.
Kripto piyasa 24 saatlik işlem hacmi.
@@ -201,7 +240,14 @@
Bu kripto para henüz desteklenmiyor
This project doesn’t have a coin
+ Toplam Net Giriş
+ Bir ETF\'nin net girişi, nakit girişlerinin çıkışlardan çıkarılmasıyla eşittir.
+ En Yüksek Varlıklar
+ En Düşük Varlıklar
+ Giriş
+ Çıkış
Hepsi
+ Toplam Net Varlıklar
Sonuç bulunamadı
Filtreler
@@ -215,6 +261,9 @@
Fiyat Periyodu
Ticaret Sinyalleri
Fiyat Değişimi
+ 24 Saat
+ Gece Yarısı UTC
+ Blockchains
BTC\'yi Geride Bıraktı
ETH\'yi Geride Bıraktı
BNB\'yi Geride Bıraktı
@@ -233,18 +282,53 @@
Kuvvetli Satış
Sat
Riskli
+ Kazanlar
+ Top 100
+ Top 250
+ Top 500
+ Top 1000
+ Top 1500
Sonuçları Göster
Sonuçları Göster: %d
+ < 5M
+ 5M - 20M
+ 20M - 100M
+ 100M - 1B
+ 1B - 5B
+ > 5B
+ < 10M
+ 10M - 40M
+ 40M - 200M
+ 200M - 2B
+ 2B - 10B
+ > 10B
+ < 50M
+ 50M - 200M
+ 200M - 1B
+ 1B - 10B
+ 10B - 50B
+ > 50B
+ < 500M
+ 500M - 2B
+ 10B - 100B
+ 100B - 500B
+ > 500B
1 Gün
1 Hafta
2 Hafta
1 Ay
+ 3 Ay
6 Ay
1 Yıl
+ Manuel
+ Kazanlar
+ Kaybedenler
En Yüksek
En Düşük
+ %s Markets
+ Multi-Chain
Hesaptan Çek
Bakiye
@@ -257,6 +341,7 @@
%s kadar
Eşitleniyor…
İşlemler aranıyor ...
+ %s tx
Eşitleniyor...%s%%
engelli madeni para %s
Bakiye
@@ -286,6 +371,8 @@
Miktarı Ayarla
Adres tipi
Kilitli
+ Yayınlama
+ Memo (Tag)
Tanıyamıyorum
Bu adres izlenen hesabın adresidir
Gerekli Memo (Etiket) sağlayın ve yalnızca ağ uyumlu jetonları gönderin. Diğerleri kaybolur.
@@ -316,6 +403,7 @@
Etkinleştirildi
Etkisizleştirildi
Onayla
+ Domain
Gönderdiğiniz
Tutar
Alan
@@ -405,6 +493,7 @@
Masraf
Ağda belirli bir işlemi göndermenin tahmini maliyeti. (Enerji, Bant Genişliği ve Aktivasyon Ücreti hariç)
Aktivasyon ücreti
+ Bu adres aktif değil. TRX veya TRC-10 jetonlarını aktif olmayan bir hesap adresine transfer etmek, hesabı aktif hale getirecektir.
Tüketilen Kaynaklar
Band Width, blockchain veritabanında saklanan işlem baytlarının boyutunu ölçen birimdir. İşlem ne kadar büyük olursa, o kadar fazla bant genişliği kaynağı tüketilir.\n\nEnergy, TRON sanal makinesinin TRON ağında belirli işlemleri gerçekleştirmek için ihtiyaç duyduğu hesaplama miktarını ölçen birimdir.\n\nAkıllı sözleşmeden beri işlemlerin yürütülmesi için bilgi işlem kaynakları gerekir, her akıllı sözleşme işleminin energy ücretini ödemesi gerekir.
@@ -414,6 +503,8 @@
TRON blok zincirinde yeni oluşturulan hesaplar etkin değildir ve sorgulanamaz veya araştırılamaz. Etkinleştirilmeleri gerekiyor.\n\nTRX veya TRC-10 jetonlarını etkin olmayan bir hesap adresine aktarmak, hesabı etkinleştirir. Tron zincirinde yeni bir hesabın etkinleştirilmesi 1 TRX ücret gerektirir
TRX kendinize aktarılamıyor
0 %s aktarılamıyor
+ Hesap aktif değil
+ Yeni TRON cüzdanları aktif hale gelmek için en az 1 TRX yatırılmasını gerektirir. Aktif olmayan cüzdanlar, tokenları alabilir ve saklayabilir, ancak etkinleştirilene kadar bakiyeleri güncellemez.
İstek
Gönder
@@ -435,6 +526,7 @@
Yeni bağlantı
Bağlantı kesiliyor
İmza Talebi
+ Domain
İmza için mesaj
Lütfen doğrulamak için bir mesajı imzalayın
kaydol
@@ -445,6 +537,9 @@
Uygun hesap yok
Uygun evm kiti yok
Veri ayrıştırma hatası
+ Desteklenmeyen zincirler: %s
+ Desteklenmeyen yöntemler: %s
+ Desteklenmeyen olaylar: %s
İstek bulunamadı hatası
Bağlı dapp\'niz yok
bekleyen istekler
@@ -536,6 +631,7 @@
(tah)
(dk)
(azami)
+ Coin
Rota bulunamadı
Ödediğiniz
Kazandığınız
@@ -580,6 +676,10 @@
Sen Onaylıyorsun
Sen iptal et
+ Erişimi Aç
+ Aşağıdaki miktar için erişime izin ver
+ Akıllı bir sözleşmeye, adınıza token ticareti yapabilmesi için izin verin ve izin verilen miktarı belirtin. Bakiyenize herhangi bir etkisi olmaz, ancak onay için küçük bir ücret alınır.\n\nGelecekteki işlemler için daha yüksek bir miktarın önceden onaylanması, talep üzerine onaylara göre maliyet açısından daha avantajlıdır.
+ Sınırsız
Ödenek
Bir borsanın, token takaslarını yürütürken kullanıcının adına harcayabileceği ödenek miktarı. Fiili bir takas işleminin gerçekleşmesinde yeterli ödenek gereklidir.
@@ -602,6 +702,8 @@
Tamamlandı
İşleniyor
Gönderildi
+ Burned
+ Minted
Onayla
Takas Edildi
Başarısız
@@ -614,6 +716,7 @@
sınırsız
Hepsi
Blok zincirine göre filtrele
+ Coin
Kişiler
Tüm Blok Zincirleri
Tüm paralar
@@ -693,6 +796,7 @@
Gönderici bu fonları %s.\n\n tarihte sona erecek şekilde bir harcama kilidiyle gönderdi. Endişelenmeyin, alınan Bitcoin\'ler zaten sizindir ancak kilitleme süresi sona erene kadar bunları harcayamazsınız.
Gönderici bu fonları belirtilen tarihte sona erecek şekilde bir harcama kilidiyle gönderdi.\n\nEndişelenmeyin, alınan Bitcoin\'ler zaten sizindir ancak kilitleme süresi sona erene kadar bunları Bitcoin ağında harcayamazsınız.
+ Yayın
Bu miktarı içeren işlem yayınlandı ancak henüz ağ tarafından kabul edilmedi.
Çifte Harcama
Çifte Harcama Riski! Blockchain\'de, bu işlemde kullanılan girdileri harcamaya çalışan başka bir işlem var. Ağ tarafından yalnızca bir işlem kabul edilecektir
@@ -726,9 +830,13 @@
Telegram aracılığıyla
E-posta yoluyla
Otomatik kilit
+ Be Unstoppable
+ Özel videolar aracılığıyla kripto para birimini öğrenin ve ustalaşın. Bizi resmi olmayan bir şekilde tanıyın. Üzerinde çalıştığımız şeyleri ilk gören siz olun.
Kişisel Destek
+ Takımımızla kişisel destek sohbeti başlatmak için Telegram hesap adınızı girin. Sorununuzu gördüğümüzde hemen size geri dönecek ve çalışmaya başlayacağız.
Zaten özel bir sohbet talep ettiniz, bunu Telegram\'da bulun
Hesap
+ \@username
Talep Edildi
İstek
Yeni istek
@@ -749,16 +857,25 @@
1 saat
TEMA
TAB AYARLARI
+ MARKETS TAB
+ BALANCE TAB
BAŞLANGIÇ EKRANI
UYGULAMA IKONLARI
+ Bakiye çevrimi
+ Bakiye değeri
Simgeyi değiştirmek uygulamayı kapatır
+ Piyasaları Gizle
+ Düğmeleri Gizle
+ Bu yapılandırma, Bakiye sekmesinde Gönder, Al ve Değiştir düğmelerini gizler.
Denge Otomatik Gizleme
Uygulama her açıldığında, önceki tercihlere bakılmaksızın bakiyeyi otomatik olarak gizler.
+ Fiyat Değişimi %
Para değeri
Fiat Değeri
Uygulama Hakkında
Web sitesi
Neler yeni
+ Uygulama Sürümü
Blockchain Ayarları
@@ -780,12 +897,19 @@
Uygulama Ayarları
Dil, Para Birimi, Görünüm...
+ Unstoppable, coin bakiyelerinizi veya adreslerinizi açığa çıkaran kişisel verileri toplamaz. Biraz kullanıcı arayüzü kullanım istatistikleri topluyoruz, ancak bunlar yalnızca kullanıcı tabanımızı ve uygulama kullanım eğilimlerini anlamak içindir. İsterseniz bunu devre dışı bırakabilirsiniz.
+ Cüzdan herhangi bir kişisel veri toplamaz.
+ Kullanıcı hesapları veya kullanıcı verilerini depolayan veritabanları yoktur.
+ İzin verilirse, cüzdan, Unstoppable ekibiyle uygulama kullanım alışkanlıklarını paylaşacak. Bu, kullanıcılarımızın hangi özellikleri kullandığını (veya kullanmadığını) anlamak için. Gizliliğe odaklanan bir uygulama olarak, çabalarımızı değerlendirmenin bir yolu olmalı ve bu olmadan, oluşturduğumuz özelliklerin kullanılıp kullanılmadığını bilmiyoruz.
+ UI Verilerini Paylaş
+ INTERNET
Yeni ekle
Eklendi
Senkron Modu
+ RPC Url
RPC Kaynağı Ekle
İsim
Basic Auth (optional)
@@ -818,8 +942,10 @@
Unstoppable Cüzdan uygulaması için bildirimler devre dışı bırakıldı. Fiyat değişikliği uyarıları alabilmek için Bildirimler\'i açmanız ve arka plan uygulaması yenilemesine izin vermeniz gerekir.
Karıştır
Rastgele Dizinleme
+ Deterministic
BIP69
Lexicographical Dizinleme
+ Blockchair API
Hızlı, Özel, Merkezileştirilmiş
API + Blockchain
Blok zincirine göre filtrele
@@ -850,6 +976,7 @@
Bu uygulamaya güç veren kodda, uygulamanın arızalanmasına neden olabilecek keşfedilmemiş yazılım sorunları olabilir.
Paylaş
+ Be Unstoppable
Bizimle İletişime Geçin
@@ -1025,13 +1152,16 @@
Bu anahtar, tüm EVM uyumlu blok zincirleri içindir. Onu kimseyle paylaşmayın.
Özel anahtarı göstermek için dokunun
+ BIP32 Root Key
Özel anahtarı göstermek için dokunun
+ Yapılacak
Gizli Anahtar
EVM Özel anahtar
Ilgili cüzdan içinde EVM tabanlı kripto, yani Ethereum, Binance Smart Chain vb. Üzerinde tam kontrol sağlar.
İlgili cüzdandaki varlıklar üzerinde tam kontrol sağlar.
+ Account Extended Private Key
Ilgili cüzdan içinde Bitcoin ve diğer UTXO tabanlı kriptolar üzerinde tam kontrol sağlar, yani Litecoin, Bitcoin Cash, Dash vb.
Kurtarma ifadenizi asla kimseyle paylaşmayın. Unstoppable ekip asla kurtarma ifadenizi istemez.
@@ -1080,6 +1210,7 @@
Sembol
Coin Kodu
Ondalıklar
+ …
COIN ÇEŞİTLERİ
ÇOKTAN EKLENMİŞ GÖRÜNÜYOR
Sözleşme Adresi
@@ -1121,28 +1252,40 @@
Fiyat
Marketler
Analitik
+ Tweets
Bugün
+ 1G
7G
1A
2H
3A
6A
+ 1Y
+ 2Y
+ 5Y
Hepsi
Marketler
İşlem Hacmi
+ Önemli Sahipler
İlk 10 cüzdanda tutulan token sayısı. Kaliteli projeler genellikle geniş bir şekilde dağıtılmış tokene sahiptir.
Denetimler
Denetim raporu yok
+ Defiyield.app tarafından desteklenmektedir
+ Sorunlar: %d
Yatırımcı Verileri
Filtreler
+ Bitcointreasuries.net tarafından desteklenmektedir
Raporlar
Yatırılan Fonlar
Gizlilik
Yavaş
Ortadüzey
Hızlı
+ Çıkarım
Merkezi
Merkezi olmayan
+ El koyma direnci
+ Sansür direnci
Denetimler
24 Saatlik Aralık
Hakkında
@@ -1150,9 +1293,13 @@
Kategori
Kategoriler
Kişiler
+ Blockchains
+ BIPs
Coin çeşitleri
+ Bağlantılar
Kılavuzu
Web sitesi
+ Whitepaper
Twitter mevcut değil
Henüz tweet yok
Alıntılandı%s
@@ -1163,6 +1310,12 @@
Seyreltilmiş P. Değeri
Dolaşımda
Toplam arz
+ K
+ M
+ B
+ T
+ Q
+ MCap / TVL Ratio
Proje tokenının piyasa değeri ile TVL\'si üzerinden oranı.
Birim
Veri Yok
@@ -1179,15 +1332,19 @@
Daha Fazla Oku
Başlangıç tarihi
Kilitlenen Toplam Değer
+ TVL Rank
Diğer protokoller arasındaki sıralama, TVL değerinin USD cinsinden değerine dayanmaktadır.
MCap / TVL Ratio
Proje tokenının piyasa değeri ile TVL\'si üzerinden oranı.
Kredi teminatı veya likidite havuzu şeklinde platforma yatırılan sermaye.
+ %s Contract
+ BEP2 Symbol
En Üst Cüzdanlar
Yukarıdaki grafik, ilk 10 cüzdan tarafından tutulan dolaşımdaki tüm tokenlerin \%%\'sini göstermektedir. \%% ne kadar düşük olursa, madeni para o kadar fazla dağıtılır.
ilk 10 sahibinde
Toplam Sahip: %s
Önderlik
+ Get access to advanced wallet features by holding Unstoppable NFTs.
[%s]\nBulunamadı
Göstergeler
Hareketli Ortalamalar
@@ -1264,6 +1421,7 @@
Sahipler
Proje TVL
Proje TVL (Toplam Değer)
+ M.Cap / TVL Ratio
Proje Geliri
Proje Ücreti
Proje Gelir Sıralaması
@@ -1310,23 +1468,69 @@
Al
Tarafsız
Veri Yok
+ Smart Contract Analysis
+ Yüksek Riskli Ögeler
+ Orta Riskli Ögeler
Riskli
+ İlgilenmeniz Gerekiyor
De.Fi tarafından desteklenmektedir
%d adet
Teknik Göstergeleri
+ Her zaman risk yönetimini uygulamayı unutmayın ve bu finansal tavsiye değildir.
+ aşırı alım
+ aşırı satım
+ aşağı
+ yukarı
+ Varlık ile yapılan işlemler risklidir.
+ %s\'den başlayarak
+ Varlık, Bollinger Band kanalı dışında ve %s.
+ RSI = %1$s, Bu aynı zamanda varlığın %2$s olduğunu gösterir.
+ Güçlü bir %s yönlü hareket olabilir, bu yüzden varlık fiyatının kanala dönmesini beklemek daha iyi olur.
+ varlık %s idi, ancak şimdi Bollinger Band kanalına geri döndü. Bu, olası bir trend dönüşünü gösterir.
+ Bu arada, RSI %1$s, hala %2$s olduğunu gösteriyor.
+ Bu piyasaya giriş için çok güçlü bir sinyal olabilir. Kanala dönüşten sonra %s yönlü hareketin birkaç denemesi olabileceğini unutmayın, bu yüzden risk yönetimini unutmayın.
+ Bu arada, RSI %s, bu da bir trend dönüşünü gösteriyor (RSI 70\%% sınırını geçti).
+ Fiyat nötr seviyelere geri dönüyor, ancak hala yukarı yönlü hareket potansiyeli var. RSI = 50 ve Bollinger Bantlarının ortası güçlü dirençler ve olası trend dönüş noktalarıdır. Risk yönetimini unutmayın.
+ RSI = $s ayrıca güçlü bir trendin olmadığını doğruluyor.
+ varlık aşırı alım/aşırı satım bölgesindeydi, ancak şu anda fiyat nötr bölgedeki Bollinger Band kanalına geri döndü. RSI = %s ayrıca güçlü bir trendin olmadığını doğruluyor, bu nedenle genel olarak varlık fiyatı ortalama yapmaya doğru hareket ediyor ve daha fazla hareket herhangi bir yönde mümkün olabilir.
+ Genel olarak, varlık fiyatı ortalama hareket ediyor ve daha fazla hareket herhangi bir yönde mümkün olabilir.
+ Lütfen dikkate alın:
+ yukarıda
+ aşağıda
+ büyüme
+ azalış
+ EMA 200. Genel duygu ve trendi belirler. Varlığın günlük fiyatı EMA (%1$s) \'nin %2$s\'den geçtiği yerde bulunuyor. Bu, genel olarak varlığın %3$s olduğu anlamına gelir.
+ yukarıda
+ aşağıda
+ MACD. Ortalama fiyat değişimini dikkate alarak trendin gücünü değerlendirir. Histogramın günlük değeri %1$s (%2$s). Varlığın fiyatı genel olarak %3$s hareket edebilir.
Teknik Göstergeleri
+ Bollinger Bantları + RSI stratejisini kullanarak işlem sinyallerini belirliyoruz. Tüm hesaplamalar günlük mum grafiklerine dayanmakta ve ortalama uzun vadeli bir strateji için tavsiyeler sunmaktadır. Stratejinin özü, varlık fiyatının Bollinger Bantları kanalından çıkarak aşırı seviyelere ulaşması ve RSI\'nin aşırı alım/aşırı satım bölgesinde olması gerektiğidir. Fiyat kanala geri döndükten sonra, fiyatın ortalama değerlere geri dönme veya kanalı diğer taraftan kırmaya yönelik yüksek bir olasılığı vardır. Stratejinin güçlü piyasa hareketleri sırasında birkaç yanlış sinyal verebileceğini unutmayın, doğru bir sinyal ortaya çıkmadan önce.\n\nLütfen ticarette risk yönetimini uygulamanın çok önemli olduğunu ve piyasa durumu değişirse kayıpları kesmeyi unutmayın!
+ Detayları Göster
+ Detayları Gizle
Kuvvetli Al
Al
Tarafsız
Sat
Kuvvetli Satış
Riskli
+ Token Tespit Ediciler
+ Genel Tespit Ediciler
+ Sorunlar: %d
+ Activate
Cüzdanı
Adres
İmza için mesaj
+ Aboneliğinizi etkinleştirmek için bu mesajı imzalamanız gerekiyor.
+ Cüzdan adresinizin premium özelliklere aboneliği yok, aboneliği etkinleştirmek için satın almanız gerekiyor.
Premium Ayrıcalıkları
Kripto Para Analitiği
+ Her token hakkında kapsamlı piyasa ve zincir içi istatistiklere erişin.
+ Fiyat Trend Göstergeleri
+ Teknik analiz göstergelerine dayanarak yükselen tokenları keşfedin.
Kişisel Destek
+ Kişisel yardım için ekibimizle doğrudan Telegram üzerinden iletişime geçin.
+ Get Premium
+ I already have Premium
Ortalama 7G
Ortalama 30G
Son İndirim
@@ -1368,7 +1572,9 @@
Tüm Zamanların Ortalaması
%d adet
Bugünün Satıcıları
+ %s NFT
NFT başına ~%s
+ Royalty
Başlangıç tarihi
Etkinlik Türü Seç
@@ -1384,8 +1590,11 @@
Özel
Ödeme
Toplu İptal
+ Mint
Bilinmeyen
+ Kazanlar
+ Kaybedenler
Haberler
%dg önce
%dsa önce
@@ -1397,15 +1606,27 @@
Şikayet Et
Bildirmeye karar verirseniz hata metni clipboardnıza kopyalanır.
+ KATIL UNSTOPPABLES
Bizi Takip Et
Kilitli
+ Pro Users
+ Unstoppable Pass
+ Additional Token Info
+ To enable this data you should get bronze level UW NFTs “Coin Info+”\n\nAlso you get access to data below:
+ DEX Volume and Rank
+ DEX Liquidity and Rank
+ Active Addresses
İşlem Sayısı
+ Transaction Volume
Doğrulanıyor...
Çok Yakında
+ Activate
+ Activate the Pass
Mountain Yak - Go borderless. Will show you important market data, analytical tools, and useful charts based on on-chain data that will help give you a clear view of projects
Türü Seç
Henüz öğe etkinliği yok
+ Bu widget\'ın düzgün çalışması için Otomatik Başlatmayı etkinleştirmelisiniz.
Android anahtar deposu hatası
Android cihazınızın kilidi değiştirildiğinden cüzdan bilginizi tutan şifreli dosya artık geçersiz
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index f560ff04025..b4e5b4dfdcc 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -203,6 +203,7 @@
价格下跌的高概率.
风险水平升高,需要谨慎.
请记住始终要进行风险管理,并注意这不是财务建议
+ 打开
前100名
Top 200
Top 300
@@ -281,6 +282,7 @@
强烈建议卖出
出售
有风险
+ 涨幅最大者
前100名
前250名
前500名
@@ -487,6 +489,7 @@
费用
估算在网络上发送特定交易所需的成本,包括能源、带宽和激活费
激活费
+ 此地址未激活。传输TRX或 TRC-10代币到非活动帐户地址将激活该帐户。
消耗的资源
Bandwidth 是衡量存储在区块链数据库中的交易字节大小的单位。 交易越大,消耗的带宽资源就越多。\n\nEnergy 是衡量波场虚拟机在波场网络上执行特定操作所需计算量的单位。\n\n自智能合约 交易需要计算资源来执行,每笔智能合约交易都需要支付 energy费用。
@@ -824,6 +827,7 @@
通过电子邮件
自动锁定
Be Unstoppable
+ 通过独家视频学习和掌握加密。非正式地了解我们。成为第一个看看我们正在工作的事情。
个人支持
请输入您的 Telegram 帳號名稱,開始与我們的团队的個人支援聊天。 一旦我们看到这个问题,我们就会回到您的面前。
您已经请求了一个私聊,在Telegram 上找到它
@@ -849,6 +853,8 @@
1 小时
主题
TAB设置
+ 市场标签
+ 余额标签
局域网SCREEN
应用图标
余额转换
@@ -856,6 +862,7 @@
更改图标将关闭应用程序
隐藏市场
隐藏按钮
+ 此配置隐藏平衡选项卡上的发送、接收和交换按钮。
自动隐藏余额
每次打开应用程序时自动隐藏平衡,不管先前的偏好设置。
价格变化 %
@@ -887,6 +894,7 @@
语言、 货币、 外观 ...
Unstoppable 不收集暴露您私人信息的个人数据,例如币余额或地址。虽然我们收集了一些用户界面使用统计数据,但这仅用于了解我们的用户群和应用程序使用趋势。如果您希望,可以禁用此功能。
+ 钱包没有收集任何个人数据。
我们没有用户账户或存储用户数据的数据库。
如果允许,钱包将与不可阻挡团队分享应用程序使用习惯。这是为了了解我们的用户正在使用哪些功能(或未使用)。作为一个关注隐私的应用程序,我们需要一种评估我们努力的方式,如果没有这个,我们就无法知道我们构建的功能是否被使用。
共享界面数据
@@ -1138,6 +1146,7 @@
BIP32 Root Key
点击显示私钥
+ 待办
私钥
EVM 私钥
@@ -1461,6 +1470,10 @@
请记住始终要进行风险管理,并注意这不是财务建议
已购买过期的
超价
+ down
+ up
+ 资产的行动是有风险的。
+ 从 %s 开始
资产不属于Bollinger频道和 %s。
RSI = %1$s,这也表明该资产为%2$s.
可能会有强烈的%s向动,因此最好等待资产价格回到通道中。
@@ -1584,6 +1597,7 @@
报告
如果您决定报告错误文本,将复制到剪贴板。
+ 加入未加入的
关注我们
锁住
专业用户
diff --git a/core/src/main/res/values-es/strings.xml b/core/src/main/res/values-es/strings.xml
index cd9bbb5cba8..533e28f0bd2 100644
--- a/core/src/main/res/values-es/strings.xml
+++ b/core/src/main/res/values-es/strings.xml
@@ -4,5 +4,7 @@
Ayer
Inmediato
Dentro de %s
+ %d h.
+ %d min.
%d seg.
diff --git a/core/src/main/res/values-fr/strings.xml b/core/src/main/res/values-fr/strings.xml
index 93019484e92..6191c5ace31 100644
--- a/core/src/main/res/values-fr/strings.xml
+++ b/core/src/main/res/values-fr/strings.xml
@@ -4,4 +4,7 @@
Hier
Instantané
Dans la limite de %s
+ %d h.
+ %d min.
+ %d sec.
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
index 69fe2dc7bb7..dc6ba564c87 100644
--- a/fastlane/metadata/android/en-US/full_description.txt
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -1,6 +1,6 @@
Unstoppable wallet is purposely built as a decentralized management tool for cryptocurrencies.
-It is engineered to serve privacy-conscious individuals looking to manage and invest in cryptocurrencies in a sovereign and professional manner.
+It is engineered to serve privacy-conscious individuals looking to manage and invest in Bitcoin, Ethereum and other cryptocurrencies in a sovereign and professional manner.
Unstoppable is built with the following in mind:
@@ -12,8 +12,6 @@ Unstoppable is built with the following in mind:
If the above rhymes well with you then Unstoppable is for you! And we are here to focus on your unique needs and serve you in the best possible manner.
-If you're merely looking for a plain way to store Bitcoin or Ethereum this app might not be for you.
-
WALLET FEATURES:
- Non-Custodial Multi-wallet >> Manage any number of cryptocurrencies across multiple portfolio-style wallets in a non-custodial manner. This wallet is like your own bank where you are the only client and the only one in charge. It’s designed to keep assets secure and easy to restore even if the phone is stolen and tampered with.
@@ -22,9 +20,9 @@ WALLET FEATURES:
- Universal Wallet >> It supports all mainstream blockchains and is built in a standard compliant manner enabling users to use just one wallet app for everything crypto.
-- A Bitcoin Wallet >> The wallet packs some of the most advanced Bitcoin features available: SPV enabled, BIP 44/49/84/69 compliant, Bitcoin timelocks, custom transaction fees, and more.
+- A Bitcoin Wallet >> The wallet packs some of the most advanced Bitcoin features available: SPV enabled, BIP 44/49/84/86/69 compliant, Bitcoin timelocks, custom transaction fees, and more.
-- A DeFi Wallet >> Full support for decentralized token swaps on Ethereum, Binance Smart Chain, Avalanche, Solana, and more. Also, the ability to interact with any smart contract-powered service on the blockchain via the WalletConnect protocol.
+- A DeFi Wallet >> Full support for decentralized token swaps on Ethereum, Binance Smart Chain, Polygon, Avalanche, Solana, and more. Also, the ability to interact with any smart contract-powered service on the blockchain via the WalletConnect protocol.
- Ethereum Wallet >> Full support for Ethereum blockchain, its growing ecosystem of tokens (ERC20, NFT tokens, etc.), and other decentralized services such as ENS (Ethereum Name Service).
@@ -34,16 +32,14 @@ WALLET FEATURES:
- Binance Wallet >> Full support for original Binance Chain (incl. BEP2) and Binance Smart Chain.
-- NFT Wallet >> Full support for Non Fungible tokens (NFTs).
-
- Crypto Academy >> The app includes two courses meant to onboard newcomers into the world of cryptocurrencies and the DeFi ecosystem in an easy-to-digest manner covering essential aspects of cryptocurrency security, storage, privacy, transacting, and exchanging.
- Wallet for Privacy Coins >> Fully supports major privacy coins (ZCash, DASH) in an SPV manner. One of the very few wallets capable of supporting fully shielded Zcash transactions as well as the ability to privatize Bitcoin transactions.
- Decentralized Wallet >> Designed to work with most major blockchains in a decentralized manner where an app doesn't depend on some server of a wallet provider to send/receive transactions but interacts with blockchain networks directly.
-- Privacy Focused >> Designed to allow for privacy even in the most privacy-breaching scenarios. There are no user accounts keeping your records, no identity checks that risk exposing your financials to the world, and no interaction with traditional finance layers. The app is partially TOR enabled and VPN support is coming soon.
+- Privacy Focused >> Designed to allow for privacy even in the most privacy-breaching scenarios. There are no user accounts keeping your records, no identity checks that risk exposing your financials to the world, and no interaction with traditional finance layers. The app is partially TOR enabled and VPN support coming soon.
- Fully Open Source >> The most transparent wallet application built to date. The entire 4-year production process of the app is openly accessible online along with 100% of its code for anyone to evaluate or reuse in other projects. Verified and audited by third parties.
-Be Unstoppable! 😎
\ No newline at end of file
+Be Unstoppable!
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg
index 254d3f79624..65ec0c2fa67 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg
index 5da5a38deb7..6fac4f8ce6e 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg
index db99091392c..58c38db1be1 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg
index 5e2a537fb26..bab19d7263c 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg
index a06498fb835..e5080db5ac1 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg
index eda460b9b59..b8d48e003af 100644
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg and b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.jpg differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg
deleted file mode 100644
index 5cf546db84c..00000000000
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/7.jpg and /dev/null differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg
deleted file mode 100644
index 611abbb376f..00000000000
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/8.jpg and /dev/null differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg b/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg
deleted file mode 100644
index 46a0ddac6b6..00000000000
Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/9.jpg and /dev/null differ
diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt
index 227932607ed..945ccfcfe9a 100644
--- a/fastlane/metadata/android/en-US/title.txt
+++ b/fastlane/metadata/android/en-US/title.txt
@@ -1 +1 @@
-Unstoppable Wallet
\ No newline at end of file
+Unstoppable Crypto Wallet
\ No newline at end of file
diff --git a/fastlane/metadata/ru/full_description.txt b/fastlane/metadata/ru/full_description.txt
index 241ab39640f..f9d664bd3dd 100644
--- a/fastlane/metadata/ru/full_description.txt
+++ b/fastlane/metadata/ru/full_description.txt
@@ -14,7 +14,7 @@ Unstoppable построен по следующим принципам:
Если вы просто ищете простой способ хранить Bitcoin или Ethereum это приложение может не быть для вас.
-ВОЗМОЖНОСТИ КОШЕЛЬКА:
+WALLET FEATURES:
- Не хранящий на бирже (Non-Custodial) мульти-кошелек >> Управлять любым количеством криптовалют по нескольким кошелькам, локально а не на внешнем хранилище. Этот кошелек подобен вашему собственному банку, где только вы единственный клиент и единственный распорядитель. Он предназначен для обеспечения безопасности активов и их лёгкого восстановления, даже если телефон украден и подделан.
@@ -26,7 +26,7 @@ Unstoppable построен по следующим принципам:
- Кошелёк DeFi >> Полная поддержка обмена децентрализованных токенов на Ethereum, Binance Smart Chain, Avalanche, Solana и многих других. Кроме того, возможность взаимодействовать с любым умным контрактом в блокчейне через протокол WalletConnect.
-- Кошелёк Ethereum >> Полная поддержка блокчейна Ethereum, его растущей экосистемы токенов (ERC20, NFT токены и т. д.), и другие децентрализованные услуги, такие как ENS (Ethereum Name Service).
+- Кошелёк Ethereum >> Полная поддержка блокчейна Ethereum, его растущей экосистемы токенов (ERC20, NFT токены и т.
- Кошелёк Ethereum L2 >> поддержка Artbitrum, Optimism, Polygon.