forked from thijooree/android
Replaces Contacts in the default bottom nav slot with a Chats page (Contacts moves to More and opens from the Chats toolbar). - Chats start when the page is first opened; no old history is loaded - Transfers come from BML notifications (instant), account history (booked later) and in-app receipts, merged into one bubble each - Chats are keyed by the account holder's real name, looked up via BML account validation, so nickname contacts and their MVR/USD accounts share one chat; the To bar picks the account to send to - Sending opens the Transfer page in a bottom sheet over the chat and returns to it on success; sent bubbles link to their receipt - Chat and name data are stored encrypted with CacheEncryption Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
228 lines
8.5 KiB
XML
228 lines
8.5 KiB
XML
<?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"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:orientation="vertical">
|
|
|
|
<LinearLayout
|
|
android:id="@+id/toAccountBar"
|
|
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="10dp"
|
|
android:visibility="gone">
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginEnd="8dp"
|
|
android:text="@string/chat_to"
|
|
android:textAppearance="?attr/textAppearanceLabelMedium"
|
|
android:textColor="?attr/colorOnSurfaceVariant" />
|
|
|
|
<LinearLayout
|
|
android:layout_width="0dp"
|
|
android:layout_height="wrap_content"
|
|
android:layout_weight="1"
|
|
android:orientation="vertical">
|
|
|
|
<TextView
|
|
android:id="@+id/tvToAccount"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:textAppearance="?attr/textAppearanceBodyLarge"
|
|
android:textColor="?attr/colorOnSurface" />
|
|
|
|
<TextView
|
|
android:id="@+id/tvToNickname"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:textAppearance="?attr/textAppearanceBodySmall"
|
|
android:textColor="?attr/colorOnSurfaceVariant"
|
|
android:visibility="gone" />
|
|
|
|
</LinearLayout>
|
|
|
|
<TextView
|
|
android:id="@+id/tvToCurrency"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:background="@drawable/bg_chat_date"
|
|
android:paddingHorizontal="10dp"
|
|
android:paddingVertical="3dp"
|
|
android:textAppearance="?attr/textAppearanceLabelLarge"
|
|
android:textColor="?attr/colorOnSurface" />
|
|
|
|
<ImageView
|
|
android:id="@+id/ivToSwitch"
|
|
android:layout_width="24dp"
|
|
android:layout_height="24dp"
|
|
android:layout_marginStart="8dp"
|
|
android:rotation="90"
|
|
android:src="@drawable/ic_arrow_right"
|
|
android:importantForAccessibility="no" />
|
|
|
|
</LinearLayout>
|
|
|
|
<com.google.android.material.divider.MaterialDivider
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content" />
|
|
|
|
<LinearLayout
|
|
android:id="@+id/saveContactBar"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:background="?attr/colorSurfaceContainerHigh"
|
|
android:gravity="center_vertical"
|
|
android:orientation="horizontal"
|
|
android:paddingStart="16dp"
|
|
android:paddingEnd="8dp"
|
|
android:visibility="gone">
|
|
|
|
<TextView
|
|
android:layout_width="0dp"
|
|
android:layout_height="wrap_content"
|
|
android:layout_weight="1"
|
|
android:text="@string/chat_not_in_contacts"
|
|
android:textAppearance="?attr/textAppearanceBodyMedium"
|
|
android:textColor="?attr/colorOnSurfaceVariant" />
|
|
|
|
<com.google.android.material.button.MaterialButton
|
|
android:id="@+id/btnSaveContact"
|
|
style="@style/Widget.Material3.Button.TextButton"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="@string/chat_save_contact" />
|
|
|
|
</LinearLayout>
|
|
|
|
<androidx.recyclerview.widget.RecyclerView
|
|
android:id="@+id/rvMessages"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="0dp"
|
|
android:layout_weight="1"
|
|
android:clipToPadding="false"
|
|
android:paddingHorizontal="12dp"
|
|
android:paddingVertical="8dp" />
|
|
|
|
<com.google.android.material.divider.MaterialDivider
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content" />
|
|
|
|
<TextView
|
|
android:id="@+id/tvCannotSend"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:padding="16dp"
|
|
android:gravity="center"
|
|
android:text="@string/chat_cannot_send"
|
|
android:textAppearance="?attr/textAppearanceBodySmall"
|
|
android:textColor="?attr/colorOnSurfaceVariant"
|
|
android:visibility="gone" />
|
|
|
|
<LinearLayout
|
|
android:id="@+id/composer"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:orientation="vertical"
|
|
android:paddingHorizontal="12dp"
|
|
android:paddingTop="8dp"
|
|
android:paddingBottom="8dp">
|
|
|
|
<TextView
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginBottom="4dp"
|
|
android:layout_marginStart="4dp"
|
|
android:text="@string/chat_from_account"
|
|
android:textAppearance="?attr/textAppearanceLabelMedium"
|
|
android:textColor="?attr/colorOnSurfaceVariant" />
|
|
|
|
<com.google.android.material.card.MaterialCardView
|
|
android:id="@+id/cardFromAccount"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:clickable="true"
|
|
android:focusable="true"
|
|
app:cardCornerRadius="12dp"
|
|
app:cardElevation="0dp"
|
|
app:strokeWidth="1dp"
|
|
app:strokeColor="?attr/colorOutline">
|
|
|
|
<LinearLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:gravity="center_vertical"
|
|
android:orientation="horizontal"
|
|
android:paddingEnd="12dp">
|
|
|
|
<include
|
|
android:id="@+id/fromAccountRow"
|
|
layout="@layout/item_account_dropdown"
|
|
android:layout_width="0dp"
|
|
android:layout_height="wrap_content"
|
|
android:layout_weight="1" />
|
|
|
|
<ImageView
|
|
android:layout_width="24dp"
|
|
android:layout_height="24dp"
|
|
android:rotation="90"
|
|
android:src="@drawable/ic_arrow_right"
|
|
android:importantForAccessibility="no" />
|
|
|
|
</LinearLayout>
|
|
|
|
</com.google.android.material.card.MaterialCardView>
|
|
|
|
<LinearLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_marginTop="8dp"
|
|
android:gravity="center_vertical"
|
|
android:orientation="horizontal">
|
|
|
|
<com.google.android.material.textfield.TextInputLayout
|
|
android:id="@+id/tilAmount"
|
|
android:layout_width="0dp"
|
|
android:layout_height="wrap_content"
|
|
android:layout_weight="1"
|
|
android:hint="@string/chat_amount"
|
|
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
|
|
app:boxCornerRadiusTopStart="28dp"
|
|
app:boxCornerRadiusTopEnd="28dp"
|
|
app:boxCornerRadiusBottomStart="28dp"
|
|
app:boxCornerRadiusBottomEnd="28dp">
|
|
|
|
<com.google.android.material.textfield.TextInputEditText
|
|
android:id="@+id/etAmount"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:inputType="numberDecimal"
|
|
android:maxLines="1"
|
|
android:imeOptions="actionSend" />
|
|
|
|
</com.google.android.material.textfield.TextInputLayout>
|
|
|
|
<com.google.android.material.button.MaterialButton
|
|
android:id="@+id/btnSend"
|
|
style="@style/Widget.Material3.Button.Icon"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="56dp"
|
|
android:layout_marginStart="8dp"
|
|
android:layout_marginTop="4dp"
|
|
android:text="@string/chat_send"
|
|
app:cornerRadius="28dp"
|
|
app:icon="@drawable/ic_send"
|
|
app:iconGravity="textEnd" />
|
|
|
|
</LinearLayout>
|
|
|
|
</LinearLayout>
|
|
|
|
</LinearLayout>
|