You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Bank cards use physical-card corner proportions. Custom artwork now supports a fixed card frame with drag and pinch-to-zoom cropping before confirmation.
Improved authenticator and card-wallet entry: query only passwords with OTP keys, show loading until authenticator data is ready, prepare wallet lists in the background, and reuse parsed payloads with batched Rust sorting for large lists.
Bank cards, documents, and billing addresses now support custom artwork. The Edit entry sits below database selection, and the top detail preview opens the customizer. Standard card proportions, three information modes, and a separate bank-brand icon toggle are supported. Fixed valid JPG images being rejected during import.
The Monica Keyboard now shows a consistent loading state for authenticator and card-wallet panels instead of briefly presenting an incorrect empty state.
Fixed stuttering, snapping back, and unstable ordering while dragging items in the mixed card-wallet list.
Card-wallet cards and the add FAB now share the same visual components as other screens for consistent colors, corners, and interaction feedback.
The card wallet now supports the same swipe actions as the authenticator: swipe left to delete and right to select.
Merged performance work contributed by @JiangKaslana in #117, #120, and #122, improving large-vault loading, search, startup, and system authentication, with #123 promoting the verified MDBX3 runtime into production APKs.
Improved the authenticator and card-wallet first-entry path: merged sources are subscribed once, card-wallet compatibility and Bitwarden background work wait until the first frame is ready, and duplicate secure-item scans no longer block the main thread.
Fixed imported files showing an internal document:<id> value instead of the original filename.
Card-wallet All, Bank Cards, Documents, and Billing Addresses filters moved from the overflow menu into the folder menu's quick filters.
The authenticator overflow menu can now switch between the standard list and the tile layout directly.
Fixed the authenticator briefly showing the standard list before switching to the saved tile layout when opened from another Dock screen.
Note tiles now use the authenticator-style two-column, equal-height layout with whole-card editing, long-press multi-selection, and drag reordering; Notes, Authenticator, and Steam token cards share the tile-style corners, colors, and selected state, and the Notes layout menu uses “Standard/Tiles”.
Added a master haptic feedback toggle that turns off vibration for pull gestures, long presses, and other interactions at once.
Fixed the vault list scrollbar handle twitching during fast scrolling.
Fixed the Notes page triggering Bitwarden synchronization outside an explicitly selected Bitwarden vault.
Details
The authenticator no longer loads every active password to merge password-bound OTPs. Delete confirmation uses an ID/title-only query, and merged snapshots reuse parsed OTP data. An explicit ready state prevents the initial empty value from appearing as an empty authenticator database. Wallet projection, sorting, and filtering run in the background; unchanged encrypted payloads reuse their parsed values. Large lists use one JNI numeric batch with the existing favorite/order/tie-breaking rules and a Kotlin fallback when native code is unavailable. Card numbers, document content, and OTP keys never enter the sorting boundary.
Bank cards, documents, and billing addresses share a customizer with an ISO/IEC 7810 ID-1 85.60:53.98 preview, followed by image actions, information modes, and the bank-brand icon switch. A compact Edit entry appears below database selection; tapping the top detail preview opens the same customizer. “Show all” presents the item's main details, “number/address only” places the identifier near the lower middle, and “hide all” leaves only the image. Bank-card and document numbers retain masked previews.
Image import enforces the 25 MB limit using the bytes actually read, supports unknown-size and nonseekable document streams that can only be opened once, and applies photo orientation before cropping. Images are manually cropped in a fixed card frame and encoded as JPEG at up to 1280 pixels wide and stored as encrypted attachments; metadata contains only a stable filename, display mode, and icon preference. Bank cards and documents use local, MDBX, KeePass, or entitled Bitwarden attachment storage. Billing addresses retain their existing local/MDBX support, and WebDAV full backups include these local attachments. Saves and database copies wait for attachment processing. Billing-address moves between local storage and MDBX preserve the artwork, and copied artwork can be replaced or removed independently. Bitwarden accounts without attachment support receive an explicit warning. Lists use background sampled decoding, a 12 MB memory cache, and at most two concurrent jobs; items without artwork keep their existing layout.
When the Monica Keyboard switches to, restores after unlock, or reopens an authenticator or card-wallet panel, it shows the same loading state as the password panel until the real result is available.
The card wallet now follows the authenticator's standard list drag path, removing overlapping scale, placement, and shadow animations that could move a card twice in one frame. A local order snapshot is retained during a drag, and database emissions are reconciled by item ID while the write-back is pending, so intermediate Flow updates cannot restore the old order. Bank cards, documents, and billing addresses in the mixed list are persisted in one complete order update.
Bank cards, documents, billing addresses, and authenticator tiles now use one shared item-card container for the same surface level, corner radius, elevation, and selected state. The card wallet keeps its existing single-column layout and information structure. Its add button continues to use the global SwipeableAddFab, with the card-wallet-only solid color override removed so it matches Passwords, Authenticator, Notes, and other screens.
Bank cards, documents, and billing addresses now share the authenticator's SwipeActions: a left swipe enters the existing delete confirmation and identity-verification flow, while a right swipe starts multi-selection or toggles the current item. Delete swipes are disabled during selection, and all swipes pause during drag reordering to prevent accidental deletion and gesture conflicts.
Notes now derive the automatic-sync target strictly from the active filter. Only a Bitwarden vault, folder, or related quick filter can create a sync session; All and non-Bitwarden database views no longer start an all-vault session, avoiding unrelated network work and first-frame contention.
The contributions from @JiangKaslana in #117, #120, and #122 are described here as one final performance architecture: the vault list no longer decrypts every password before first render, while search and duplicate detection process non-sensitive metadata first and decrypt only when required. Versioned UTF-8 metadata batches are handled through Rust/JNI with automatic Kotlin fallback when native code is unavailable or validation fails. Bitwarden PBKDF2-SHA256 and Argon2id prefer the test-vector-verified Rust implementation while retaining the JVM fallback. Diagnostics, history, attachment, and sync maintenance work that is not required for the first screen is initialized later; system biometric and device-credential paths reuse prewarmed authentication components. Native cleanup reduced the uncompressed ARM .so size by roughly one third. Follow-up #123 promotes the MDBX3 3.0.0-alpha.1 runtime built from a pinned Monica-Pass/Mdbx source revision and verified against 535 ABI symbols and 237 checksums as the production APK's libmdbx_ffi.so. The upper layer retains the RUST_MDBX2 compatibility identifier and writable MDBX-2 format, so existing databases require no migration. These changes do not alter the Android Keystore boundary or the rule that password plaintext does not cross the search FFI boundary.
Stored TOTP items and password-bound TOTP items now share one merged upstream for the list, keyboard, and detail consumers, avoiding repeated Room subscriptions and key parsing. The card wallet schedules its KeePass compatibility-index refresh and Bitwarden auto-sync only after the bank-card, document, and billing-address streams have produced the first frame. Legacy secure-item binding repair is single-flight per repository and runs on Dispatchers.Default, so concurrent ViewModel creation does not duplicate a full-table scan or contend with the UI thread.
Android imports now query OpenableColumns.DISPLAY_NAME for the user-visible filename, safely fall back to a decoded URI path when providers omit it, and perform the query on the IO dispatcher. KDBX key-file selection uses the same resolver.
Card-wallet type filters previously lived only in the overflow menu, separate from quick filters such as Favorites and Uncategorized. All four types now appear as quick-filter chips at the top of the folder menu, applying immediately and dismissing the menu. The bottom-sheet folder style keeps its original overflow entry.
The authenticator layout style was previously reachable only through Settings, under page adjustments. The authenticator overflow menu now offers the switch directly, with its label and icon showing the style you are switching to. The choice reuses the existing setting, so it survives restarts and backup restores.
The authenticator list no longer creates a fresh settings subscription that paints its first frame with the default standard layout on every entry. It now consumes the settings snapshot and layout update path continuously owned by the main screen, so a saved tile layout is shown from the first frame without reloading authenticator data during Dock navigation.
The Notes grid replaces its separate staggered layout with the same MonicaTileGrid used by authenticator tiles: two columns, a fixed 220dp card height, 8dp item spacing, and shared page insets. Tile previews are plain text, so images and Markdown links no longer intercept whole-card editing; titles, tags, attachment state, sync state, and long-press actions remain available. After long-press multi-selection, the reorder handle uses the authenticator grid mechanism. Filtered drags reorder visible items and merge them back into the complete order in one write, while a pending local snapshot prevents Room emissions from snapping the UI back. MonicaItemCard now also wraps the standard and tile variants of Notes and Authenticator, card-wallet entries, and Steam token cards, providing the same surfaceContainer background, 8dp corners, 1dp elevation, and selected state. The card-wallet swipe container uses that exact shape as well, removing the oversized top-corner outline caused by mismatched nested surfaces. Steam mini-profile immersive backgrounds retain a transparent shared container, so the unified surface does not cover them. The Notes overflow menu now labels its layout choices “Standard” and “Tiles” instead of “switch to list/grid”.
Vibration logic was previously scattered across individual screens, and only the authenticator countdown had its own toggle, leaving other interactions impossible to silence. Pull gestures, long presses, and swipe actions now share a single haptic feedback implementation governed by a master "Haptic Feedback" switch. Authenticator vibration becomes a sub-item that is disabled and greyed out when the master switch is off. The toggle appears in both Settings and Extensions, and does not require Plus.
Vault rows vary in height, since entries with a verification-code progress bar are noticeably taller. The scrollbar previously estimated row spacing with a running average that tracked whichever rows were on screen, so a fast scroll made the estimate swing as the mix of tall and short rows changed, and the scroll-position calculation twitched with it. Spacing is now accumulated per row position, with the measured average filling in rows not yet seen, so repeated calculations over one frame's layout agree and the handle stays steady during fast scrolling.
The password page's linked-app picker now caches lightweight package metadata for five minutes and resolves icons only for visible rows. Large app inventories no longer decode every icon before the dialog can render, while the picker and autofill blacklist screens still show real app icons as rows appear.
Fixed the Notes page starting Bitwarden synchronization while viewing local, KeePass, MDBX, or All notes. Automatic sync now requires an explicitly selected Bitwarden vault.