# 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()` uses `PixelCopy` over the receipt card, writes a PNG to `cacheDir/receipts/`, exposes it via `FileProvider`, and fires `ACTION_SEND` - **Save to Gallery** — same capture, then writes to `MediaStore.Images` (`Pictures/`) on API 29+ or directly to `Environment.DIRECTORY_PICTURES` on 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](08-contacts.md)     **Next →** [OTP Screen](10-otp-screen.md)