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
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/secondary_screen_background">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/startImportGenericLedgerToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:orientation="vertical"
android:paddingBottom="16dp">
<TextView
android:id="@+id/startImportGenericLedgerTitle"
style="@style/TextAppearance.NovaFoundation.Bold.Title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/account_ledger_import_start_title"
android:textColor="@color/text_primary" />
<io.novafoundation.nova.common.view.LinkView
android:id="@+id/startImportGenericLedgerGuideLink"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="8dp"
app:linkText="@string/account_ledger_import_start_guide" />
<io.novafoundation.nova.common.view.NovaConnectView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="32dp"
app:targetImage="@drawable/ic_ledger" />
<io.novafoundation.nova.common.view.InstructionStepView
android:id="@+id/startImportGenericLedgerStep1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
app:stepNumber="1"
app:stepText="@string/account_ledger_generic_import_start_step_1" />
<io.novafoundation.nova.common.view.InstructionStepView
android:id="@+id/startImportGenericLedgerStep2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:stepNumber="2" />
<io.novafoundation.nova.common.view.InstructionStepView
android:id="@+id/startImportGenericLedgerStep3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:stepNumber="3" />
<io.novafoundation.nova.common.view.InstructionStepView
android:id="@+id/startImportGenericLedgerStep4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:stepNumber="4" />
</LinearLayout>
</ScrollView>
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/startImportGenericLedgerContinue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="@string/common_continue" />
</LinearLayout>
@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@color/secondary_screen_background">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/fillWalletImportLedgerToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false" />
<TextView
style="@style/TextAppearance.NovaFoundation.Bold.Title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:textColor="@color/text_primary"
android:text="@string/account_ledger_import_fill_title" />
<TextView
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="@string/account_ledger_import_fill_description"
android:textColor="@color/text_secondary" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/fillWalletImportLedgerAccounts"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_weight="1"
android:clipToPadding="false"
android:paddingBottom="93dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout>
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/fillWalletImportLedgerContinue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="25dp"
android:text="@string/common_continue" />
</FrameLayout>
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/secondary_screen_background">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/ledgerSelectAddressToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false" />
<TextView
style="@style/TextAppearance.NovaFoundation.Bold.Title2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/ledher_import_select_address_title"
android:textColor="@color/icon_primary" />
<io.novafoundation.nova.feature_account_api.view.ChainChipView
android:id="@+id/ledgerSelectAddressChain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp" />
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/ledgerSelectAddressAlert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ledgerSelectAddressContent"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_weight="1"
android:clipToPadding="false"
android:paddingBottom="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="3"
tools:listitem="@layout/item_ledger_account" />
</LinearLayout>
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/secondary_screen_background">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/startImportLedgerToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/startImportLedgerToolbar">
<TextView
android:id="@+id/startImportLedgerTitle"
style="@style/TextAppearance.NovaFoundation.Bold.Title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:text="@string/account_ledger_import_start_title"
android:textColor="@color/text_primary" />
<io.novafoundation.nova.common.view.SegmentedTabLayout
android:id="@+id/startImportLedgerConnectionMode"
style="@style/SegmentedTab"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:layout_marginBottom="8dp" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/startImportLedgerConnectionModePages"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never" />
</LinearLayout>
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/startImportLedgerContinue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="@string/common_continue"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/ledgerMessageContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="24dp"
tools:background="@color/bottom_sheet_background">
<View
style="@style/Widget.Nova.Puller"
android:layout_marginTop="6dp" />
<ImageView
android:id="@+id/ledgerMessageImage"
android:layout_width="210dp"
android:layout_height="190dp"
android:layout_marginTop="22dp"
tools:la_icon="@drawable/ic_eye_filled" />
<TextView
android:id="@+id/ledgerMessageTitle"
style="@style/TextAppearance.NovaFoundation.SemiBold.Title3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:gravity="center"
android:layout_marginHorizontal="16dp"
android:textColor="@color/text_primary"
tools:text="Verify Address" />
<TextView
android:id="@+id/ledgerMessageSubtitle"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="8dp"
android:gravity="center_horizontal"
android:paddingBottom="24dp"
android:textColor="@color/text_secondary"
tools:text="Press both buttons on your Nano X E426 to verify address" />
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/ledgerMessageAlert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:visibility="gone" />
<TextView
android:id="@+id/ledgerMessageFooterMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:gravity="center"
android:minHeight="52dp"
android:paddingVertical="16dp"
android:textColor="@color/text_secondary"
android:visibility="gone"
tools:text="Transaction is valid for 05:39" />
<LinearLayout
android:id="@+id/ledgerMessageFooterColumns"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/ledgerMessageFooterTitle1"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
tools:text="Title 1" />
<TextView
android:id="@+id/ledgerMessageFooterMessage1"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
tools:text="Message 1" />
<TextView
android:id="@+id/ledgerMessageFooterTitle2"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
tools:text="Title 1" />
<TextView
android:id="@+id/ledgerMessageFooterMessage2"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="4dp"
android:gravity="center_horizontal"
tools:text="Message 1" />
</LinearLayout>
<LinearLayout
android:id="@+id/ledgerMessageActions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:visibility="visible">
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/ledgerMessageCancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_weight="1"
android:text="@string/common_cancel"
android:visibility="gone"
app:appearance="secondary" />
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/ledgerMessageConfirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
app:appearance="primary"
tools:text="@string/common_retry" />
</LinearLayout>
</LinearLayout>
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:background="@color/secondary_screen_background">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/selectLedgerToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false" />
<TextView
style="@style/TextAppearance.NovaFoundation.Bold.Title2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/account_ledger_select_device_title"
android:textColor="@color/text_primary" />
<TextView
android:id="@+id/selectLedgerHints"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:textColor="@color/text_secondary"
tools:text="@string/account_ledger_select_device_description" />
<io.novafoundation.nova.common.view.ReadMoreView
android:id="@+id/selectLedgerGrantPermissions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@string/select_ledger_grant_permissions"
android:visibility="gone"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/selectLedgerDevices"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_weight="1"
android:visibility="gone"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<ProgressBar
android:id="@+id/selectLedgerProgress"
style="@style/Widget.Nova.ProgressBar.Indeterminate"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:indeterminate="true" />
</LinearLayout>
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="96dp"
tools:background="@color/secondary_screen_background">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingHorizontal="16dp">
<io.novafoundation.nova.common.view.LinkView
android:id="@+id/startImportLedgerGuideLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:linkText="@string/account_ledger_import_start_guide" />
<io.novafoundation.nova.common.view.NovaConnectView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="32dp"
app:targetImage="@drawable/ic_ledger" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/startImportLedgerInstructions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/startImportLedgerWarning"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:visibility="gone"
app:alertMode="warning"
tools:AlertView_action="@string/common_find_out_more"
tools:AlertView_description="@string/account_ledger_legacy_warning_message"
tools:text="@string/account_ledger_legacy_warning_title"
tools:visibility="visible" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<io.novafoundation.nova.common.view.GoNextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/itemLedger"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:actionIcon="@drawable/ic_chevron_right"
app:actionTint="@color/icon_secondary"
app:dividerVisible="false" />
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:layout_height="wrap_content"
tools:background="@color/secondary_screen_background">
<ImageView
android:id="@+id/itemLedgerAccountIcon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="16dp"
android:layout_marginTop="14dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/avatars" />
<TextView
android:id="@+id/itemLedgerAccountLabel"
style="@style/TextAppearance.NovaFoundation.Regular.SubHeadline.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
app:layout_constraintBottom_toBottomOf="@id/itemLedgerAccountIcon"
app:layout_constraintStart_toEndOf="@id/itemLedgerAccountIcon"
app:layout_constraintTop_toTopOf="@id/itemLedgerAccountIcon"
tools:text="Account 1" />
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_chevron_right"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/icon_secondary" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/itemLedgerAccountSubstrate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/itemLedgerAccountIcon"
app:title="@string/common_substrate_address" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/itemLedgerAccountEvm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
app:dividerVisible="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/itemLedgerAccountSubstrate"
app:title="@string/common_evm_address" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<io.novafoundation.nova.common.view.PrimaryButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:text="@string/ledger_import_select_address_load_more"
app:appearance="secondary" />
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@drawable/ic_ledger_info"
tools:layout_height="190dp"
tools:layout_width="210dp"
tools:parentTag="android.widget.FrameLayout" />
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="LedgerActionView">
<attr name="la_ledgerImage" format="reference" />
</declare-styleable>
</resources>