2.6 KiB
Activities
The activities screen shows a local log of completed transfers initiated within the app, along with receipt viewing and sharing.
Fragment — ActivitiesFragment
Displays a chronological RecyclerView of locally stored transfer records. These records are written by the app at transfer completion time — they are not fetched from bank APIs.
A search bar at the top filters loaded entries by recipient label / account / remarks (ActivitiesFragment.kt:52-58).
Storage
Backed by util/ReceiptStore — a single encrypted JSON file at filesDir/activities.json (via CacheEncryption). Each entry is a TransferReceiptData plus a savedAt timestamp.
Only successful transfers are saved. The save call is guarded by ok && receipt != null (TransferFragment.kt:1201), so there is no "Failed" status — failures stay as a toast / dialog and never persist.
Activity List
Each row shows:
- Bank logo
- Recipient name and account number
- Transfer amount (hidden as
••••when hide-amounts is active) - Date and time
Tapping a row opens TransferReceiptFragment for that record.
Transfer Receipt — TransferReceiptFragment
A full-screen receipt view shown immediately after a successful transfer and accessible later from the activities list.
Receipt Fields
Schema: TransferReceiptData in ui/home/TransferReceiptData.kt.
| Field | Source |
|---|---|
bank |
"MIB" / "BML" / "FAHIPAY" |
amount / currency |
Entered + source-account currency |
fromLabel / fromColorHex / fromProfileImageHash |
Captured source account display |
toLabel / toAccount / toBank |
Resolved recipient |
remarks |
Free text the user entered |
mibReferenceNo / mibTransactionDate |
Populated for MIB transfers |
bmlFromName / bmlReference / bmlTimestamp / bmlMessage |
Populated for BML transfers |
Actions
- Share —
captureReceiptBitmap()usesPixelCopyover the receipt card, writes a PNG tocacheDir/receipts/, exposes it viaFileProvider, and firesACTION_SEND - Save to Gallery — same capture, then writes to
MediaStore.Images(Pictures/) on API 29+ or directly toEnvironment.DIRECTORY_PICTURESon older releases
PixelCopy reads from the window surface, so both actions fail while FLAG_SECURE is active. There is no off-screen rendering fallback.
Empty State
If no local transfer records exist, an empty-state illustration is shown with a prompt to make a transfer.
← Contacts Next → OTP Screen