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
+23
View File
@@ -0,0 +1,23 @@
apply plugin: 'kotlin-parcelize'
android {
namespace 'io.novafoundation.nova.feature_wallet_connect_api'
}
dependencies {
implementation project(':feature-account-api')
implementation project(':feature-external-sign-api')
implementation project(':feature-deep-linking')
implementation project(':common')
implementation coroutinesDep
implementation androidDep
implementation materialDep
implementation constraintDep
testImplementation jUnitDep
testImplementation mockitoDep
}
+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,14 @@
package io.novafoundation.nova.feature_wallet_connect_api.di
import io.novafoundation.nova.feature_wallet_connect_api.di.deeplinks.WalletConnectDeepLinks
import io.novafoundation.nova.feature_wallet_connect_api.domain.sessions.WalletConnectSessionsUseCase
import io.novafoundation.nova.feature_wallet_connect_api.presentation.WalletConnectService
interface WalletConnectFeatureApi {
val walletConnectService: WalletConnectService
val sessionsUseCase: WalletConnectSessionsUseCase
val walletConnectDeepLinks: WalletConnectDeepLinks
}
@@ -0,0 +1,5 @@
package io.novafoundation.nova.feature_wallet_connect_api.di.deeplinks
import io.novafoundation.nova.feature_deep_linking.presentation.handling.DeepLinkHandler
class WalletConnectDeepLinks(val deepLinkHandlers: List<DeepLinkHandler>)
@@ -0,0 +1,15 @@
package io.novafoundation.nova.feature_wallet_connect_api.domain.sessions
import io.novafoundation.nova.feature_account_api.domain.model.MetaAccount
import kotlinx.coroutines.flow.Flow
interface WalletConnectSessionsUseCase {
fun activeSessionsNumberFlow(): Flow<Int>
fun activeSessionsNumberFlow(metaAccount: MetaAccount): Flow<Int>
suspend fun activeSessionsNumber(): Int
suspend fun syncActiveSessions()
}
@@ -0,0 +1,15 @@
package io.novafoundation.nova.feature_wallet_connect_api.presentation
import androidx.lifecycle.LiveData
import io.novafoundation.nova.common.utils.Event
interface WalletConnectService {
val onPairErrorLiveData: LiveData<Event<Throwable>>
fun connect()
fun disconnect()
fun pair(uri: String)
}
@@ -0,0 +1,13 @@
package io.novafoundation.nova.feature_wallet_connect_api.presentation
import io.novafoundation.nova.common.utils.formatting.format
class WalletConnectSessionsModel(val connections: String?)
fun mapNumberOfActiveSessionsToUi(activeSessions: Int): WalletConnectSessionsModel {
return if (activeSessions > 0) {
WalletConnectSessionsModel(activeSessions.format())
} else {
WalletConnectSessionsModel(null)
}
}
@@ -0,0 +1,14 @@
package io.novafoundation.nova.feature_wallet_connect_api.presentation.utils
import android.net.Uri
object WalletConnectUtils {
fun isWalletConnectPairingLink(data: Uri): Boolean {
val isNovaLink = data.scheme == "novawallet" && data.host == "wc"
val isLinkFromOtherSource = data.scheme == "wc"
val isWalletConnectLink = isNovaLink || isLinkFromOtherSource
val isPairing = "symKey" in data.toString()
return isWalletConnectLink && isPairing
}
}