Initial commit: Pezkuwi Wallet Android

Complete rebrand of Nova Wallet for Pezkuwichain ecosystem.

## Features
- Full Pezkuwichain support (HEZ & PEZ tokens)
- Polkadot ecosystem compatibility
- Staking, Governance, DeFi, NFTs
- XCM cross-chain transfers
- Hardware wallet support (Ledger, Polkadot Vault)
- WalletConnect v2
- Push notifications

## Languages
- English, Turkish, Kurmanci (Kurdish), Spanish, French, German, Russian, Japanese, Chinese, Korean, Portuguese, Vietnamese

Based on Nova Wallet by Novasama Technologies GmbH
© Dijital Kurdistan Tech Institute 2026
This commit is contained in:
2026-01-23 01:31:12 +03:00
commit 31c8c5995f
7621 changed files with 425838 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
/build
+22
View File
@@ -0,0 +1,22 @@
apply plugin: 'kotlin-parcelize'
android {
namespace 'io.novafoundation.nova.feature_ahm_api'
}
dependencies {
implementation coroutinesDep
implementation project(":common")
implementation project(':runtime')
implementation project(":feature-deep-linking")
implementation cardViewDep
implementation recyclerViewDep
implementation materialDep
implementation androidDep
implementation shimmerDep
implementation daggerDep
ksp daggerCompiler
}
View File
+21
View File
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>
@@ -0,0 +1,12 @@
package io.novafoundation.nova.feature_ahm_api.data.repository
interface ChainMigrationRepository {
suspend fun cacheBalancesForChainMigrationDetection()
suspend fun setInfoShownForChain(chainId: String)
fun isMigrationDetailsWasShown(chainId: String): Boolean
fun isChainMigrationDetailsNeeded(chainId: String): Boolean
}
@@ -0,0 +1,14 @@
package io.novafoundation.nova.feature_ahm_api.data.repository
import io.novafoundation.nova.feature_ahm_api.domain.model.ChainMigrationConfig
interface MigrationInfoRepository {
suspend fun getConfigByOriginChain(chainId: String): ChainMigrationConfig?
suspend fun getAllConfigs(): List<ChainMigrationConfig>
suspend fun loadConfigs()
suspend fun getConfigByDestinationChain(chainId: String): ChainMigrationConfig?
}
@@ -0,0 +1,20 @@
package io.novafoundation.nova.feature_ahm_api.di
import io.novafoundation.nova.feature_ahm_api.data.repository.ChainMigrationRepository
import io.novafoundation.nova.feature_ahm_api.data.repository.MigrationInfoRepository
import io.novafoundation.nova.feature_ahm_api.di.deeplinks.ChainMigrationDeepLinks
import io.novafoundation.nova.feature_ahm_api.domain.ChainMigrationInfoUseCase
import io.novafoundation.nova.feature_ahm_api.domain.ChainMigrationDetailsSelectToShowUseCase
interface ChainMigrationFeatureApi {
val chainMigrationInfoUseCase: ChainMigrationInfoUseCase
val chainMigrationRepository: ChainMigrationRepository
val migrationInfoRepository: MigrationInfoRepository
val chainMigrationDeepLinks: ChainMigrationDeepLinks
val chainMigrationDetailsSelectToShowUseCase: ChainMigrationDetailsSelectToShowUseCase
}
@@ -0,0 +1,5 @@
package io.novafoundation.nova.feature_ahm_api.di.deeplinks
import io.novafoundation.nova.feature_deep_linking.presentation.handling.DeepLinkHandler
class ChainMigrationDeepLinks(val deepLinkHandlers: List<DeepLinkHandler>)
@@ -0,0 +1,5 @@
package io.novafoundation.nova.feature_ahm_api.domain
interface ChainMigrationDetailsSelectToShowUseCase {
suspend fun getChainIdsToShowMigrationDetails(): List<String>
}
@@ -0,0 +1,13 @@
package io.novafoundation.nova.feature_ahm_api.domain
import io.novafoundation.nova.feature_ahm_api.domain.model.ChainMigrationConfigWithChains
import kotlinx.coroutines.flow.Flow
interface ChainMigrationInfoUseCase {
fun observeMigrationConfigOrNull(chainId: String, assetId: Int): Flow<ChainMigrationConfigWithChains?>
fun markMigrationInfoAsHidden(key: String, chainId: String, assetId: Int)
fun observeInfoShouldBeHidden(key: String, chainId: String, assetId: Int): Flow<Boolean>
}
@@ -0,0 +1,32 @@
package io.novafoundation.nova.feature_ahm_api.domain.model
import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain
import java.math.BigInteger
import java.util.Date
class ChainMigrationConfig(
val originData: ChainData,
val destinationData: ChainData,
val blockNumberStartAt: BigInteger,
val timeStartAt: Date,
val newTokenNames: List<String>,
val bannerPath: String,
val migrationInProgress: Boolean,
val wikiURL: String
) {
class ChainData(
val chainId: String,
val assetId: Int,
val minBalance: BigInteger,
val averageFee: BigInteger
)
}
class ChainMigrationConfigWithChains(
val config: ChainMigrationConfig,
val originChain: Chain,
val originAsset: Chain.Asset,
val destinationChain: Chain,
val destinationAsset: Chain.Asset
)
@@ -0,0 +1,5 @@
package io.novafoundation.nova.feature_ahm_api.presentation
import java.text.DateFormat
fun getChainMigrationDateFormat() = DateFormat.getDateInstance(DateFormat.LONG)