16 Commits

Author SHA1 Message Date
pezkuwichain 84978e147e fix(build): develop variant uses base applicationId io.pezkuwichain.wallet
The develop build type appended a '.dev' applicationIdSuffix, producing
io.pezkuwichain.wallet.dev, which has no matching client in the
google-services.json and broke every PR/develop build at
processDevelopGoogleServices. Drop the suffix so develop uses the base
io.pezkuwichain.wallet identity (keeps the -develop versionName suffix).
2026-06-13 07:29:57 -07:00
pezkuwichain 959bfa6b0d feat(assets): PEZ-20 badge on PEZ & USDT in token list
Show a small PEZ-20 pill next to PEZ and USDT (wUSDT) token rows in the
main balance list. These are fungible assets on Pezkuwi Asset Hub — the
PEZ-20 token standard.

- item_token_asset.xml: add itemTokenAssetPez20 chip (gone by default).
- TokenAssetViewHolder: show it when chainId == Pezkuwi Asset Hub and the
  symbol is PEZ/USDT/wUSDT.

Additive only; native HEZ and other chains are unbadged. Consistent with
the pex and Telegram mini app badges.
2026-06-12 23:36:15 -07:00
pezkuwichain f5df785a42 fix(ci): free disk space before building debug androidTest APKs (#1)
The scheduled 'Run balances tests' workflow has been failing for weeks
with 'No space left on device' — assembleDebug + assembleDebugAndroidTest
for every module exceeds the ~14 GB free on GitHub-hosted runners.

Add an opt-in free-disk-space input to the reusable build workflow that
removes preinstalled toolchains we never use (dotnet, ghc, CodeQL, swift,
boost, etc., ~30+ GB), and enable it for the balances test build. Other
callers of the reusable workflow are unaffected.
2026-06-11 07:22:10 -07:00
pezkuwichain 5245f86678 fix: use main branch in github release workflow 2026-04-20 22:16:43 +03:00
pezkuwichain 817ce246b4 fix: remove trailing blank lines before closing braces (ktlint) 2026-04-20 16:57:22 +03:00
pezkuwichain a793993c1f fix: use Locale.US for DecimalFormat to fix $0 price display on Turkish locale devices
Bump version to 1.0.4
2026-04-20 16:28:16 +03:00
pezkuwichain f5b38eed8c chore: remove Branch.io SDK and route deep links through own domain
Branch.io was inherited from Nova Wallet fork but never configured.
Removed SDK integration, manifest intent filters, Gradle dependencies,
Dagger DI modules, and string resources. Deep linking now routes
exclusively through app.pezkuwichain.io with verified assetlinks.json.
2026-03-23 22:59:05 +03:00
pezkuwichain 28d0391d72 fix: store native libs uncompressed with 16KB zip alignment
Set jniLibs.useLegacyPackaging = false to ensure .so files are stored
uncompressed and 16KB-aligned within the AAB, as required by Google Play
for Android 15+ compatibility.
2026-03-14 19:50:06 +03:00
pezkuwichain 64d727dd21 fix: 16KB page alignment for all native libraries
- Rebuild renderscript-toolkit.aar from source with NDK 27 and 16KB alignment
- Rebuild libsr25519java.so from substrate-sdk source with 16KB alignment
- Realign libsqlcipher.so ELF segments to 16KB (preserves JNI API compatibility)
- Add jniLibs overrides for sr25519java and sqlcipher to replace AAR versions
- All native .so files now have 0x4000 (16KB) LOAD segment alignment
2026-03-14 18:35:15 +03:00
pezkuwichain 55df31b29b feat: prepare v1.0.3 production release with 16KB page alignment
- Add 16KB page size alignment for native Rust libraries (Google Play requirement)
- Make Play Store workflow parametric (track/status as inputs)
- Update release notes for all languages (en, tr, ku)
- Add .gitignore entries for node_modules and version.properties
2026-03-14 16:49:39 +03:00
pezkuwichain b4932c8b6e chore: bump version to 1.0.2 for Play Store release
Complete Turkish and Kurdish translations for all UI strings.
2026-03-11 06:27:11 +03:00
pezkuwichain 2fe578048b Fix unescaped apostrophes and remaining positional format specifiers in translations 2026-03-11 02:09:20 +03:00
pezkuwichain a91b1cb22b Fix positional format specifiers in English strings.xml 2026-03-11 01:56:24 +03:00
pezkuwichain ed0ffe0a3c Fix positional format specifiers in Kurdish strings.xml 2026-03-11 01:27:45 +03:00
pezkuwichain cc44f22163 fix: use positional format specifiers in Turkish translations
Convert multiple %s to %1$s, %2$s etc. in strings with multiple
substitutions to comply with Android resource format requirements.
2026-03-11 01:19:45 +03:00
pezkuwichain 8bbeddf2ba feat: complete Turkish and Kurdish translations for all UI strings
Turkish: expanded from 55 strings to full 2018 translatable strings
Kurdish: added 2 missing strings for complete coverage
2026-03-11 01:09:50 +03:00
42 changed files with 2340 additions and 378 deletions
+15
View File
@@ -31,6 +31,10 @@ on:
required: false
type: boolean
default: false
free-disk-space:
required: false
type: boolean
default: false
secrets:
# Crowdloan secrets - NOT NEEDED for Pezkuwi (own blockchain)
ACALA_PROD_AUTH_TOKEN:
@@ -140,6 +144,17 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 90
steps:
- name: 🧹 Free disk space
if: ${{ inputs.free-disk-space }}
run: |
# The androidTest build of all modules fills the ~14 GB free on
# GitHub-hosted runners; drop preinstalled toolchains we never use.
sudo rm -rf /usr/share/dotnet /usr/share/swift /opt/ghc /usr/local/.ghcup \
/opt/hostedtoolcache/CodeQL /usr/local/share/boost /usr/local/share/powershell \
/usr/local/lib/node_modules /usr/local/julia* /opt/microsoft
sudo docker image prune -af > /dev/null 2>&1 || true
df -h /
- name: Checkout particular branch
uses: actions/checkout@v4
with:
+1
View File
@@ -14,6 +14,7 @@ jobs:
upload-name: develop-apk
run-tests: false
build-debug-tests: true
free-disk-space: true
secrets: inherit
run-tests:
@@ -11,6 +11,23 @@ on:
description: 'From which branch the application will be built'
required: true
default: main
track:
description: 'Play Store track (alpha, beta, production)'
required: true
default: alpha
type: choice
options:
- alpha
- beta
- production
status:
description: 'Release status (draft, completed)'
required: true
default: draft
type: choice
options:
- draft
- completed
jobs:
build:
@@ -64,8 +81,8 @@ jobs:
serviceAccountJsonPlainText: ${{ secrets.CREDENTIAL_FILE_CONTENT }}
packageName: io.pezkuwichain.wallet
releaseFiles: app/bundle/releaseMarket/pezkuwi-wallet-android-${{ github.event.inputs.app_version }}.aab
track: alpha
status: draft
track: ${{ github.event.inputs.track }}
status: ${{ github.event.inputs.status }}
inAppUpdatePriority: 2
whatsNewDirectory: distribution/whatsnew
mappingFile: app/mapping/releaseMarket/mapping.txt
+1 -1
View File
@@ -16,7 +16,7 @@ jobs:
build:
uses: pezkuwichain/pezkuwi-wallet-android/.github/workflows/android_build.yml@main
with:
branch: master
branch: main
gradlew-command: assembleReleaseGithub
keystore-file-name: github_key.jks
secrets: inherit
+8
View File
@@ -30,3 +30,11 @@ google-services.json
**/google-services.json
.kotlin/
# Node artifacts (not part of Android build)
node_modules/
package.json
package-lock.json
# Local build version counter
version.properties
+6 -5
View File
@@ -11,10 +11,6 @@ android {
versionCode computeVersionCode()
versionName computeVersionName()
// Branch.io key from local.properties or environment variable
manifestPlaceholders = [
BRANCH_KEY: readRawSecretOrNull('BRANCH_KEY') ?: "key_test_placeholder"
]
}
signingConfigs {
dev {
@@ -84,7 +80,8 @@ android {
signingConfig signingConfigs.dev
matchingFallbacks = ['debug']
versionNameSuffix '-develop'
applicationIdSuffix '.dev'
// Use the base applicationId (io.pezkuwichain.wallet) — no ".dev" suffix —
// so it matches the registered google-services client.
//Init firebase
def localReleaseNotes = releaseNotes()
def localFirebaseGroup = firebaseGroup()
@@ -133,6 +130,10 @@ android {
resources.excludes.add("META-INF/versions/9/previous-compilation-data.bin")
resources.excludes.add("META-INF/DEPENDENCIES")
resources.excludes.add("META-INF/NOTICE.md")
// Use 16KB-aligned libsqlcipher.so from jniLibs instead of AAR's 4KB-aligned version
jniLibs.pickFirsts.add("**/libsqlcipher.so")
// Store native libs uncompressed and 16KB-aligned for Android 15+ compatibility
jniLibs.useLegacyPackaging = false
}
buildFeatures {
-17
View File
@@ -127,17 +127,6 @@
<data android:host="app.pezkuwichain.io" />
</intent-filter>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"/>
<data android:host="@string/branch_io_link_host"/>
<data android:host="@string/branch_io_link_host_alternate"/>
</intent-filter>
</activity>
<activity
@@ -206,12 +195,6 @@
android:name="io.novafoundation.nova.multisigs_notification_channel_id"
android:value="@string/multisigs_notification_channel_id" />
<meta-data
android:name="io.branch.sdk.BranchKey"
android:value="${BRANCH_KEY}" />
<meta-data android:name="io.branch.sdk.TestMode" android:value="false" />
</application>
<queries>
@@ -15,7 +15,6 @@ import io.novafoundation.nova.common.di.FeatureContainer
import io.novafoundation.nova.common.resources.ContextManager
import io.novafoundation.nova.common.resources.LanguagesHolder
import io.novafoundation.nova.common.utils.coroutines.RootScope
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler
import io.novafoundation.nova.feature_wallet_connect_impl.BuildConfig
import javax.inject.Inject
@@ -57,8 +56,6 @@ open class App : Application(), FeatureContainer {
appComponent.inject(this)
BranchIOLinkHandler.Initializer.init(this)
initializeWalletConnect()
}
@@ -42,7 +42,6 @@ import io.novafoundation.nova.feature_dapp_api.data.repository.BrowserTabExterna
import io.novafoundation.nova.feature_dapp_api.data.repository.DAppMetadataRepository
import io.novafoundation.nova.feature_dapp_api.di.deeplinks.DAppDeepLinks
import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter
import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences
import io.novafoundation.nova.feature_gift_api.di.GiftDeepLinks
import io.novafoundation.nova.feature_governance_api.data.MutableGovernanceState
@@ -122,8 +121,6 @@ interface RootDependencies {
val deepLinkingPreferences: DeepLinkingPreferences
val branchIoLinkConverter: BranchIoLinkConverter
val pendingDeepLinkProvider: PendingDeepLinkProvider
val multisigExtrinsicValidationRequestBus: MultisigExtrinsicValidationRequestBus
@@ -12,8 +12,6 @@ import io.novafoundation.nova.feature_dapp_api.di.deeplinks.DAppDeepLinks
import io.novafoundation.nova.feature_deep_linking.presentation.handling.DeepLinkHandler
import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider
import io.novafoundation.nova.feature_deep_linking.presentation.handling.RootDeepLinkHandler
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter
import io.novafoundation.nova.feature_gift_api.di.GiftDeepLinks
import io.novafoundation.nova.feature_governance_api.di.deeplinks.GovernanceDeepLinks
import io.novafoundation.nova.feature_multisig_operations.di.deeplink.MultisigDeepLinks
@@ -64,12 +62,4 @@ class DeepLinksModule {
nestedHandlers
)
}
@Provides
@FeatureScope
fun provideBranchIOLinkHandler(
branchIoLinkConverter: BranchIoLinkConverter
): BranchIOLinkHandler {
return BranchIOLinkHandler(branchIoLinkConverter)
}
}
@@ -19,7 +19,6 @@ import io.novafoundation.nova.common.utils.systemCall.SystemCallExecutor
import io.novafoundation.nova.common.utils.updatePadding
import io.novafoundation.nova.common.view.bottomSheet.action.observeActionBottomSheet
import io.novafoundation.nova.common.view.dialog.dialog
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOLinkHandler
import io.novafoundation.nova.feature_push_notifications.presentation.multisigsWarning.observeEnableMultisigPushesAlert
import io.novafoundation.nova.splash.presentation.SplashBackgroundHolder
@@ -36,9 +35,6 @@ class RootActivity : BaseActivity<RootViewModel, ActivityRootBinding>(), SplashB
@Inject
lateinit var contextManager: ContextManager
@Inject
lateinit var branchIOLinkHandler: BranchIOLinkHandler
override fun createBinding(): ActivityRootBinding {
return ActivityRootBinding.inflate(LayoutInflater.from(this))
}
@@ -92,7 +88,6 @@ class RootActivity : BaseActivity<RootViewModel, ActivityRootBinding>(), SplashB
super.onNewIntent(intent)
setIntent(intent)
branchIOLinkHandler.onActivityNewIntent(this, intent)
processIntent(intent)
}
@@ -108,8 +103,6 @@ class RootActivity : BaseActivity<RootViewModel, ActivityRootBinding>(), SplashB
override fun onStart() {
super.onStart()
branchIOLinkHandler.onActivityStart(this, viewModel::handleDeepLink)
viewModel.noticeInForeground()
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,11 @@
[target.aarch64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.armv7-linux-androideabi]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.i686-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.x86_64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
@@ -0,0 +1,11 @@
[target.aarch64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.armv7-linux-androideabi]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.i686-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.x86_64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
@@ -0,0 +1,11 @@
[target.aarch64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.armv7-linux-androideabi]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.i686-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
[target.x86_64-linux-android]
rustflags = ["-C", "link-arg=-z", "-C", "link-arg=max-page-size=16384"]
+1 -3
View File
@@ -1,7 +1,7 @@
buildscript {
ext {
// App version
versionName = '1.0.1'
versionName = '1.0.4'
versionCode = 1
applicationId = "io.pezkuwichain.wallet"
@@ -220,8 +220,6 @@ buildscript {
swipeRefershLayout = "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01"
branchIo = "io.branch.sdk.android:library:5.18.0"
playServiceIdentifier = "com.google.android.gms:play-services-ads-identifier:18.2.0"
androidxWebKit = "androidx.webkit:webkit:1.14.0"
Binary file not shown.
@@ -25,6 +25,7 @@ import java.math.BigDecimal
import java.math.BigInteger
import java.math.RoundingMode
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Calendar
@@ -203,16 +204,11 @@ fun formatDateISO_8601_NoMs(date: Date): String {
}
fun decimalFormatterFor(pattern: String): DecimalFormat {
return DecimalFormat(pattern).apply {
val symbols = decimalFormatSymbols
symbols.groupingSeparator = GROUPING_SEPARATOR
symbols.decimalSeparator = DECIMAL_SEPARATOR
decimalFormatSymbols = symbols
decimalFormatSymbols = decimalFormatSymbols
val symbols = DecimalFormatSymbols(Locale.US).apply {
groupingSeparator = GROUPING_SEPARATOR
decimalSeparator = DECIMAL_SEPARATOR
}
return DecimalFormat(pattern, symbols)
}
fun CharSequence.toAmountWithFraction(): AmountWithFraction {
+78 -77
View File
@@ -57,7 +57,7 @@
<string name="gift_reclaimed_subtitle">Reclaimed</string>
<string name="gifts_claim_fee">Heqê torê on claim</string>
<string name="share_gift_text">Hello! Youve got a %s gift waiting ji bo you!\n\nInstall Pezkuwi Cîzdan app, set up yê te wallet, û claim it via ev special link:\n%s</string>
<string name="share_gift_text">Hello! Youve got a %1$s gift waiting ji bo you!\n\nInstall Pezkuwi Cîzdan app, set up yê te wallet, û claim it via ev special link:\n%2$s</string>
<string name="share_gift_title">Diyarî Has Been Prepared.\nShare It Niha!</string>
<string name="share_gift_button">Diyarî parve bike link</string>
@@ -99,9 +99,9 @@
<string name="staking_details_migration_alert_title">%1$s staking e live on %2$s starting %3$s</string>
<string name="common_view">Bibîne</string>
<string name="transaction_history_migration_source_message">Yê te previous %s transaction history e still available on %s</string>
<string name="transaction_history_migration_source_message">Yê te previous %1$s transaction history e still available on %2$s</string>
<string name="asset_details_source_asset_alert_title">Yê te %s tokens niha on %s</string>
<string name="asset_details_source_asset_alert_title">Yê te %1$s tokens niha on %2$s</string>
<string name="asset_details_source_asset_alert_message">Starting %1$s, yê te %2$s balance, Staking, û Rêveberî dê be on %3$s — bi improved performance û lower costs.</string>
<string name="asset_details_source_asset_alert_button">Go to %s</string>
@@ -146,8 +146,8 @@
<string name="multisig_transaction_executed_dialog_title">Multisig Danûstandin Hate înfazkirin</string>
<string name="multisig_transaction_rejected_dialog_title">Multisig Danûstandin Hate redkirin</string>
<string name="multisig_transaction_rejected_dialog_message">%s on %s.\nRejected by: %s.\nNo further actions in required ji you.</string>
<string name="multisig_transaction_executed_dialog_message">%s on %s.\nNo further actions in required ji you.</string>
<string name="multisig_transaction_rejected_dialog_message">%1$s on %2$s.\nRejected by: %3$s.\nNo further actions in required ji you.</string>
<string name="multisig_transaction_executed_dialog_message">%1$s on %2$s.\nNo further actions in required ji you.</string>
<string name="multisig_transaction_dialog_message_unknown_call">Danûstandin without initial on-chain information (call data) bû rejected</string>
@@ -160,12 +160,12 @@
<string name="multisig_notification_executed_transaction_title">✅ Multisig transaction executed</string>
<string name="multisig_notification_executed_transaction_message">Hate îmzekirin û executed by %s.</string>
<string name="multisig_notification_new_approval_title_additional_message">%d of %d signatures collected.</string>
<string name="multisig_notification_new_approval_title_additional_message">%1$d of %2$d signatures collected.</string>
<string name="multisig_notification_new_approval_title">Hate îmzekirin by %s</string>
<string name="multisig_notification_init_transaction_title">✍🏻 Yê te signature requested </string>
<string name="multisig_notification_init_transaction_message">%s on %s.</string>
<string name="multisig_operation_default_call_format">%s: %s</string>
<string name="multisig_notification_init_transaction_message">%1$s on %2$s.</string>
<string name="multisig_operation_default_call_format">%1$s: %2$s</string>
<string name="multisig_notification_initiator_footer">Initiated by %s.</string>
<string name="multisig_notification_message_header">Cîzdan: %s</string>
@@ -216,16 +216,16 @@
<string name="common_signatory">Îmzekar</string>
<string name="common_hide">Hide</string>
<string name="common_show">Show</string>
<string name="multisig_operation_details_signatories">Îmzekar (%d of %d)</string>
<string name="multisig_operation_details_signatories">Îmzekar (%1$d of %2$d)</string>
<string name="swap_dry_run_failed_inline_message">Simulation of swap step failed</string>
<string name="common_dry_run_failed_title">Danûstandin simulation failed</string>
<string name="common_dry_run_failed_message">Pezkuwi Cîzdan simulates transaction beforehand to prevent errors. Ev simulation didnt succeed. Dîsa biceribîne later an bi a higher amount. If issue persists, ji kerema xwe contact Pezkuwi Cîzdan Support in Mîheng.</string>
<string name="multisig_signatory_validation_deposit_fee">%s doesnt have enough balance to pay network fee of %s û place multisig deposit of %s. You need to add %s bêtir to yê te balance</string>
<string name="multisig_signatory_validation_deposit">%s doesnt have enough balance to place multisig deposit of %s. You need to add %s bêtir to yê te balance</string>
<string name="multisig_signatory_validation_fee">%s doesnt have enough balance to pay network fee of %s. You need to add %s bêtir to yê te balance</string>
<string name="multisig_signatory_validation_deposit_fee">%1$s doesnt have enough balance to pay network fee of %2$s û place multisig deposit of %3$s. You need to add %4$s bêtir to yê te balance</string>
<string name="multisig_signatory_validation_deposit">%1$s doesnt have enough balance to place multisig deposit of %2$s. You need to add %3$s bêtir to yê te balance</string>
<string name="multisig_signatory_validation_fee">%1$s doesnt have enough balance to pay network fee of %2$s. You need to add %3$s bêtir to yê te balance</string>
<string name="invalid_call_data_title">Nederbasdar call data</string>
<string name="invalid_call_data_message">Ev call data ji bo another operation bi call hash %s</string>
@@ -236,7 +236,7 @@
<string name="multisig_wallet_details_info_warning_other_signatories">Din signatories:</string>
<string name="multisig_wallet_details_info_warning_title">Threshold %d out of %d</string>
<string name="multisig_wallet_details_info_warning_title">Threshold %1$d out of %2$d</string>
<string name="multisig_card_not_supported_title">Debit Card e ne supported ji bo Multisig</string>
<string name="multisig_card_not_supported_message">Bo manage yê te Debit Card, ji kerema xwe switch to a different type of wallet.</string>
@@ -247,7 +247,7 @@
<string name="multisig_pending_operations">Danûstandin to sign</string>
<string name="multisig_operations_progress">Tê îmzekirin (%s of %s)</string>
<string name="multisig_operations_progress">Tê îmzekirin (%1$s of %2$s)</string>
<string name="multisig_operations_created">Hate afirandin by you</string>
@@ -262,7 +262,7 @@
<string name="multisig_callhash_exists_title">Operation already exists</string>
<string name="multisig_callhash_exists_message">%s has already initiated same operation û it e currently waiting to be signed by din signatories.</string>
<string name="multisig_signatory_validation_ed">%s needs at least %s to pay ev transaction fee û stay above minimum network balance. Current balance e: %s</string>
<string name="multisig_signatory_validation_ed">%1$s needs at least %2$s to pay ev transaction fee û stay above minimum network balance. Current balance e: %3$s</string>
<string name="multisig_signing_is_not_supported_message">Multisig wallets do ne support signing arbitrary messages — only transactions</string>
@@ -292,7 +292,7 @@
<string name="multisig_signatory">Îmzekar:</string>
<string name="swap_failure_cannot_receive_insufficient_asset_out">You must have at least %s on %s to receive %s token</string>
<string name="swap_failure_cannot_receive_insufficient_asset_out">You must have at least %1$s on %2$s to receive %3$s token</string>
<string name="account_migration_title">Bi xêr hatî to Pezkuwi Cîzdan!</string>
<string name="account_migration_subtitle">Youre almost there! 🎉\n Just tap below to complete setup û start using yê te accounts seamlessly in both Polkadot App û Pezkuwi Cîzdan</string>
@@ -302,8 +302,6 @@
<string name="account_migration_accepted_url" translatable="false">%s://polkadot/migration-accepted?key=%s</string>
<string name="account_ledger_import_start_step_3_highlighted">access Bluetooth</string>
<string name="branch_io_link_host" translatable="false">pezkuwi-wallet.app.link</string>
<string name="branch_io_link_host_alternate" translatable="false">pezkuwi-wallet-alternate.app.link</string>
<string name="ledger_verify_addresses_message_both_buttons">Press both buttons on yê te %s to approve addresses</string>
<string name="ledger_verify_addresses_message_confirm_button">Press confirm button on yê te %s to approve addresses</string>
@@ -415,8 +413,8 @@
<string name="price_charts_period_year">Last Year</string>
<string name="price_charts_period_all">Hemû Dem</string>
<string name="price_chart_date_format">%s at %s</string>
<string name="price_chart_price_change">%s (%s)</string>
<string name="price_chart_date_format">%1$s at %2$s</string>
<string name="price_chart_price_change">%1$s (%2$s)</string>
<string name="price_chart_title">%s price</string>
<string name="price_chart_day">1D</string>
@@ -433,9 +431,9 @@
<string name="popular_dapps_title">Popular</string>
<string name="swap_intermediate_too_low_amount_to_stay_abow_ed_message">During swap execution intermediate receive amount e %s which e kêmtir than minimum balance of %s. Try specifying larger swap amount.</string>
<string name="swap_intermediate_too_low_amount_to_stay_abow_ed_message">During swap execution intermediate receive amount e %1$s which e kêmtir than minimum balance of %2$s. Try specifying larger swap amount.</string>
<string name="common_not_enough_to_pay_fee_message">You don\'t have enough balance to pay network fee of %s. Current balance e %s</string>
<string name="common_not_enough_to_pay_fee_message">You don\'t have enough balance to pay network fee of %1$s. Current balance e %2$s</string>
<string name="common_sec">sec</string>
@@ -443,19 +441,19 @@
<string name="common_failed">Serneket</string>
<string name="swap_execution_operations_progress">%s of %s operations</string>
<string name="swap_execution_operations_progress">%1$s of %2$s operations</string>
<plurals name="swap_execution_operations_completed">
<item quantity="one">%s operation</item>
<item quantity="other">%s operations</item>
</plurals>
<string name="swap_execution_progress_swap_label">Swapping %s to %s on %s</string>
<string name="swap_execution_progress_transfer_label">Transferring %s to %s</string>
<string name="swap_execution_progress_swap_label">Swapping %1$s to %2$s on %3$s</string>
<string name="swap_execution_progress_transfer_label">Transferring %1$s to %2$s</string>
<string name="swap_execution_failure">Serneket on operation #%s (%s)</string>
<string name="swap_execution_failure_swap_label">%s to %s swap on %s</string>
<string name="swap_execution_failure_transfer_label">%s transfer ji %s to %s</string>
<string name="swap_execution_failure">Serneket on operation #%1$s (%2$s)</string>
<string name="swap_execution_failure_swap_label">%1$s to %2$s swap on %3$s</string>
<string name="swap_execution_failure_transfer_label">%1$s transfer ji %2$s to %3$s</string>
<plurals name="common_seconds_format">
<item quantity="one">%d second</item>
@@ -515,7 +513,7 @@
<string name="common_use_max">Use max</string>
<string name="swipe_gov_insufficient_balance_dialog_title">Insufficient balance ji bo voting</string>
<string name="swipe_gov_insufficient_balance_dialog_message">You don\'t have enough balance to vote bi current voting power %s (%sx). Ji kerema xwe change voting power an add bêtir funds to yê te wallet.</string>
<string name="swipe_gov_insufficient_balance_dialog_message">You don\'t have enough balance to vote bi current voting power %1$s (%2$sx). Ji kerema xwe change voting power an add bêtir funds to yê te wallet.</string>
<string name="swipe_gov_convirm_votes_success_message">You have successfully voted ji bo %d referenda</string>
<string name="swipe_gov_vote_setup_title">Deng bide ji bo %d referenda</string>
@@ -756,7 +754,7 @@
<string name="manual_backup_select_account_default_key_title">Hesab bi default key</string>
<string name="manual_backup_select_account_custom_key_title">Hesab bi custom key</string>
<string name="manual_backup_select_account_default_key_account">Default accounts</string>
<string name="manual_backup_select_account_default_key_account_subtitle_more_chains">%s, +%d others</string>
<string name="manual_backup_select_account_default_key_account_subtitle_more_chains">%1$s, +%2$d others</string>
<string name="manual_backup_select_account_header">Hilbijêre key to back up</string>
<string name="manual_backup_select_wallet_header">Hilbijêre a wallet to back up</string>
@@ -806,7 +804,7 @@
<string name="common_change_password">Change password</string>
<string name="cloud_backup_settings_disabled_state_subtitle">Enable to backup wallets to yê te Google Drive</string>
<string name="cloud_backup_settings_last_sync">Last sync: %s at %s</string>
<string name="cloud_backup_settings_last_sync">Last sync: %1$s at %2$s</string>
<string name="cloud_backup_settings_not_auth_button">Îmze bike In to Google Drive</string>
<string name="cloud_backup_settings_deprecated_password_button">Enter Paşvekişandin Şîfre</string>
<string name="cloud_backup_settings_corrupted_backup_button">Review Paşvekişandin Updates</string>
@@ -845,7 +843,7 @@
<string name="cloud_backup_delete_button">Jê bibe Paşvekişandin</string>
<string name="restore_cloud_backup_delete_backup_title">Have you lost yê te password?</string>
<string name="restore_cloud_backup_delete_backup_description">%s It\'s exclusively yours, securely stored, inaccessible to others. Without backup password, restoring wallets ji Google Drive e impossible. If lost, delete current backup to create a nû one bi a fresh password. %s</string>
<string name="restore_cloud_backup_delete_backup_description">%1$s It\'s exclusively yours, securely stored, inaccessible to others. Without backup password, restoring wallets ji Google Drive e impossible. If lost, delete current backup to create a nû one bi a fresh password. %2$s</string>
<string name="restore_cloud_backup_delete_backup_description_highlighted_1">Unfortunately, yê te password nikare be recovered.</string>
<string name="restore_cloud_backup_delete_backup_description_highlighted_2">Alternatively, use Passphrase ji bo restoration.</string>
@@ -941,7 +939,7 @@
<string name="push_token_received_title">⬇️ Hate wergirtin %s</string>
<string name="push_token_received_no_account_name_title">⬇️ Hate wergirtin</string>
<string name="push_token_received_message">Hate wergirtin %s on %s</string>
<string name="push_token_received_message">Hate wergirtin %1$s on %2$s</string>
<string name="push_token_sent_title">💸 Hate şandin %s</string>
<string name="push_token_sent_no_account_name_title">💸 Hate şandin</string>
@@ -949,7 +947,7 @@
<string name="push_staking_reward_single_account_title">⭐️ Nû reward</string>
<string name="push_staking_reward_many_accounts_title">⭐️ Nû reward %s</string>
<string name="push_staking_reward_message">Hate wergirtin %s ji %s staking</string>
<string name="push_staking_reward_message">Hate wergirtin %1$s ji %2$s staking</string>
<string name="push_referendum_approved_title">✅ Referandom approved!</string>
<string name="push_referendum_approved_message">%1$s referendum #%2$s has ended û been approved 🎉</string>
@@ -964,7 +962,7 @@
<string name="push_new_update_title">A nû update of Pezkuwi Cîzdan e available!</string>
<string name="push_new_update_message">Download Pezkuwi Cîzdan v%s to get hemû nû features!</string>
<string name="push_new_referendum_title">🗳️ Nû referendum</string>
<string name="push_new_referendum_message">%s Referandom #%s e niha live!</string>
<string name="push_new_referendum_message">%1$s Referandom #%2$s e niha live!</string>
<plurals name="governance_select_tracks_min_tracks_error">
<item quantity="one">You need to select at least %d track</item>
@@ -1013,11 +1011,11 @@
<string name="wallet_send_cannot_dust_before_delivery_fee_message">Due to cross-chain restrictions you dikare transfer ne bêtir than %s</string>
<string name="common_too_small_balance_title">Yê te balance e too small</string>
<string name="wallet_send_insufficient_balance_commission">You need to have at least %s to pay ev transaction fee û stay above minimum network balance. Yê te current balance e: %s. You need to add %s to yê te balance to perform ev operation.</string>
<string name="wallet_send_insufficient_balance_commission">You need to have at least %1$s to pay ev transaction fee û stay above minimum network balance. Yê te current balance e: %2$s. You need to add %3$s to yê te balance to perform ev operation.</string>
<string name="nft_issuance_fungible_format">%s units of %s</string>
<string name="nft_issuance_fungible_format">%1$s units of %2$s</string>
<string name="nft_fungile_price">%s ji bo %s</string>
<string name="nft_fungile_price">%1$s ji bo %2$s</string>
<string name="staking_set_controller_deprecated_subtitle">Use Proxies to delegate Staking operations to another account</string>
@@ -1052,10 +1050,10 @@
<string name="add_proxy_deposit_description_message"> deposit stays reserved on yê te account until proxy e removed.</string>
<string name="add_proxy_maximum_reached_error_title">Herî zêde number of proxies has been reached</string>
<string name="add_proxy_maximum_reached_error_message">You have reached limit of %s added proxies in %s. Rake proxies to add nû ones.</string>
<string name="add_proxy_maximum_reached_error_message">You have reached limit of %1$s added proxies in %2$s. Rake proxies to add nû ones.</string>
<string name="common_error_not_enough_tokens">Ne enough tokens</string>
<string name="staking_not_enough_balance_to_pay_proxy_deposit_message">You dont have enough balance ji bo proxy deposit of %s. Peyda balance: %s</string>
<string name="staking_not_enough_balance_to_pay_proxy_deposit_message">You dont have enough balance ji bo proxy deposit of %1$s. Peyda balance: %2$s</string>
<string name="staking_action_your_proxies">Yê te delegations</string>
<string name="staking_action_add_proxy">Lê zêde bike delegated authority (Proxy)</string>
@@ -1065,7 +1063,7 @@
<string name="fragment_set_staking_proxy_title">Lê zêde bike delegation ji bo %s staking</string>
<string name="common_enter_address">Enter address…</string>
<string name="proxy_error_not_enough_to_pay_fee_message">Delegated account %s doesnt have enough balance to pay network fee of %s. Peyda balance to pay fee: %s</string>
<string name="proxy_error_not_enough_to_pay_fee_message">Delegated account %1$s doesnt have enough balance to pay network fee of %2$s. Peyda balance to pay fee: %3$s</string>
<string name="staking_no_access_to_controller_account_title">Na access to controller account</string>
<string name="staking_no_access_to_controller_account_message">Lê zêde bike yê te controller account in device.</string>
@@ -1112,8 +1110,8 @@
<string name="wallet_filters_swaps">Swaps</string>
<string name="swap_failure_balance_not_consider_consumers">You should keep at least %s after paying %s network fee as you in holding non sufficient tokens</string>
<string name="swap_failure_balance_not_consider_non_sufficient_assets">You must keep at least %s to receive %s token</string>
<string name="swap_failure_balance_not_consider_consumers">You should keep at least %1$s after paying %2$s network fee as you in holding non sufficient tokens</string>
<string name="swap_failure_balance_not_consider_non_sufficient_assets">You must keep at least %1$s to receive %2$s token</string>
<string name="swap_rate_description">Exchange rate between two different cryptocurrencies. It represents how much of one cryptocurrency you dikare get in exchange ji bo a certain amount of another cryptocurrency.</string>
<string name="swap_price_difference_description">Biha difference refers to difference in price between two different assets. When making a swap in crypto, price difference e usually difference between price of asset you in swapping ji bo û price of asset you in swapping bi.</string>
@@ -1129,13 +1127,13 @@
<string name="swap_field_validation_not_enough_amount_to_swap">Ne enough tokens to swap</string>
<string name="swap_field_validation_to_low_amount_out">You dikaret receive kêmtir than %s</string>
<string name="common_cannot_pay_network_fee_message">You dikare use up to %s since you need to pay\n%s ji bo network fee.</string>
<string name="common_cannot_pay_network_fee_message">You dikare use up to %1$s since you need to pay\n%2$s ji bo network fee.</string>
<string name="swap_too_low_amount_to_stay_abow_ed_title">You in trying to swap too small amount</string>
<string name="swap_too_low_amount_to_stay_abow_ed_message">Mîqdar of %s e kêmtir than minimum balance of %s</string>
<string name="swap_too_low_amount_to_stay_abow_ed_message">Mîqdar of %1$s e kêmtir than minimum balance of %2$s</string>
<string name="swap_invalid_slippage_failure_title">Nederbasdar slippage</string>
<string name="swap_invalid_slippage_failure_message">Slippage must be specified between %s û %s</string>
<string name="swap_invalid_slippage_failure_message">Slippage must be specified between %1$s û %2$s</string>
<string name="swap_rate_was_updated_failure_title">Swap rate bû updated</string>
<string name="swap_rate_was_updated_failure_message">Kevn rate: %1$s ≈ %2$s.\nNew rate: %1$s ≈ %3$s</string>
<string name="swap_not_enought_liquidity_failure">Hewz doesnt have enough liquidity to swap</string>
@@ -1161,10 +1159,10 @@
<string name="swap_custom_fee_selector_description">Token ji bo paying network fee</string>
<string name="swap_custom_fee_selector_footer">Heqê torê e added on top of entered amount</string>
<string name="swap_minimum_balance_buy_in_alert">Bo pay network fee bi %s, Pezkuwi Cîzdan dê automatically swap %s ji bo %s to maintain yê te account\'s minimum %s balance.</string>
<string name="swap_minimum_balance_buy_in_alert">Bo pay network fee bi %1$s, Pezkuwi Cîzdan dê automatically swap %2$s ji bo %3$s to maintain yê te account\'s minimum %4$s balance.</string>
<string name="swap_slippage_disabled_button_state">Enter din value</string>
<string name="swap_slippage_error_not_in_available_range">Enter a value between %s û %s</string>
<string name="swap_slippage_error_not_in_available_range">Enter a value between %1$s û %2$s</string>
<string name="swap_slippage_warning_too_small">Danûstandin might be reverted because of low slippage tolerance.</string>
<string name="swap_slippage_warning_too_big">Danûstandin might be frontrun because of high slippage.</string>
<string name="swap_slippage">Slippage</string>
@@ -1176,7 +1174,7 @@
<string name="assets_swap_flow_receive_title">Token to receive</string>
<string name="swap_error_pair_not_supported">Ev pair e ne supported</string>
<string name="swap_price_impact">%s ≈ %s</string>
<string name="swap_price_impact">%1$s ≈ %2$s</string>
<string name="swap_field_subtitle_default">Hilbijêre a token</string>
<string name="swap_field_asset_from_title">Pay</string>
@@ -1200,7 +1198,7 @@
<string name="assets_buy_tokens_placeholder_button">Buy tokens</string>
<string name="assets_send_flow_placeholder">You dont have tokens to send.\nBuy an Deposit tokens to yê te account.</string>
<string name="common_days_and_hours_format_with_delimeter">%s û %s</string>
<string name="common_days_and_hours_format_with_delimeter">%1$s û %2$s</string>
<string name="common_frequency_days_daily">daily</string>
<string name="referendum_status_deciding">Deciding</string>
@@ -1226,7 +1224,7 @@
<string name="select_custom_pool_members">members</string>
<string name="setup_staking_type_staking_amount_is_less_than_min_amount_title">Yê te stake e kêmtir than minimum to earn rewards</string>
<string name="setup_staking_type_direct_staking_amount_is_less_than_min_amount_message">You have specified kêmtir than minimum stake of %s required to earn rewards bi %s. You should consider using Hewz staking to earn rewards.</string>
<string name="setup_staking_type_direct_staking_amount_is_less_than_min_amount_message">You have specified kêmtir than minimum stake of %1$s required to earn rewards bi %2$s. You should consider using Hewz staking to earn rewards.</string>
<string name="setup_staking_type_already_used_title">Staking type nikare be changed</string>
<string name="setup_staking_type_pool_already_used_message">You in already staking in a pool</string>
<string name="setup_staking_type_direct_already_used_message">You in already have Direct staking</string>
@@ -1263,23 +1261,23 @@
<string name="staking_unable_to_stake_more_message">You in unstaking hemû of yê te tokens û dikare\'t stake bêtir.</string>
<string name="staking_stake_max">Stake max</string>
<string name="staking_pool_available_validation_message">Yê te available balance e %s, you need to leave %s as minimal balance û pay network fee of %s. You dikare stake ne bêtir than %s.</string>
<string name="staking_pool_available_validation_message">Yê te available balance e %1$s, you need to leave %2$s as minimal balance û pay network fee of %3$s. You dikare stake ne bêtir than %4$s.</string>
<string name="staking_staking_type">Staking type</string>
<string name="start_staking_inactive_pool_message"> pool you have selected e inactive due to no validators selected an its stake e kêmtir than minimum.\nAre you sure you want to proceed bi selected Hewz?</string>
<string name="start_staking_cant_stake_amount">You dikare\'t stake specified amount</string>
<string name="start_staking_available_balance_gap_message">You have locked tokens on yê te balance due to %s. In order to continue you should enter kêmtir than %s an bêtir than %s. Bo stake another amount you should remove yê te %s locks.</string>
<string name="start_staking_available_balance_gap_message">You have locked tokens on yê te balance due to %1$s. In order to continue you should enter kêmtir than %2$s an bêtir than %3$s. Bo stake another amount you should remove yê te %4$s locks.</string>
<string name="start_staking_max_nominators_reached_title">%s e currently unavailable</string>
<string name="start_staking_max_nominators_reached_message"> maximum number of nominators has been reached. Dîsa biceribîne later</string>
<string name="start_staking_selection_validators_subtitle">Pejirandkar: %d (max %d)</string>
<string name="start_staking_editing_selection_validators_subtitle">Selected: %d (max %d)</string>
<string name="start_staking_selection_validators_subtitle">Pejirandkar: %1$d (max %2$d)</string>
<string name="start_staking_editing_selection_validators_subtitle">Selected: %1$d (max %2$d)</string>
<string name="common_recommended">Recommended</string>
<string name="common_fee_changed_title">Heqê torê e too high</string>
<string name="common_fee_changed_message"> estimated network fee %s e much higher than default network fee (%s). Ev might be due to temporary network congestion. You dikare refresh to wait ji bo a lower network fee.</string>
<string name="common_fee_changed_message"> estimated network fee %1$s e much higher than default network fee (%2$s). Ev might be due to temporary network congestion. You dikare refresh to wait ji bo a lower network fee.</string>
<string name="common_refresh_fee">Nû bike fee</string>
<string name="send_recipient_system_account_title">Token dê be lost</string>
@@ -1294,7 +1292,7 @@
<string name="nomination_pools_pool_reached_unbondings_limit_title">Too many people in unstaking ji yê te pool</string>
<string name="nomination_pools_pool_reached_unbondings_limit_message">There in currently no free spots in unstaking queue ji bo yê te pool. Ji kerema xwe try again in %s</string>
<string name="staking_unbond_crossed_existential">When unstaking partially, you should leave at least %s in stake. Do you want to perform full unstake by unstaking remaining %s as well?</string>
<string name="staking_unbond_crossed_existential">When unstaking partially, you should leave at least %1$s in stake. Do you want to perform full unstake by unstaking remaining %2$s as well?</string>
<string name="staking_unbond_crossed_existential_title">Too small amount remains in stake</string>
<string name="nomination_pools_pool_destroying_error_message">Cannot perform specified operation since pool e in destroying state. It dê be closed soon.</string>
@@ -1345,7 +1343,7 @@
<string name="start_staking_fragment_terms_of_use">See %s</string>
<string name="start_staking_fragment_terms_of_use_clicable_part">Şert of Use</string>
<string name="account_parity_signer_sign_qr_code_expired_descrition">Ji bo security reasons generated operations valid ji bo only %s.\nPlease generate nû Koda QR û sign it bi %s</string>
<string name="account_parity_signer_sign_qr_code_expired_descrition">Ji bo security reasons generated operations valid ji bo only %1$s.\nPlease generate nû Koda QR û sign it bi %2$s</string>
<string name="account_parity_signer_import_scan_invalid_qr">Nederbasdar Koda QR, ji kerema xwe make sure you in scanning Koda QR ji %s</string>
<string name="account_parity_signer_sign_have_error">I have an error in %s</string>
<string name="account_parity_signer_sign_title">Îmze bike bi %s</string>
@@ -1355,7 +1353,7 @@
<string name="account_details_parity_signer_alert">Ev wallet e paired bi %1$s. Pezkuwi Cîzdan dê help you to form her operations you want, û you dê be requested to sign them using %1$s</string>
<string name="account_details_parity_signer_not_supported">Ne supported by %s</string>
<string name="account_parity_signer_not_supported_subtitle">%s does ne support signing arbitrary messages — only transactions</string>
<string name="account_parity_signer_chain_not_supported">%s doesnt support %s</string>
<string name="account_parity_signer_chain_not_supported">%1$s doesnt support %2$s</string>
<string name="account_polkadot_vault_import_start_empty_derivation_hint">Pay attention, derivation path name should be empty</string>
@@ -1370,7 +1368,7 @@
<string name="transfer_history_income_from">Ji: %s</string>
<string name="transfer_history_send_to">Bo: %s</string>
<string name="transaction_history_fiat_with_time">%s at %s</string>
<string name="transaction_history_fiat_with_time">%1$s at %2$s</string>
<string name="referenda_list_filter_placeholder">There in no referenda bi filters applied</string>
@@ -1495,13 +1493,13 @@
<string name="web3names_unsupported_asset_title">Token %s e ne supported yet</string>
<string name="web3names_unsupported_asset_message">Pezkuwi Cîzdan dikare\'t resolve code ji bo token %s</string>
<string name="web3names_address_with_description">%s (%s)</string>
<string name="web3names_address_with_description">%1$s (%2$s)</string>
<string name="web3names_invalid_recepient_title">Nederbasdar recipient</string>
<string name="web3names_service_unavailable_title">Çewtî resolving w3n</string>
<string name="web3names_service_unavailable_message">%1$s w3n services in unavailable. Dîsa biceribîne later an enter %1$s address manually</string>
<string name="web3names_recepient_not_found_message">%s ne found</string>
<string name="web3names_no_valid_recepient_found_message">Na valid address bû found ji bo %s on %s network</string>
<string name="web3names_identifiers_sheet_title">%s addresses ji bo %s</string>
<string name="web3names_no_valid_recepient_found_message">Na valid address bû found ji bo %1$s on %2$s network</string>
<string name="web3names_identifiers_sheet_title">%1$s addresses ji bo %2$s</string>
<string name="common_no_app_to_handle_intent">Na suitable app found on device to handle ev intent</string>
@@ -1563,7 +1561,7 @@
<string name="referendum_track_medium_spender">Treasury: medium spend</string>
<string name="referendum_track_big_spender">Treasury: big spend</string>
<string name="delegation_referendum_vote">Yê te votes: %s via %s</string>
<string name="delegation_referendum_vote">Yê te votes: %1$s via %2$s</string>
<string name="delegation_referendum_details_vote">Yê te votes via %s</string>
<string name="delegation_delegate">Delegat bike</string>
@@ -1582,14 +1580,14 @@
<string name="delegation_remove_votes">Rake votes</string>
<string name="delegation_tracks">Tracks</string>
<string name="common_element_and_more_format">%s (+%s bêtir)</string>
<string name="common_element_and_more_format">%1$s (+%2$s bêtir)</string>
<string name="delegation_all_votes">Voted ji bo hemû time</string>
<string name="delegation_delegate_info">Delegat bike info</string>
<string name="referendum_voted_referenda">Voted referenda</string>
<string name="referendum_other_votes">%s votes by %s</string>
<string name="referendum_other_votes">%1$s votes by %2$s</string>
<string name="delegation_your_delegations">Yê te delegations</string>
@@ -1755,7 +1753,7 @@
<string name="referendum_timeline_state_passing">Dengdan: Passing</string>
<string name="referendum_timeline_state_not_passing">Dengdan: Ne passing</string>
<string name="referendum_in_queue_position_format">Position: %s of %s</string>
<string name="referendum_in_queue_position_format">Position: %1$s of %2$s</string>
<string name="referendum_timeline_state_created">Hate afirandin</string>
<string name="referendum_timeline_state_approved">Voted: Hate pejirandin</string>
@@ -1781,11 +1779,11 @@
<string name="referendum_name_unknown">Referandom %s</string>
<string name="referendum_support_threshold_format">Threshold: %s of %s</string>
<string name="referendum_support_threshold_format">Threshold: %1$s of %2$s</string>
<string name="referendum_your_vote_format">Yê te vote: %s votes</string>
<string name="referendum_status_approved">Hate pejirandin</string>
<string name="referendum_status_in_queue_format">In queue (%s of %s)</string>
<string name="referendum_status_in_queue_format">In queue (%1$s of %2$s)</string>
<string name="referendum_status_timeout">Timed out</string>
<string name="referendum_status_cancelled">Cancelled</string>
<string name="referendum_status_passing">Passing</string>
@@ -1829,7 +1827,7 @@
<string name="referendum_description_fallback">Only proposer dikare edit ev description û title. If you own proposer\'s account, visit Polkassembly û fill in information about yê te proposal</string>
<string name="referendum_voter_vote">%s votes</string>
<string name="referendum_voter_vote_details">%s × %sx</string>
<string name="referendum_voter_vote_details">%1$s × %2$sx</string>
<string name="confirm_referendum_vote_title">Deng bide</string>
<string name="confirm_referendum_vote_track">Track</string>
@@ -1844,7 +1842,7 @@
<string name="assets_balance_details_locks_crowdloans">Crowdloan</string>
<string name="common_accept_terms">Accept terms...</string>
<string name="yield_boost_terms">Yield Boost dê automatically stake %s hemû my transferable tokens above %s</string>
<string name="yield_boost_terms">Yield Boost dê automatically stake %1$s hemû my transferable tokens above %2$s</string>
<string name="yield_boost_stake_increase_time">Stake increase time</string>
<string name="yiled_boost_yield_boosted">Yield Boosted</string>
@@ -1853,10 +1851,10 @@
<string name="yield_boost_already_enabled_message">Yield Boost dê be turned off ji bo current collators. Nû collator: %s</string>
<string name="yield_boost_not_enough_threshold_title">Ne enough tokens to stay above threshold</string>
<string name="yield_boost_not_enough_threshold_message">You dont have enough balance to pay network fee of %s û ne drop below threshold %s.\nAvailable balance to pay fee: %s</string>
<string name="yield_boost_not_enough_threshold_message">You dont have enough balance to pay network fee of %1$s û ne drop below threshold %2$s.\nAvailable balance to pay fee: %3$s</string>
<string name="yield_boost_not_enough_execution_fee_title">Ne enough tokens to pay first execution fee</string>
<string name="yield_boost_not_enough_execution_fee_message">You dont have enough balance to pay network fee of %s û yield boost execution fee of %s.\nAvailable balance to pay fee: %s</string>
<string name="yield_boost_not_enough_execution_fee_message">You dont have enough balance to pay network fee of %1$s û yield boost execution fee of %2$s.\nAvailable balance to pay fee: %3$s</string>
<string name="common_no_changes">Na changes</string>
@@ -1866,7 +1864,7 @@
<string name="staking_turing_collator_title">Ji bo my collator</string>
<string name="staking_turing_restake_title">I want to stake</string>
<string name="staking_turing_frequency_new_title">to automatically stake %s hemû my transferable tokens above</string>
<string name="staking_turing_frequency_update_title">to automatically stake %s (before: %s) hemû my transferable tokens above</string>
<string name="staking_turing_frequency_update_title">to automatically stake %1$s (before: %2$s) hemû my transferable tokens above</string>
<string name="common_frequency_days_everyday">everyday</string>
<plurals name="common_frequency_days">
@@ -1883,7 +1881,7 @@
<string name="ledger_sign_raw_not_supported">Ledger does ne support signing arbitrary messages — only transactions</string>
<string name="assets_receive_ledger_not_supported_message">Do ne transfer %s to Ledger-controlled account since Ledger does ne support sending of %s, so assets dê be stuck on ev account</string>
<string name="assets_receive_ledger_not_supported_message">Do ne transfer %1$s to Ledger-controlled account since Ledger does ne support sending of %2$s, so assets dê be stuck on ev account</string>
<string name="assets_receive_ledger_not_supported_title">Ledger does ne support ev token</string>
<string name="common_signature_invalid">Îmze e invalid</string>
@@ -2019,7 +2017,7 @@
</plurals>
<string name="wallet_send_myself">Myself</string>
<string name="wallet_send_cannot_pay_cross_chain_fee">You dont have enough balance to pay Cross-chain fee of %s.\nRemaining balance after transfer: %s</string>
<string name="wallet_send_cannot_pay_cross_chain_fee">You dont have enough balance to pay Cross-chain fee of %1$s.\nRemaining balance after transfer: %2$s</string>
<string name="wallet_send_confirm_hint">Cross-chain fee e added on top of entered amount. Recipient may receive part of cross-chain fee</string>
@@ -2197,7 +2195,7 @@
<string name="nft_created_by">Hate afirandin by</string>
<string name="nft_issuance_unlimited">Unlimited series</string>
<string name="nft_issuance_limited_format">#%s Edition of %s</string>
<string name="nft_issuance_limited_format">#%1$s Edition of %2$s</string>
<string name="nft_your_nfts">Yê te NFTs</string>
<string name="wallet_assets_empty">Yê te assets dê appear li vir.\nMake sure "Hide zero balances" filter e turned off</string>
@@ -2758,6 +2756,9 @@
<string name="bridge_enter_amount">Mîqdar binivîse</string>
<string name="bridge_hez_to_dot_warning">Guherandina HEZ→DOT li gorî rewşa DOT sînordar dibe.</string>
<string name="bridge_hez_to_dot_blocked">Guherandina HEZ→DOT niha tune. Dema DOT têr bibe dîsa biceribîne.</string>
<string name="bridge_wusdt_to_usdt_blocked">Guherandina USDT(Pez)→USDT(Pol) niha tune. Li benda damezrandina lîkîdîteya 1:1.</string>
<string name="staking_dashboard_syncing">Agahdariya staking tê barkirin…</string>
<string name="pezkuwi_dashboard_title">Pezkuwi</string>
<string name="pezkuwi_dashboard_trust_score">Pûana Pêbaweriyê</string>
File diff suppressed because it is too large Load Diff
+75 -77
View File
@@ -53,7 +53,7 @@
<string name="gift_reclaimed_subtitle">Reclaimed</string>
<string name="gifts_claim_fee">Network fee on claim</string>
<string name="share_gift_text">Hello! Youve got a %s gift waiting for you!\n\nInstall Pezkuwi Wallet app, set up your wallet, and claim it via this special link:\n%s</string>
<string name="share_gift_text">Hello! Youve got a %1$s gift waiting for you!\n\nInstall Pezkuwi Wallet app, set up your wallet, and claim it via this special link:\n%2$s</string>
<string name="share_gift_title">Gift Has Been Prepared.\nShare It Now!</string>
<string name="share_gift_button">Share gift link</string>
@@ -96,9 +96,9 @@
<string name="staking_details_migration_alert_title">%1$s staking is live on %2$s starting %3$s</string>
<string name="common_view">View</string>
<string name="transaction_history_migration_source_message">Your previous %s transaction history is still available on %s</string>
<string name="transaction_history_migration_source_message">Your previous %1$s transaction history is still available on %2$s</string>
<string name="asset_details_source_asset_alert_title">Your %s tokens now on %s</string>
<string name="asset_details_source_asset_alert_title">Your %1$s tokens now on %2$s</string>
<string name="asset_details_source_asset_alert_message">Starting %1$s, your %2$s balance, Staking, and Governance will be on %3$s — with improved performance and lower costs.</string>
<string name="asset_details_source_asset_alert_button">Go to %s</string>
@@ -143,8 +143,8 @@
<string name="multisig_transaction_executed_dialog_title">Multisig Transaction Executed</string>
<string name="multisig_transaction_rejected_dialog_title">Multisig Transaction Rejected</string>
<string name="multisig_transaction_rejected_dialog_message">%s on %s.\nRejected by: %s.\nNo further actions are required from you.</string>
<string name="multisig_transaction_executed_dialog_message">%s on %s.\nNo further actions are required from you.</string>
<string name="multisig_transaction_rejected_dialog_message">%1$s on %2$s.\nRejected by: %3$s.\nNo further actions are required from you.</string>
<string name="multisig_transaction_executed_dialog_message">%1$s on %2$s.\nNo further actions are required from you.</string>
<string name="multisig_transaction_dialog_message_unknown_call">Transaction without initial on-chain information (call data) was rejected</string>
@@ -157,12 +157,12 @@
<string name="multisig_notification_executed_transaction_title">✅ Multisig transaction executed</string>
<string name="multisig_notification_executed_transaction_message">Signed and executed by %s.</string>
<string name="multisig_notification_new_approval_title_additional_message">%d of %d signatures collected.</string>
<string name="multisig_notification_new_approval_title_additional_message">%1$d of %2$d signatures collected.</string>
<string name="multisig_notification_new_approval_title">Signed by %s</string>
<string name="multisig_notification_init_transaction_title">✍🏻 Your signature requested </string>
<string name="multisig_notification_init_transaction_message">%s on %s.</string>
<string name="multisig_operation_default_call_format">%s: %s</string>
<string name="multisig_notification_init_transaction_message">%1$s on %2$s.</string>
<string name="multisig_operation_default_call_format">%1$s: %2$s</string>
<string name="multisig_notification_initiator_footer">Initiated by %s.</string>
<string name="multisig_notification_message_header">Wallet: %s</string>
@@ -213,16 +213,16 @@
<string name="common_signatory">Signatory</string>
<string name="common_hide">Hide</string>
<string name="common_show">Show</string>
<string name="multisig_operation_details_signatories">Signatories (%d of %d)</string>
<string name="multisig_operation_details_signatories">Signatories (%1$d of %2$d)</string>
<string name="swap_dry_run_failed_inline_message">Simulation of swap step failed</string>
<string name="common_dry_run_failed_title">Transaction simulation failed</string>
<string name="common_dry_run_failed_message">Pezkuwi Wallet simulates the transaction beforehand to prevent errors. This simulation didnt succeed. Try again later or with a higher amount. If the issue persists, please contact Pezkuwi Wallet Support in Settings.</string>
<string name="multisig_signatory_validation_deposit_fee">%s doesnt have enough balance to pay the network fee of %s and place multisig deposit of %s. You need to add %s more to your balance</string>
<string name="multisig_signatory_validation_deposit">%s doesnt have enough balance to place multisig deposit of %s. You need to add %s more to your balance</string>
<string name="multisig_signatory_validation_fee">%s doesnt have enough balance to pay the network fee of %s. You need to add %s more to your balance</string>
<string name="multisig_signatory_validation_deposit_fee">%1$s doesnt have enough balance to pay the network fee of %2$s and place multisig deposit of %3$s. You need to add %4$s more to your balance</string>
<string name="multisig_signatory_validation_deposit">%1$s doesnt have enough balance to place multisig deposit of %2$s. You need to add %3$s more to your balance</string>
<string name="multisig_signatory_validation_fee">%1$s doesnt have enough balance to pay the network fee of %2$s. You need to add %3$s more to your balance</string>
<string name="invalid_call_data_title">Invalid call data</string>
<string name="invalid_call_data_message">This call data for another operation with call hash %s</string>
@@ -233,7 +233,7 @@
<string name="multisig_wallet_details_info_warning_other_signatories">Other signatories:</string>
<string name="multisig_wallet_details_info_warning_title">Threshold %d out of %d</string>
<string name="multisig_wallet_details_info_warning_title">Threshold %1$d out of %2$d</string>
<string name="multisig_card_not_supported_title">Debit Card is not supported for Multisig</string>
<string name="multisig_card_not_supported_message">To manage your Debit Card, please switch to a different type of wallet.</string>
@@ -244,7 +244,7 @@
<string name="multisig_pending_operations">Transactions to sign</string>
<string name="multisig_operations_progress">Signing (%s of %s)</string>
<string name="multisig_operations_progress">Signing (%1$s of %2$s)</string>
<string name="multisig_operations_created">Created by you</string>
@@ -259,7 +259,7 @@
<string name="multisig_callhash_exists_title">Operation already exists</string>
<string name="multisig_callhash_exists_message">%s has already initiated the same operation and it is currently waiting to be signed by other signatories.</string>
<string name="multisig_signatory_validation_ed">%s needs at least %s to pay this transaction fee and stay above the minimum network balance. Current balance is: %s</string>
<string name="multisig_signatory_validation_ed">%1$s needs at least %2$s to pay this transaction fee and stay above the minimum network balance. Current balance is: %3$s</string>
<string name="multisig_signing_is_not_supported_message">Multisig wallets do not support signing arbitrary messages — only transactions</string>
@@ -289,7 +289,7 @@
<string name="multisig_signatory">Signatory:</string>
<string name="swap_failure_cannot_receive_insufficient_asset_out">You must have at least %s on %s to receive %s token</string>
<string name="swap_failure_cannot_receive_insufficient_asset_out">You must have at least %1$s on %2$s to receive %3$s token</string>
<string name="account_migration_title">Welcome to Pezkuwi Wallet!</string>
<string name="account_migration_subtitle">Youre almost there! 🎉\n Just tap below to complete the setup and start using your accounts seamlessly in both the Polkadot App and Pezkuwi Wallet</string>
@@ -429,8 +429,8 @@
<string name="price_charts_period_year">Last Year</string>
<string name="price_charts_period_all">All Time</string>
<string name="price_chart_date_format">%s at %s</string>
<string name="price_chart_price_change">%s (%s)</string>
<string name="price_chart_date_format">%1$s at %2$s</string>
<string name="price_chart_price_change">%1$s (%2$s)</string>
<string name="price_chart_title">%s price</string>
<string name="price_chart_day">1D</string>
@@ -447,9 +447,9 @@
<string name="popular_dapps_title">Popular</string>
<string name="swap_intermediate_too_low_amount_to_stay_abow_ed_message">During swap execution intermediate receive amount is %s which is less than minimum balance of %s. Try specifying larger swap amount.</string>
<string name="swap_intermediate_too_low_amount_to_stay_abow_ed_message">During swap execution intermediate receive amount is %1$s which is less than minimum balance of %2$s. Try specifying larger swap amount.</string>
<string name="common_not_enough_to_pay_fee_message">You don\'t have enough balance to pay network fee of %s. Current balance is %s</string>
<string name="common_not_enough_to_pay_fee_message">You don\'t have enough balance to pay network fee of %1$s. Current balance is %2$s</string>
<string name="common_sec">sec</string>
@@ -457,19 +457,19 @@
<string name="common_failed">Failed</string>
<string name="swap_execution_operations_progress">%s of %s operations</string>
<string name="swap_execution_operations_progress">%1$s of %2$s operations</string>
<plurals name="swap_execution_operations_completed">
<item quantity="one">%s operation</item>
<item quantity="other">%s operations</item>
</plurals>
<string name="swap_execution_progress_swap_label">Swapping %s to %s on %s</string>
<string name="swap_execution_progress_transfer_label">Transferring %s to %s</string>
<string name="swap_execution_progress_swap_label">Swapping %1$s to %2$s on %3$s</string>
<string name="swap_execution_progress_transfer_label">Transferring %1$s to %2$s</string>
<string name="swap_execution_failure">Failed on operation #%s (%s)</string>
<string name="swap_execution_failure_swap_label">%s to %s swap on %s</string>
<string name="swap_execution_failure_transfer_label">%s transfer from %s to %s</string>
<string name="swap_execution_failure">Failed on operation #%1$s (%2$s)</string>
<string name="swap_execution_failure_swap_label">%1$s to %2$s swap on %3$s</string>
<string name="swap_execution_failure_transfer_label">%1$s transfer from %2$s to %3$s</string>
<plurals name="common_seconds_format">
<item quantity="one">%d second</item>
@@ -529,7 +529,7 @@
<string name="common_use_max">Use max</string>
<string name="swipe_gov_insufficient_balance_dialog_title">Insufficient balance for voting</string>
<string name="swipe_gov_insufficient_balance_dialog_message">You don\'t have enough balance to vote with the current voting power %s (%sx). Please change voting power or add more funds to your wallet.</string>
<string name="swipe_gov_insufficient_balance_dialog_message">You don\'t have enough balance to vote with the current voting power %1$s (%2$sx). Please change voting power or add more funds to your wallet.</string>
<string name="swipe_gov_convirm_votes_success_message">You have successfully voted for %d referenda</string>
<string name="swipe_gov_vote_setup_title">Vote for %d referenda</string>
@@ -772,7 +772,7 @@
<string name="manual_backup_select_account_default_key_title">Accounts with default key</string>
<string name="manual_backup_select_account_custom_key_title">Accounts with custom key</string>
<string name="manual_backup_select_account_default_key_account">Default accounts</string>
<string name="manual_backup_select_account_default_key_account_subtitle_more_chains">%s, +%d others</string>
<string name="manual_backup_select_account_default_key_account_subtitle_more_chains">%1$s, +%2$d others</string>
<string name="manual_backup_select_account_header">Select the key to back up</string>
<string name="manual_backup_select_wallet_header">Select a wallet to back up</string>
@@ -822,7 +822,7 @@
<string name="common_change_password">Change password</string>
<string name="cloud_backup_settings_disabled_state_subtitle">Enable to backup wallets to your Google Drive</string>
<string name="cloud_backup_settings_last_sync">Last sync: %s at %s</string>
<string name="cloud_backup_settings_last_sync">Last sync: %1$s at %2$s</string>
<string name="cloud_backup_settings_not_auth_button">Sign In to Google Drive</string>
<string name="cloud_backup_settings_deprecated_password_button">Enter Backup Password</string>
<string name="cloud_backup_settings_corrupted_backup_button">Review Backup Updates</string>
@@ -861,7 +861,7 @@
<string name="cloud_backup_delete_button">Delete Backup</string>
<string name="restore_cloud_backup_delete_backup_title">Have you lost your password?</string>
<string name="restore_cloud_backup_delete_backup_description">%s It\'s exclusively yours, securely stored, inaccessible to others. Without the backup password, restoring wallets from Google Drive is impossible. If lost, delete the current backup to create a new one with a fresh password. %s</string>
<string name="restore_cloud_backup_delete_backup_description">%1$s It\'s exclusively yours, securely stored, inaccessible to others. Without the backup password, restoring wallets from Google Drive is impossible. If lost, delete the current backup to create a new one with a fresh password. %2$s</string>
<string name="restore_cloud_backup_delete_backup_description_highlighted_1">Unfortunately, your password cannot be recovered.</string>
<string name="restore_cloud_backup_delete_backup_description_highlighted_2">Alternatively, use Passphrase for restoration.</string>
@@ -959,7 +959,7 @@
<string name="push_token_received_title">⬇️ Received %s</string>
<string name="push_token_received_no_account_name_title">⬇️ Received</string>
<string name="push_token_received_message">Received %s on %s</string>
<string name="push_token_received_message">Received %1$s on %2$s</string>
<string name="push_token_sent_title">💸 Sent %s</string>
<string name="push_token_sent_no_account_name_title">💸 Sent</string>
@@ -967,7 +967,7 @@
<string name="push_staking_reward_single_account_title">⭐️ New reward</string>
<string name="push_staking_reward_many_accounts_title">⭐️ New reward %s</string>
<string name="push_staking_reward_message">Received %s from %s staking</string>
<string name="push_staking_reward_message">Received %1$s from %2$s staking</string>
<string name="push_referendum_approved_title">✅ Referendum approved!</string>
<string name="push_referendum_approved_message">%1$s referendum #%2$s has ended and been approved 🎉</string>
@@ -982,7 +982,7 @@
<string name="push_new_update_title">A new update of Pezkuwi Wallet is available!</string>
<string name="push_new_update_message">Download Pezkuwi Wallet v%s to get all the new features!</string>
<string name="push_new_referendum_title">🗳️ New referendum</string>
<string name="push_new_referendum_message">%s Referendum #%s is now live!</string>
<string name="push_new_referendum_message">%1$s Referendum #%2$s is now live!</string>
<plurals name="governance_select_tracks_min_tracks_error">
<item quantity="one">You need to select at least %d track</item>
@@ -1031,11 +1031,11 @@
<string name="wallet_send_cannot_dust_before_delivery_fee_message">Due to the cross-chain restrictions you can transfer not more than %s</string>
<string name="common_too_small_balance_title">Your balance is too small</string>
<string name="wallet_send_insufficient_balance_commission">You need to have at least %s to pay this transaction fee and stay above the minimum network balance. Your current balance is: %s. You need to add %s to your balance to perform this operation.</string>
<string name="wallet_send_insufficient_balance_commission">You need to have at least %1$s to pay this transaction fee and stay above the minimum network balance. Your current balance is: %2$s. You need to add %3$s to your balance to perform this operation.</string>
<string name="nft_issuance_fungible_format">%s units of %s</string>
<string name="nft_issuance_fungible_format">%1$s units of %2$s</string>
<string name="nft_fungile_price">%s for %s</string>
<string name="nft_fungile_price">%1$s for %2$s</string>
<string name="staking_set_controller_deprecated_subtitle">Use Proxies to delegate Staking operations to another account</string>
@@ -1070,10 +1070,10 @@
<string name="add_proxy_deposit_description_message">The deposit stays reserved on your account until the proxy is removed.</string>
<string name="add_proxy_maximum_reached_error_title">Maximum number of proxies has been reached</string>
<string name="add_proxy_maximum_reached_error_message">You have reached the limit of %s added proxies in %s. Remove proxies to add new ones.</string>
<string name="add_proxy_maximum_reached_error_message">You have reached the limit of %1$s added proxies in %2$s. Remove proxies to add new ones.</string>
<string name="common_error_not_enough_tokens">Not enough tokens</string>
<string name="staking_not_enough_balance_to_pay_proxy_deposit_message">You dont have enough balance for proxy deposit of %s. Available balance: %s</string>
<string name="staking_not_enough_balance_to_pay_proxy_deposit_message">You dont have enough balance for proxy deposit of %1$s. Available balance: %2$s</string>
<string name="staking_action_your_proxies">Your delegations</string>
<string name="staking_action_add_proxy">Add delegated authority (Proxy)</string>
@@ -1083,7 +1083,7 @@
<string name="fragment_set_staking_proxy_title">Add delegation for %s staking</string>
<string name="common_enter_address">Enter address…</string>
<string name="proxy_error_not_enough_to_pay_fee_message">Delegated account %s doesnt have enough balance to pay the network fee of %s. Available balance to pay fee: %s</string>
<string name="proxy_error_not_enough_to_pay_fee_message">Delegated account %1$s doesnt have enough balance to pay the network fee of %2$s. Available balance to pay fee: %3$s</string>
<string name="staking_no_access_to_controller_account_title">No access to controller account</string>
<string name="staking_no_access_to_controller_account_message">Add your controller account in device.</string>
@@ -1130,8 +1130,8 @@
<string name="wallet_filters_swaps">Swaps</string>
<string name="swap_failure_balance_not_consider_consumers">You should keep at least %s after paying %s network fee as you are holding non sufficient tokens</string>
<string name="swap_failure_balance_not_consider_non_sufficient_assets">You must keep at least %s to receive %s token</string>
<string name="swap_failure_balance_not_consider_consumers">You should keep at least %1$s after paying %2$s network fee as you are holding non sufficient tokens</string>
<string name="swap_failure_balance_not_consider_non_sufficient_assets">You must keep at least %1$s to receive %2$s token</string>
<string name="swap_rate_description">Exchange rate between two different cryptocurrencies. It represents how much of one cryptocurrency you can get in exchange for a certain amount of another cryptocurrency.</string>
<string name="swap_price_difference_description">Price difference refers to the difference in price between two different assets. When making a swap in crypto, the price difference is usually the difference between the price of the asset you are swapping for and the price of the asset you are swapping with.</string>
@@ -1147,13 +1147,13 @@
<string name="swap_field_validation_not_enough_amount_to_swap">Not enough tokens to swap</string>
<string name="swap_field_validation_to_low_amount_out">You cant receive less than %s</string>
<string name="common_cannot_pay_network_fee_message">You can use up to %s since you need to pay\n%s for network fee.</string>
<string name="common_cannot_pay_network_fee_message">You can use up to %1$s since you need to pay\n%2$s for network fee.</string>
<string name="swap_too_low_amount_to_stay_abow_ed_title">You are trying to swap too small amount</string>
<string name="swap_too_low_amount_to_stay_abow_ed_message">Amount of %s is less than minimum balance of %s</string>
<string name="swap_too_low_amount_to_stay_abow_ed_message">Amount of %1$s is less than minimum balance of %2$s</string>
<string name="swap_invalid_slippage_failure_title">Invalid slippage</string>
<string name="swap_invalid_slippage_failure_message">Slippage must be specified between %s and %s</string>
<string name="swap_invalid_slippage_failure_message">Slippage must be specified between %1$s and %2$s</string>
<string name="swap_rate_was_updated_failure_title">Swap rate was updated</string>
<string name="swap_rate_was_updated_failure_message">Old rate: %1$s ≈ %2$s.\nNew rate: %1$s ≈ %3$s</string>
<string name="swap_not_enought_liquidity_failure">Pool doesnt have enough liquidity to swap</string>
@@ -1179,10 +1179,10 @@
<string name="swap_custom_fee_selector_description">Token for paying network fee</string>
<string name="swap_custom_fee_selector_footer">Network fee is added on top of entered amount</string>
<string name="swap_minimum_balance_buy_in_alert">To pay network fee with %s, Pezkuwi Wallet will automatically swap %s for %s to maintain your account\'s minimum %s balance.</string>
<string name="swap_minimum_balance_buy_in_alert">To pay network fee with %1$s, Pezkuwi Wallet will automatically swap %2$s for %3$s to maintain your account\'s minimum %4$s balance.</string>
<string name="swap_slippage_disabled_button_state">Enter other value</string>
<string name="swap_slippage_error_not_in_available_range">Enter a value between %s and %s</string>
<string name="swap_slippage_error_not_in_available_range">Enter a value between %1$s and %2$s</string>
<string name="swap_slippage_warning_too_small">Transaction might be reverted because of low slippage tolerance.</string>
<string name="swap_slippage_warning_too_big">Transaction might be frontrun because of high slippage.</string>
<string name="swap_slippage">Slippage</string>
@@ -1194,7 +1194,7 @@
<string name="assets_swap_flow_receive_title">Token to receive</string>
<string name="swap_error_pair_not_supported">This pair is not supported</string>
<string name="swap_price_impact">%s ≈ %s</string>
<string name="swap_price_impact">%1$s ≈ %2$s</string>
<string name="swap_field_subtitle_default">Select a token</string>
<string name="swap_field_asset_from_title">Pay</string>
@@ -1218,7 +1218,7 @@
<string name="assets_buy_tokens_placeholder_button">Buy tokens</string>
<string name="assets_send_flow_placeholder">You dont have tokens to send.\nBuy or Deposit tokens to your account.</string>
<string name="common_days_and_hours_format_with_delimeter">%s and %s</string>
<string name="common_days_and_hours_format_with_delimeter">%1$s and %2$s</string>
<string name="common_frequency_days_daily">daily</string>
<string name="referendum_status_deciding">Deciding</string>
@@ -1244,7 +1244,7 @@
<string name="select_custom_pool_members">members</string>
<string name="setup_staking_type_staking_amount_is_less_than_min_amount_title">Your stake is less than the minimum to earn rewards</string>
<string name="setup_staking_type_direct_staking_amount_is_less_than_min_amount_message">You have specified less than the minimum stake of %s required to earn rewards with %s. You should consider using Pool staking to earn rewards.</string>
<string name="setup_staking_type_direct_staking_amount_is_less_than_min_amount_message">You have specified less than the minimum stake of %1$s required to earn rewards with %2$s. You should consider using Pool staking to earn rewards.</string>
<string name="setup_staking_type_already_used_title">Staking type cannot be changed</string>
<string name="setup_staking_type_pool_already_used_message">You are already staking in a pool</string>
<string name="setup_staking_type_direct_already_used_message">You are already have Direct staking</string>
@@ -1281,23 +1281,23 @@
<string name="staking_unable_to_stake_more_message">You are unstaking all of your tokens and can\'t stake more.</string>
<string name="staking_stake_max">Stake max</string>
<string name="staking_pool_available_validation_message">Your available balance is %s, you need to leave %s as minimal balance and pay network fee of %s. You can stake not more than %s.</string>
<string name="staking_pool_available_validation_message">Your available balance is %1$s, you need to leave %2$s as minimal balance and pay network fee of %3$s. You can stake not more than %4$s.</string>
<string name="staking_staking_type">Staking type</string>
<string name="start_staking_inactive_pool_message">The pool you have selected is inactive due to no validators selected or its stake is less than the minimum.\nAre you sure you want to proceed with the selected Pool?</string>
<string name="start_staking_cant_stake_amount">You can\'t stake the specified amount</string>
<string name="start_staking_available_balance_gap_message">You have locked tokens on your balance due to %s. In order to continue you should enter less than %s or more than %s. To stake another amount you should remove your %s locks.</string>
<string name="start_staking_available_balance_gap_message">You have locked tokens on your balance due to %1$s. In order to continue you should enter less than %2$s or more than %3$s. To stake another amount you should remove your %4$s locks.</string>
<string name="start_staking_max_nominators_reached_title">%s is currently unavailable</string>
<string name="start_staking_max_nominators_reached_message">The maximum number of nominators has been reached. Try again later</string>
<string name="start_staking_selection_validators_subtitle">Validators: %d (max %d)</string>
<string name="start_staking_editing_selection_validators_subtitle">Selected: %d (max %d)</string>
<string name="start_staking_selection_validators_subtitle">Validators: %1$d (max %2$d)</string>
<string name="start_staking_editing_selection_validators_subtitle">Selected: %1$d (max %2$d)</string>
<string name="common_recommended">Recommended</string>
<string name="common_fee_changed_title">Network fee is too high</string>
<string name="common_fee_changed_message">The estimated network fee %s is much higher than the default network fee (%s). This might be due to temporary network congestion. You can refresh to wait for a lower network fee.</string>
<string name="common_fee_changed_message">The estimated network fee %1$s is much higher than the default network fee (%2$s). This might be due to temporary network congestion. You can refresh to wait for a lower network fee.</string>
<string name="common_refresh_fee">Refresh fee</string>
<string name="send_recipient_system_account_title">Tokens will be lost</string>
@@ -1312,7 +1312,7 @@
<string name="nomination_pools_pool_reached_unbondings_limit_title">Too many people are unstaking from your pool</string>
<string name="nomination_pools_pool_reached_unbondings_limit_message">There are currently no free spots in unstaking queue for your pool. Please try again in %s</string>
<string name="staking_unbond_crossed_existential">When unstaking partially, you should leave at least %s in stake. Do you want to perform full unstake by unstaking remaining %s as well?</string>
<string name="staking_unbond_crossed_existential">When unstaking partially, you should leave at least %1$s in stake. Do you want to perform full unstake by unstaking remaining %2$s as well?</string>
<string name="staking_unbond_crossed_existential_title">Too small amount remains in stake</string>
<string name="nomination_pools_pool_destroying_error_message">Cannot perform specified operation since pool is in destroying state. It will be closed soon.</string>
@@ -1363,7 +1363,7 @@
<string name="start_staking_fragment_terms_of_use">See %s</string>
<string name="start_staking_fragment_terms_of_use_clicable_part">Terms of Use</string>
<string name="account_parity_signer_sign_qr_code_expired_descrition">For security reasons generated operations valid for only %s.\nPlease generate new QR code and sign it with %s</string>
<string name="account_parity_signer_sign_qr_code_expired_descrition">For security reasons generated operations valid for only %1$s.\nPlease generate new QR code and sign it with %2$s</string>
<string name="account_parity_signer_import_scan_invalid_qr">Invalid QR code, please make sure you are scanning QR code from %s</string>
<string name="account_parity_signer_sign_have_error">I have an error in %s</string>
<string name="account_parity_signer_sign_title">Sign with %s</string>
@@ -1373,7 +1373,7 @@
<string name="account_details_parity_signer_alert">This wallet is paired with %1$s. Pezkuwi Wallet will help you to form any operations you want, and you will be requested to sign them using %1$s</string>
<string name="account_details_parity_signer_not_supported">Not supported by %s</string>
<string name="account_parity_signer_not_supported_subtitle">%s does not support signing arbitrary messages — only transactions</string>
<string name="account_parity_signer_chain_not_supported">%s doesnt support %s</string>
<string name="account_parity_signer_chain_not_supported">%1$s doesnt support %2$s</string>
<string name="account_polkadot_vault_import_start_empty_derivation_hint">Pay attention, the derivation path name should be empty</string>
@@ -1388,7 +1388,7 @@
<string name="transfer_history_income_from">From: %s</string>
<string name="transfer_history_send_to">To: %s</string>
<string name="transaction_history_fiat_with_time">%s at %s</string>
<string name="transaction_history_fiat_with_time">%1$s at %2$s</string>
<string name="referenda_list_filter_placeholder">There are no referenda with filters applied</string>
@@ -1514,13 +1514,13 @@
<string name="web3names_unsupported_asset_title">Token %s is not supported yet</string>
<string name="web3names_unsupported_asset_message">Pezkuwi Wallet can\'t resolve code for token %s</string>
<string name="web3names_address_with_description">%s (%s)</string>
<string name="web3names_address_with_description">%1$s (%2$s)</string>
<string name="web3names_invalid_recepient_title">Invalid recipient</string>
<string name="web3names_service_unavailable_title">Error resolving w3n</string>
<string name="web3names_service_unavailable_message">%1$s w3n services are unavailable. Try again later or enter the %1$s address manually</string>
<string name="web3names_recepient_not_found_message">%s not found</string>
<string name="web3names_no_valid_recepient_found_message">No valid address was found for %s on the %s network</string>
<string name="web3names_identifiers_sheet_title">%s addresses for %s</string>
<string name="web3names_no_valid_recepient_found_message">No valid address was found for %1$s on the %2$s network</string>
<string name="web3names_identifiers_sheet_title">%1$s addresses for %2$s</string>
<string name="common_no_app_to_handle_intent">No suitable app found on device to handle this intent</string>
@@ -1582,7 +1582,7 @@
<string name="referendum_track_medium_spender">Treasury: medium spend</string>
<string name="referendum_track_big_spender">Treasury: big spend</string>
<string name="delegation_referendum_vote">Your votes: %s via %s</string>
<string name="delegation_referendum_vote">Your votes: %1$s via %2$s</string>
<string name="delegation_referendum_details_vote">Your votes via %s</string>
<string name="delegation_delegate">Delegate</string>
@@ -1601,14 +1601,14 @@
<string name="delegation_remove_votes">Remove votes</string>
<string name="delegation_tracks">Tracks</string>
<string name="common_element_and_more_format">%s (+%s more)</string>
<string name="common_element_and_more_format">%1$s (+%2$s more)</string>
<string name="delegation_all_votes">Voted for all time</string>
<string name="delegation_delegate_info">Delegate info</string>
<string name="referendum_voted_referenda">Voted referenda</string>
<string name="referendum_other_votes">%s votes by %s</string>
<string name="referendum_other_votes">%1$s votes by %2$s</string>
<string name="delegation_your_delegations">Your delegations</string>
@@ -1774,7 +1774,7 @@
<string name="referendum_timeline_state_passing">Voting: Passing</string>
<string name="referendum_timeline_state_not_passing">Voting: Not passing</string>
<string name="referendum_in_queue_position_format">Position: %s of %s</string>
<string name="referendum_in_queue_position_format">Position: %1$s of %2$s</string>
<string name="referendum_timeline_state_created">Created</string>
<string name="referendum_timeline_state_approved">Voted: Approved</string>
@@ -1800,11 +1800,11 @@
<string name="referendum_name_unknown">Referendum %s</string>
<string name="referendum_support_threshold_format">Threshold: %s of %s</string>
<string name="referendum_support_threshold_format">Threshold: %1$s of %2$s</string>
<string name="referendum_your_vote_format">Your vote: %s votes</string>
<string name="referendum_status_approved">Approved</string>
<string name="referendum_status_in_queue_format">In queue (%s of %s)</string>
<string name="referendum_status_in_queue_format">In queue (%1$s of %2$s)</string>
<string name="referendum_status_timeout">Timed out</string>
<string name="referendum_status_cancelled">Cancelled</string>
<string name="referendum_status_passing">Passing</string>
@@ -1848,7 +1848,7 @@
<string name="referendum_description_fallback">Only the proposer can edit this description and the title. If you own proposer\'s account, visit Polkassembly and fill in information about your proposal</string>
<string name="referendum_voter_vote">%s votes</string>
<string name="referendum_voter_vote_details">%s × %sx</string>
<string name="referendum_voter_vote_details">%1$s × %2$sx</string>
<string name="confirm_referendum_vote_title">Vote</string>
<string name="confirm_referendum_vote_track">Track</string>
@@ -1863,7 +1863,7 @@
<string name="assets_balance_details_locks_crowdloans">Crowdloans</string>
<string name="common_accept_terms">Accept terms...</string>
<string name="yield_boost_terms">Yield Boost will automatically stake %s all my transferable tokens above %s</string>
<string name="yield_boost_terms">Yield Boost will automatically stake %1$s all my transferable tokens above %2$s</string>
<string name="yield_boost_stake_increase_time">Stake increase time</string>
<string name="yiled_boost_yield_boosted">Yield Boosted</string>
@@ -1872,10 +1872,10 @@
<string name="yield_boost_already_enabled_message">Yield Boost will be turned off for current collators. New collator: %s</string>
<string name="yield_boost_not_enough_threshold_title">Not enough tokens to stay above threshold</string>
<string name="yield_boost_not_enough_threshold_message">You dont have enough balance to pay the network fee of %s and not drop below the threshold %s.\nAvailable balance to pay the fee: %s</string>
<string name="yield_boost_not_enough_threshold_message">You dont have enough balance to pay the network fee of %1$s and not drop below the threshold %2$s.\nAvailable balance to pay the fee: %3$s</string>
<string name="yield_boost_not_enough_execution_fee_title">Not enough tokens to pay first execution fee</string>
<string name="yield_boost_not_enough_execution_fee_message">You dont have enough balance to pay the network fee of %s and the yield boost execution fee of %s.\nAvailable balance to pay the fee: %s</string>
<string name="yield_boost_not_enough_execution_fee_message">You dont have enough balance to pay the network fee of %1$s and the yield boost execution fee of %2$s.\nAvailable balance to pay the fee: %3$s</string>
<string name="common_no_changes">No changes</string>
@@ -1885,7 +1885,7 @@
<string name="staking_turing_collator_title">For my collator</string>
<string name="staking_turing_restake_title">I want to stake</string>
<string name="staking_turing_frequency_new_title">to automatically stake %s all my transferable tokens above</string>
<string name="staking_turing_frequency_update_title">to automatically stake %s (before: %s) all my transferable tokens above</string>
<string name="staking_turing_frequency_update_title">to automatically stake %1$s (before: %2$s) all my transferable tokens above</string>
<string name="common_frequency_days_everyday">everyday</string>
<plurals name="common_frequency_days">
@@ -1902,7 +1902,7 @@
<string name="ledger_sign_raw_not_supported">Ledger does not support signing arbitrary messages — only transactions</string>
<string name="assets_receive_ledger_not_supported_message">Do not transfer %s to the Ledger-controlled account since Ledger does not support sending of %s, so assets will be stuck on this account</string>
<string name="assets_receive_ledger_not_supported_message">Do not transfer %1$s to the Ledger-controlled account since Ledger does not support sending of %2$s, so assets will be stuck on this account</string>
<string name="assets_receive_ledger_not_supported_title">Ledger does not support this token</string>
<string name="common_signature_invalid">Signature is invalid</string>
@@ -2038,7 +2038,7 @@
</plurals>
<string name="wallet_send_myself">Myself</string>
<string name="wallet_send_cannot_pay_cross_chain_fee">You dont have enough balance to pay the Cross-chain fee of %s.\nRemaining balance after transfer: %s</string>
<string name="wallet_send_cannot_pay_cross_chain_fee">You dont have enough balance to pay the Cross-chain fee of %1$s.\nRemaining balance after transfer: %2$s</string>
<string name="wallet_send_confirm_hint">Cross-chain fee is added on top of entered amount. Recipient may receive part of cross-chain fee</string>
@@ -2216,7 +2216,7 @@
<string name="nft_created_by">Created by</string>
<string name="nft_issuance_unlimited">Unlimited series</string>
<string name="nft_issuance_limited_format">#%s Edition of %s</string>
<string name="nft_issuance_limited_format">#%1$s Edition of %2$s</string>
<string name="nft_your_nfts">Your NFTs</string>
<string name="wallet_assets_empty">Your assets will appear here.\nMake sure the "Hide zero balances" filter is turned off</string>
@@ -2759,8 +2759,6 @@
<string name="wallet_send_phishing_warning_title">Scam alert</string>
<string name="wallet_transfer_details_title">Transfer details</string>
<string name="yesterday">Yesterday</string>
<string name="branch_io_link_host" translatable="false">pezkuwi-wallet.app.link</string>
<string name="branch_io_link_host_alternate" translatable="false">pezkuwi-wallet-alternate.app.link</string>
<string name="pezkuwi_dashboard_title">Pezkuwi</string>
<string name="pezkuwi_dashboard_trust_score">Trust Score</string>
+1 -1
View File
@@ -1 +1 @@
Bug fixes and improvements for Google Sign-In cloud backup.
Pezkuwi Wallet — the official app for the Digital Kurdistan State. Manage your HEZ tokens, stake, and participate in on-chain governance.
+1
View File
@@ -0,0 +1 @@
Pezkuwi Wallet — ئەپی فەرمی دەوڵەتی دیجیتاڵی کوردستان. تۆکنەکانی HEZ بەڕێوەببە، ستەیک بکە و بەشداری بەڕێوەبردنی زنجیرە بکە.
+1 -7
View File
@@ -1,7 +1 @@
Pezkuwi Wallet - Pezkuwi blokzincir ekosistemine açılan kapınız.
- HEZ token gönderme ve alma
- Asset Hub üzerinde nomination pool ile staking
- Rol ve güven puanınızı gösteren Pezkuwi paneli
- Polkadot ekosistemi için çoklu zincir desteği
- Biyometrik kimlik doğrulama ile güvenli hesap yönetimi
Pezkuwi Wallet — Dijital Kürdistan Devleti'nin resmi uygulaması. HEZ tokenlarınızı yönetin, stake edin ve zincir üstü yönetime katılın.
@@ -1,5 +1,6 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common.holders
import androidx.core.view.isVisible
import coil.ImageLoader
import io.novafoundation.nova.common.list.GroupedListHolder
import io.novafoundation.nova.common.presentation.masking.setMaskableText
@@ -13,6 +14,11 @@ import io.novafoundation.nova.feature_assets.presentation.balance.list.model.ite
import io.novafoundation.nova.feature_assets.presentation.model.AssetModel
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableFiat
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableToken
import io.novafoundation.nova.runtime.ext.Geneses
import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain
// Fungible assets on Pezkuwi Asset Hub follow the PEZ-20 token standard.
private val PEZ20_SYMBOLS = setOf("PEZ", "USDT", "wUSDT")
class TokenAssetViewHolder(
private val binder: ItemTokenAssetBinding,
@@ -31,7 +37,12 @@ class TokenAssetViewHolder(
bindTotal(asset)
binder.itemTokenAssetToken.text = asset.token.configuration.symbol.value
val config = asset.token.configuration
binder.itemTokenAssetToken.text = config.symbol.value
val isPez20 = config.chainId == Chain.Geneses.PEZKUWI_ASSET_HUB && config.symbol.value in PEZ20_SYMBOLS
binder.itemTokenAssetPez20.isVisible = isPez20
if (isPez20) binder.itemTokenAssetPez20.text = "PEZ-20"
setOnClickListener { itemHandler.assetClicked(asset.token.configuration) }
}
@@ -32,6 +32,24 @@
app:layout_constraintVertical_chainStyle="packed"
tools:text="DOT" />
<TextView
android:id="@+id/itemTokenAssetPez20"
style="@style/TextAppearance.NovaFoundation.Regular.Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:background="@drawable/bg_chip_6"
android:paddingHorizontal="6dp"
android:paddingVertical="1dp"
android:textColor="@color/chip_text"
android:textSize="9sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/itemTokenAssetToken"
app:layout_constraintStart_toEndOf="@+id/itemTokenAssetToken"
app:layout_constraintTop_toTopOf="@+id/itemTokenAssetToken"
tools:text="PEZ-20"
tools:visibility="visible" />
<LinearLayout
android:id="@+id/itemTokenAssetRateContainer"
android:layout_width="wrap_content"
-1
View File
@@ -24,7 +24,6 @@ dependencies {
implementation androidDep
implementation materialDep
implementation branchIo
implementation playServiceIdentifier
implementation coroutinesDep
@@ -2,7 +2,6 @@ package io.novafoundation.nova.feature_deep_linking.di
import io.novafoundation.nova.feature_deep_linking.presentation.configuring.LinkBuilderFactory
import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter
import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences
interface DeepLinkingFeatureApi {
@@ -10,7 +9,5 @@ interface DeepLinkingFeatureApi {
val pendingDeepLinkProvider: PendingDeepLinkProvider
val branchIoLinkConverter: BranchIoLinkConverter
val linkBuilderFactory: LinkBuilderFactory
}
@@ -8,7 +8,6 @@ import io.novafoundation.nova.common.resources.ResourceManager
import io.novafoundation.nova.feature_deep_linking.R
import io.novafoundation.nova.feature_deep_linking.presentation.configuring.LinkBuilderFactory
import io.novafoundation.nova.feature_deep_linking.presentation.handling.PendingDeepLinkProvider
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIoLinkConverter
import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences
@Module
@@ -21,11 +20,7 @@ class DeepLinkingFeatureModule {
) = DeepLinkingPreferences(
deepLinkScheme = resourceManager.getString(R.string.deep_linking_scheme),
deepLinkHost = resourceManager.getString(R.string.deep_linking_host),
appLinkHost = resourceManager.getString(R.string.app_link_host),
branchIoLinkHosts = listOf(
resourceManager.getString(R.string.branch_io_link_host),
resourceManager.getString(R.string.branch_io_link_host_alternate)
)
appLinkHost = resourceManager.getString(R.string.app_link_host)
)
@Provides
@@ -37,10 +32,4 @@ class DeepLinkingFeatureModule {
fun providePendingDeepLinkProvider(preferences: Preferences): PendingDeepLinkProvider {
return PendingDeepLinkProvider(preferences)
}
@Provides
@FeatureScope
fun provideBranchIoLinkConverter(
deepLinkingPreferences: DeepLinkingPreferences
) = BranchIoLinkConverter(deepLinkingPreferences)
}
@@ -2,7 +2,6 @@ package io.novafoundation.nova.feature_deep_linking.presentation.configuring
import android.net.Uri
import io.novafoundation.nova.common.utils.appendPathOrSkip
import io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo.BranchIOConstants
import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences
interface LinkBuilder {
@@ -76,22 +75,26 @@ class AppLinkBuilderType(
private val deepLinkingPreferences: DeepLinkingPreferences
) : LinkBuilder {
private var action: String? = null
private var entity: String? = null
private var screen: String? = null
private val urlBuilder = Uri.Builder()
.scheme("https")
.authority(deepLinkingPreferences.branchIoLinkHosts.first())
.authority(deepLinkingPreferences.appLinkHost)
override fun setAction(action: String): LinkBuilder {
urlBuilder.appendQueryParameter(BranchIOConstants.ACTION_QUERY, action)
this.action = action
return this
}
override fun setEntity(entity: String): LinkBuilder {
urlBuilder.appendQueryParameter(BranchIOConstants.ENTITY_QUERY, entity)
this.entity = entity
return this
}
override fun setScreen(screen: String): LinkBuilder {
urlBuilder.appendQueryParameter(BranchIOConstants.SCREEN_QUERY, screen)
this.screen = screen
return this
}
@@ -101,7 +104,14 @@ class AppLinkBuilderType(
}
override fun build(): Uri {
return urlBuilder.build()
val finalPath = Uri.Builder()
.appendPathOrSkip(action)
.appendPathOrSkip(entity)
.appendPathOrSkip(screen)
.build()
.path
return urlBuilder.path(finalPath).build()
}
}
@@ -1,7 +0,0 @@
package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo
object BranchIOConstants {
const val ACTION_QUERY = "action"
const val SCREEN_QUERY = "screen"
const val ENTITY_QUERY = "entity"
}
@@ -1,56 +0,0 @@
package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log
import io.branch.referral.Branch
import io.branch.referral.Defines
import io.novafoundation.nova.common.utils.LOG_TAG
import io.novafoundation.nova.feature_deep_linking.BuildConfig
class BranchIOLinkHandler(
private val deepLinkFactory: BranchIoLinkConverter
) {
object Initializer {
fun init(context: Context) {
if (BuildConfig.DEBUG) {
Branch.enableLogging()
}
val branchInstance = Branch.getAutoInstance(context)
branchInstance.setConsumerProtectionAttributionLevel(Defines.BranchAttributionLevel.REDUCED)
}
}
fun onActivityStart(activity: Activity, deepLinkCallback: (Uri) -> Unit) {
Branch.sessionBuilder(activity)
.withCallback { branchUniversalObject, _, error ->
if (error != null) {
Log.e(LOG_TAG, error.toString())
}
if (branchUniversalObject != null) {
val deepLink = deepLinkFactory.formatToDeepLink(branchUniversalObject)
deepLinkCallback(deepLink)
}
}
.withData(activity.intent.data)
.init()
}
fun onActivityNewIntent(activity: Activity, intent: Intent?) {
if (intent != null && intent.getBooleanExtra("branch_force_new_session", false)) {
Branch.sessionBuilder(activity)
.withCallback { _, error ->
if (error != null) {
Log.e(LOG_TAG, error.toString())
}
}
.withData(intent.data)
.reInit()
}
}
}
@@ -1,44 +0,0 @@
package io.novafoundation.nova.feature_deep_linking.presentation.handling.branchIo
import android.net.Uri
import io.branch.indexing.BranchUniversalObject
import io.novafoundation.nova.common.utils.appendPathOrSkip
import io.novafoundation.nova.common.utils.appendQueries
import io.novafoundation.nova.feature_deep_linking.presentation.handling.common.DeepLinkingPreferences
private val BRANCH_PARAMS_PREFIX = listOf("~", "$", "+")
class BranchIoLinkConverter(
private val deepLinkingPreferences: DeepLinkingPreferences
) {
fun formatToDeepLink(data: BranchUniversalObject): Uri {
val queries = data.contentMetadata.customMetadata
.excludeInternalIOQueries()
.toMutableMap()
return Uri.Builder()
.scheme(deepLinkingPreferences.deepLinkScheme)
.authority(deepLinkingPreferences.deepLinkHost)
.appendPathOrSkip(queries.extractAction())
.appendPathOrSkip(queries.extractSubject())
.appendQueries(queries)
.build()
}
private fun Map<String, String>.excludeInternalIOQueries(): Map<String, String> {
return filterKeys { key ->
val isBranchIOQuery = BRANCH_PARAMS_PREFIX.any { prefix -> key.startsWith(prefix) }
!isBranchIOQuery
}
}
private fun MutableMap<String, String>.extractAction(): String? {
return remove(BranchIOConstants.ACTION_QUERY)
}
private fun MutableMap<String, String>.extractSubject(): String? {
return remove(BranchIOConstants.SCREEN_QUERY)
?: remove(BranchIOConstants.ENTITY_QUERY)
}
}
@@ -5,8 +5,7 @@ import android.net.Uri
class DeepLinkingPreferences(
val deepLinkScheme: String,
val deepLinkHost: String,
val appLinkHost: String,
val branchIoLinkHosts: List<String>
val appLinkHost: String
)
fun Uri.isDeepLink(preferences: DeepLinkingPreferences): Boolean {
+1
View File
@@ -18,3 +18,4 @@ android.enableJetifier=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false
android.experiments.cacheability.pageAlignSharedLibs=true