Merge branch 'feature/btc-native-send' into fix/multisig-first-signer-deep-link

# Conflicts:
#	feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/bridge/BridgeFragment.kt
#	feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/bridge/BridgeViewModel.kt
#	feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/bridge/di/BridgeModule.kt
This commit is contained in:
2026-07-14 07:36:14 -07:00
116 changed files with 5425 additions and 455 deletions
@@ -25,212 +25,65 @@
android:orientation="vertical"
android:padding="16dp">
<!-- Pair Selector -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:background="@drawable/bg_primary_list_item"
android:orientation="horizontal"
android:padding="4dp">
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/bridgePairDotHez"
android:id="@+id/bridgeFromLabel"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_button_primary"
android:gravity="center"
android:padding="10dp"
android:text="DOT / HEZ"
android:textColor="@color/text_primary"
android:textSize="13sp"
android:textStyle="bold" />
android:text="@string/bridge_you_send"
android:textColor="@color/text_secondary" />
<TextView
android:id="@+id/bridgePairUsdt"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="10dp"
android:text="USDT"
android:textColor="@color/text_secondary"
android:textSize="13sp" />
<io.novafoundation.nova.feature_wallet_api.presentation.view.amount.MaxAmountView
android:id="@+id/bridgeFromMaxAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- Direction Toggle -->
<LinearLayout
<io.novafoundation.nova.feature_assets.presentation.bridge.view.BridgeAssetInputView
android:id="@+id/bridgeFromCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_primary_list_item"
android:orientation="horizontal"
android:padding="4dp">
android:layout_marginTop="8dp" />
<TextView
android:id="@+id/bridgeDirectionLeft"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_button_primary"
android:gravity="center"
android:padding="12dp"
android:text="DOT → HEZ"
android:textColor="@color/text_primary"
android:textSize="14sp"
android:textStyle="bold" />
<TextView
android:id="@+id/bridgeDirectionRight"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="12dp"
android:text="HEZ → DOT"
android:textColor="@color/text_secondary"
android:textSize="14sp" />
</LinearLayout>
<!-- From Section -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:cardBackgroundColor="@color/block_background"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/bridgeFromLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bridge_you_send"
android:textColor="@color/text_secondary"
android:textSize="12sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<EditText
android:id="@+id/bridgeFromAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@null"
android:hint="0.0"
android:inputType="numberDecimal"
android:textColor="@color/text_primary"
android:textColorHint="@color/text_secondary"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/bridgeFromToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="DOT"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/bridgeFromBalance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/text_secondary"
android:textSize="12sp"
tools:text="Balance: 10.5 DOT" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<!-- Swap Icon -->
<ImageView
android:id="@+id/bridgeFlipButton"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_marginVertical="4dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="8dp"
android:src="@drawable/ic_bridge"
app:tint="@color/icon_secondary" />
android:scaleType="centerInside"
android:src="@drawable/ic_flip_swap" />
<!-- To Section -->
<com.google.android.material.card.MaterialCardView
<TextView
android:id="@+id/bridgeToLabel"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/bridge_you_receive"
android:textColor="@color/text_secondary" />
<io.novafoundation.nova.feature_assets.presentation.bridge.view.BridgeAssetInputView
android:id="@+id/bridgeToCard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:cardBackgroundColor="@color/block_background"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/bridgeToLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/bridge_you_receive"
android:textColor="@color/text_secondary"
android:textSize="12sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/bridgeToAmount"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0.0"
android:textColor="@color/text_primary"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/bridgeToToken"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="HEZ"
android:textColor="@color/text_primary"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
android:layout_marginTop="8dp" />
<!-- Rate Info -->
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:cardBackgroundColor="@color/block_background"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
@@ -317,18 +170,14 @@
</com.google.android.material.card.MaterialCardView>
<!-- Warning for HEZ to DOT -->
<TextView
android:id="@+id/bridgeHezToDotWarning"
<!-- Warning for HEZ to DOT / USDT liquidity -->
<io.novafoundation.nova.common.view.AlertView
android:id="@+id/bridgeWarningAlert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/bg_warning"
android:padding="12dp"
android:text="@string/bridge_hez_to_dot_note"
android:textColor="@color/text_warning"
android:textSize="12sp"
android:visibility="gone" />
android:visibility="gone"
app:alertMode="warning" />
<!-- Multisig signatory-only bridge allowance sign button. Only visible to a wallet
that is one of the bridge multisig's 5 known signatories. -->
@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="12dp">
<ImageView
android:id="@+id/itemBridgePairIcon"
android:layout_width="32dp"
android:layout_height="32dp"
android:background="@drawable/bg_token_container"
android:scaleType="centerInside"
tools:src="@drawable/ic_pezkuwi_logo" />
<TextView
android:id="@+id/itemBridgePairTitle"
style="@style/TextAppearance.NovaFoundation.SemiBold.Body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:textColor="@color/text_primary"
tools:text="HEZ ⇄ DOT" />
</LinearLayout>
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<merge 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="wrap_content"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bridgeAssetInputContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:background="@color/input_background">
<ImageView
android:id="@+id/bridgeAssetInputImage"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="12dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/bg_token_container"
android:scaleType="centerInside"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_token_dot_colored" />
<ImageView
android:id="@+id/bridgeAssetInputSubtitleImage"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_marginEnd="4dp"
app:layout_constraintBottom_toBottomOf="@+id/bridgeAssetInputSubtitle"
app:layout_constraintStart_toEndOf="@+id/bridgeAssetInputImageBarrier"
app:layout_constraintTop_toTopOf="@+id/bridgeAssetInputSubtitle"
tools:src="@drawable/ic_pezkuwi_logo" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/bridgeAssetInputImageBarrier"
android:layout_width="0dp"
android:layout_height="match_parent"
app:barrierDirection="end"
app:barrierMargin="12dp"
app:constraint_referenced_ids="bridgeAssetInputImage" />
<TextView
android:id="@+id/bridgeAssetInputToken"
style="@style/TextAppearance.NovaFoundation.SemiBold.Body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:includeFontPadding="false"
android:textColor="@color/text_primary"
app:layout_constraintBottom_toTopOf="@+id/bridgeAssetInputSubtitle"
app:layout_constraintStart_toEndOf="@id/bridgeAssetInputImage"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed"
tools:text="DOT" />
<TextView
android:id="@+id/bridgeAssetInputSubtitle"
style="@style/TextAppearance.NovaFoundation.Regular.Footnote"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:includeFontPadding="false"
android:textColor="@color/text_secondary"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/bridgeAssetInputSubtitleImage"
app:layout_constraintTop_toBottomOf="@+id/bridgeAssetInputToken"
tools:text="Polkadot Asset Hub" />
<ImageView
android:id="@+id/bridgeAssetInputChevron"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/ic_chevron_right"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/bridgeAssetInputToken"
app:layout_constraintStart_toEndOf="@+id/bridgeAssetInputToken"
app:layout_constraintTop_toTopOf="@+id/bridgeAssetInputToken"
app:tint="@color/icon_primary" />
<EditText
android:id="@+id/bridgeAssetInputField"
style="@style/TextAppearance.NovaFoundation.Regular.Title2"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:background="@null"
android:gravity="end"
android:hint="0"
android:inputType="numberDecimal"
android:paddingTop="10dp"
android:paddingEnd="16dp"
android:paddingBottom="10dp"
android:saveEnabled="false"
android:textColor="@color/text_primary"
android:textColorHint="@color/hint_text"
android:textCursorDrawable="@null"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toEndOf="@+id/bridgeAssetInputChevron"
app:layout_constraintTop_toTopOf="parent"
tools:text="4.508614" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/bridgeAssetInputError"
style="@style/TextAppearance.NovaFoundation.Regular.Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/text_negative"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bridgeAssetInputContainer" />
</merge>