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,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="150dp"
android:height="150dp"
android:viewportWidth="154"
android:viewportHeight="154">
<path
android:fillColor="#7A08090E"
android:pathData="M8,0L146,0A8,8 0,0 1,154 8L154,146A8,8 0,0 1,146 154L8,154A8,8 0,0 1,0 146L0,8A8,8 0,0 1,8 0z" />
<path
android:fillColor="#29FFFFFF"
android:fillType="evenOdd"
android:pathData="M64.75,69C64.75,67.757 65.757,66.75 67,66.75H87C88.243,66.75 89.25,67.757 89.25,69V82.398L85.883,79.591L85.883,79.59C85.355,79.151 84.682,78.926 83.997,78.957C83.312,78.989 82.663,79.276 82.178,79.762L82.178,79.762L80.501,81.438L74.864,75.801L74.864,75.801C74.368,75.306 73.702,75.018 73.001,74.997C72.3,74.977 71.618,75.224 71.094,75.69L71.093,75.69L64.75,81.33V69ZM79.44,82.499L73.803,76.862L73.803,76.862C73.578,76.637 73.275,76.506 72.957,76.497C72.638,76.487 72.328,76.6 72.09,76.811L72.09,76.811L64.75,83.337V85C64.75,86.243 65.757,87.25 67,87.25H74.69L79.44,82.499ZM74.975,88.75C74.992,88.751 75.008,88.751 75.025,88.75H87C89.071,88.75 90.75,87.071 90.75,85V84.006C90.75,84.003 90.75,83.999 90.75,83.995V69C90.75,66.929 89.071,65.25 87,65.25H67C64.929,65.25 63.25,66.929 63.25,69V82.997V83.004V85C63.25,87.071 64.929,88.75 67,88.75H74.975ZM89.25,84.352V85C89.25,86.243 88.243,87.25 87,87.25H76.811L83.239,80.822L83.24,80.821C83.46,80.601 83.755,80.47 84.066,80.456C84.378,80.441 84.683,80.544 84.923,80.743L84.924,80.743L89.25,84.352ZM80.75,72C80.75,71.31 81.31,70.75 82,70.75C82.69,70.75 83.25,71.31 83.25,72C83.25,72.69 82.69,73.25 82,73.25C81.31,73.25 80.75,72.69 80.75,72ZM82,69.25C80.481,69.25 79.25,70.481 79.25,72C79.25,73.519 80.481,74.75 82,74.75C83.519,74.75 84.75,73.519 84.75,72C84.75,70.481 83.519,69.25 82,69.25Z" />
</vector>
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/block_background" />
<corners android:radius="12dp" />
</shape>
@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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="wrap_content"
android:orientation="vertical">
<io.novafoundation.nova.common.view.Toolbar
android:id="@+id/nftDetailsToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:dividerVisible="false" />
<ProgressBar
android:id="@+id/nftDetailsProgress"
style="@style/Widget.Nova.ProgressBar.Indeterminate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp" />
<ImageView
android:id="@+id/nftDetailsMedia"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
tools:src="@tools:sample/backgrounds/scenic" />
<TextView
android:id="@+id/nftDetailsTitle"
style="@style/TextAppearance.NovaFoundation.Bold.Title1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="16dp"
android:textColor="@color/text_primary"
tools:text="Honeybird" />
<io.novafoundation.nova.feature_nft_impl.presentation.nft.common.NftIssuanceView
android:id="@+id/nftDetailsIssuance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginBottom="16dp"
android:layout_marginTop="8dp"
tools:text="#11 Edition of 9978" />
<TextView
android:id="@+id/nftDetailsDescription"
style="@style/TextAppearance.NovaFoundation.Regular.SubHeadline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="24dp"
android:textColor="@color/text_secondary"
tools:text="Wayne: Hello sir, what's your name and what brings you to Pastel Beach Mall?" />
<io.novafoundation.nova.feature_wallet_api.presentation.view.PriceSectionView
android:id="@+id/nftDetailsPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="12dp" />
<io.novafoundation.nova.common.view.TableView
android:id="@+id/nftDetailsTable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="24dp">
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/nftDetailsCollection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/nft_collection" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/nftDetailsOnwer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:primaryValueEndIcon="@drawable/ic_info"
app:title="@string/nft_owned_by" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/nftDetailsCreator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:primaryValueEndIcon="@drawable/ic_info"
app:title="@string/nft_created_by" />
<io.novafoundation.nova.common.view.TableCellView
android:id="@+id/nftDetailsChain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:title="@string/common_network" />
</io.novafoundation.nova.common.view.TableView>
</LinearLayout>
</ScrollView>
@@ -0,0 +1,62 @@
<?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:background="@drawable/drawable_background_image"
android:orientation="vertical">
<LinearLayout
android:id="@+id/nftListToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/blur_navigation_background"
android:gravity="center_vertical">
<ImageView
android:id="@+id/nftListBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:src="@drawable/ic_arrow_back"
app:tint="@color/actions_color" />
<TextView
style="@style/TextAppearance.NovaFoundation.SemiBold.Body"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/nft_your_nfts"
android:textColor="@color/text_primary" />
<io.novafoundation.nova.common.view.CounterView
android:id="@+id/nftListCounter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
tools:text="6" />
</LinearLayout>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/nftListRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/nftListNfts"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingStart="16dp"
android:paddingTop="16dp"
android:paddingEnd="5dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="2"
tools:listitem="@layout/item_nft" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
@@ -0,0 +1,119 @@
<?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:id="@+id/itemNftContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="11dp"
android:layout_marginBottom="12dp"
app:shimmer_auto_start="false"
tools:background="@color/block_background">
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/itemNftShimmer"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<View
android:layout_width="match_parent"
android:layout_height="262dp"
android:background="@drawable/bg_shimmering" />
</com.facebook.shimmer.ShimmerFrameLayout>
<LinearLayout
android:id="@+id/itemNftContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/itemNftMedia"
android:layout_width="match_parent"
android:layout_height="154dp"
android:layout_marginStart="6dp"
android:layout_marginTop="6dp"
android:layout_marginEnd="6dp"
android:adjustViewBounds="true"
android:maxHeight="154dp"
tools:src="@drawable/nft_media_progress" />
<TextView
android:id="@+id/itemNftTitle"
style="@style/TextAppearance.NovaFoundation.Regular.SubHeadline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@color/text_primary"
tools:text="Honeybird" />
<io.novafoundation.nova.feature_nft_impl.presentation.nft.common.NftIssuanceView
android:id="@+id/itemNftIssuance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="12dp"
android:ellipsize="end"
android:singleLine="true"
tools:text="#11 Edition of 9978" />
<View
android:id="@+id/itemNftPriceDivider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:background="@color/divider" />
<LinearLayout
android:id="@+id/itemNftPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="12dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/itemNftPricePlaceholder"
style="@style/TextAppearance.NovaFoundation.SemiBold.Footnote"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:includeFontPadding="false"
android:text="@string/nft_price_not_listed"
android:textColor="@color/text_secondary"
android:visibility="gone"
/>
<TextView
android:id="@+id/itemNftPriceToken"
style="@style/TextAppearance.NovaFoundation.SemiBold.Footnote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/text_primary"
tools:text="10 DOT" />
<TextView
android:id="@+id/itemNftPriceFiat"
style="@style/TextAppearance.NovaFoundation.Regular.Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:ellipsize="end"
android:includeFontPadding="false"
android:singleLine="true"
android:textColor="@color/text_secondary"
tools:text="($865.19)" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Nova.NftIssuance" parent="TextAppearance.NovaFoundation.SemiBold.Caps2">
<item name="android:paddingStart">6dp</item>
<item name="android:paddingTop">1.5dp</item>
<item name="android:paddingEnd">8dp</item>
<item name="android:paddingBottom">1.5dp</item>
<item name="android:textColor">@color/text_secondary</item>
</style>
</resources>