redegsigned OTP page and show next TOTP code
Auto Tag on Version Change / check-version (push) Successful in 3s
Auto Tag on Version Change / check-version (push) Successful in 3s
This commit is contained in:
@@ -13,10 +13,13 @@ Hosts one card per enrolled bank authenticator. Banks with no stored TOTP seed a
|
||||
## TOTP Display
|
||||
|
||||
Each card shows:
|
||||
- Bank logo and name
|
||||
- The current 6-digit TOTP code (large text)
|
||||
- A circular countdown ring showing time remaining in the current 30-second window
|
||||
- The code refreshes automatically when the window expires — no user interaction needed
|
||||
- Bank logo, bank name and account holder name
|
||||
- A circular countdown ring with the seconds left in the current 30-second window; the ring and code turn red in the last 5 seconds
|
||||
- The current 6-digit TOTP code (large text) with a copy button
|
||||
- The next window's code (smaller, below a divider) with its own copy button — handy when the current code is about to expire
|
||||
- The codes refresh automatically when the window expires — no user interaction needed
|
||||
|
||||
Tapping anywhere on the card also copies the current code. If no logins have a seed, an empty-state message is shown instead.
|
||||
|
||||
### Algorithm
|
||||
|
||||
@@ -32,12 +35,12 @@ Standard RFC 6238 TOTP:
|
||||
|
||||
One card is rendered for every MIB and every BML login that has a stored OTP seed (`OtpFragment.kt`), sorted by the user's [login order](00-app-overview.md#login-order). Seeds are per-`loginId` in `CredentialStore`.
|
||||
|
||||
| Bank | Seed source | Card label |
|
||||
| Bank | Seed source | Card title / subtitle |
|
||||
|---|---|---|
|
||||
| MIB | `loadMibCredentials(loginId).otpSeed` (entered at login) | `"MIB · {fullName}"` |
|
||||
| BML | `loadBmlCredentials(loginId).otpSeed` (entered at login) | `"BML · {fullName}"` |
|
||||
| MIB | `loadMibCredentials(loginId).otpSeed` (entered at login) | `MIB` / `{fullName}` |
|
||||
| BML | `loadBmlCredentials(loginId).otpSeed` (entered at login) | `BML` / `{fullName}` |
|
||||
|
||||
If no full name has been cached the label falls back to plain `"MIB"` / `"BML"` and a background `MibProfileClient.fetchPersonalProfile()` / `BmlAccountClient.fetchUserInfo()` call refreshes it.
|
||||
If no full name has been cached the subtitle falls back to `"Authenticator"` and a background `MibProfileClient.fetchPersonalProfile()` / `BmlAccountClient.fetchUserInfo()` call refreshes it.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user