Initial commit: Pezkuwi Wallet Android

Security hardened release:
- Code obfuscation enabled (minifyEnabled=true, shrinkResources=true)
- Sensitive files excluded (google-services.json, keystores)
- Branch.io key moved to BuildConfig placeholder
- Updated dependencies: OkHttp 4.12.0, Gson 2.10.1, BouncyCastle 1.77
- Comprehensive ProGuard rules for crypto wallet
- Navigation 2.7.7, Lifecycle 2.7.0, ConstraintLayout 2.1.4
This commit is contained in:
2026-02-12 05:19:41 +03:00
commit a294aa1a6b
7687 changed files with 441811 additions and 0 deletions
@@ -0,0 +1,20 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<io.novafoundation.nova.common.presentation.scan.ScanView
android:id="@+id/walletConnectScan"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:subTitle="@string/wallet_connect_v2"
app:title="@string/common_scan_qr_code" />
<io.novafoundation.nova.common.view.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false"
android:id="@+id/walletConnectScanToolbar"
app:contentBackground="@android:color/transparent" />
</FrameLayout>
@@ -0,0 +1,187 @@
<?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/wcApproveSessionToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false"
app:homeButtonIcon="@drawable/ic_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleText="@string/wallet_connect_title" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/wcApproveSessionNovaIcon"
style="@style/Widget.Nova.Icon.Big"
android:layout_marginTop="24dp"
android:padding="16dp"
android:src="@drawable/ic_pezkuwi_logo"
app:layout_constraintEnd_toStartOf="@+id/wcApproveSessionNovaArrow"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/wcApproveSessionNovaArrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_bidirectonal"
app:layout_constraintBottom_toBottomOf="@+id/wcApproveSessionNovaIcon"
app:layout_constraintEnd_toStartOf="@+id/wcApproveSessionIcon"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/wcApproveSessionNovaIcon"
app:layout_constraintTop_toTopOf="@+id/wcApproveSessionNovaIcon"
app:tint="@color/icon_secondary" />
<ImageView
android:id="@+id/wcApproveSessionIcon"
style="@style/Widget.Nova.Icon.Big"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/wcApproveSessionNovaArrow"
app:layout_constraintTop_toTopOf="@+id/wcApproveSessionNovaIcon"
tools:src="@drawable/ic_earth" />
<TextView
android:id="@+id/wcApproveSessionTitle"
style="@style/TextAppearance.NovaFoundation.SemiBold.Title3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
android:gravity="center_horizontal"
android:textColor="@color/text_primary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/wcApproveSessionNovaIcon"
tools:text="Allow “Polkadot.js” to access your account addresses?" />
<TextView
android:id="@+id/wcApproveSessionSubTitle"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="16dp"
android:gravity="center_horizontal"
android:text="@string/dapp_confirm_authorize_subtitle"
android:textColor="@color/text_secondary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/wcApproveSessionTitle" />
<io.novafoundation.nova.common.view.TableView
android:id="@+id/wcApproveSessionRequestSession"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wcApproveSessionSubTitle">
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcApproveSessionDApp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/dapp_dapp" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcApproveSessionNetworks"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/common_networks" />
</io.novafoundation.nova.common.view.TableView>
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/wcApproveSessionChainsAlert"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wcApproveSessionRequestSession"
tools:text="Some of the required networks requested by 1inch are not supported in Pezkuwi Wallet" />
<io.novafoundation.nova.feature_account_api.view.AccountView
android:id="@+id/wcApproveSessionWallet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
app:actionIcon="@drawable/ic_chevron_right"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wcApproveSessionChainsAlert"
app:showBackground="true" />
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/wcApproveSessionAccountsAlert"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/wcApproveSessionWallet"
tools:text="Ethereum account is missing. Add account to the wallet in Settings" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="horizontal">
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/wcApproveSessionReject"
style="@style/Widget.Nova.Button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/common_reject"
app:appearance="secondary" />
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/wcApproveSessionAllow"
style="@style/Widget.Nova.Button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="@string/common_allow"
app:appearance="primary" />
</LinearLayout>
</LinearLayout>
@@ -0,0 +1,84 @@
<?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:gravity="center_horizontal"
android:orientation="vertical"
tools:background="@color/secondary_screen_background">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/wcSessionDetailsToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false"
app:titleText="@string/wallet_connect_title" />
<ImageView
android:id="@+id/wcSessionDetailsIcon"
style="@style/Widget.Nova.Icon.Big"
android:layout_marginTop="32dp"
tools:src="@drawable/ic_earth" />
<TextView
android:id="@+id/wcSessionDetailsTitle"
style="@style/TextAppearance.NovaFoundation.SemiBold.Title3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="16dp"
android:gravity="center_horizontal"
android:textColor="@color/text_primary"
tools:text="1inch dApp" />
<io.novafoundation.nova.common.view.TableView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp">
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcSessionDetailsWallet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/tabbar_wallet_title" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcSessionDetailsDApp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/dapp_dapp" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcSessionDetailsNetworks"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/common_networks" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/wcSessionDetailsStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:primaryValueStyle="positive"
app:title="@string/common_status" />
</io.novafoundation.nova.common.view.TableView>
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/wcSessionDetailsDisconnect"
style="@style/Widget.Nova.Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:text="@string/common_disconnect"
app:appearance="primaryNegative" />
</LinearLayout>
@@ -0,0 +1,44 @@
<?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/wcSessionsToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false"
app:titleText="@string/wallet_connect_title" />
<io.novafoundation.nova.common.view.PlaceholderView
android:id="@+id/wcSessionsConnectionsPlaceholder"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="@string/wallet_connect_sessions_placeholder"
android:visibility="gone"
app:image="@drawable/ic_placeholder"
app:placeholderBackgroundStyle="no_background"
tools:visibility="visible" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/wcSessionsConnectionsList"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:clipToPadding="false"
android:paddingTop="8dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<io.novafoundation.nova.common.view.PrimaryButton
android:id="@+id/wcSessionsNewConnection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:iconSrc="@drawable/ic_qr_scan"
android:text="@string/wallet_connect_new_connection" />
</LinearLayout>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:background="@color/secondary_screen_background"
android:textColor="@color/text_secondary"
tools:text="@string/common_required"
android:layout_marginStart="16dp"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:id="@+id/itemWcNetworksLabel"
android:layout_height="wrap_content" />