Mail+
A clean, focused Gmail client that adapts to the device in your hand — bottom navigation on a phone, a real list-detail two-pane on a foldable or a phone running a desktop mode, hinge-aware in table-top mode, and a home-screen widget that lets you triage from the launcher.
The pitch
One app, every screen you actually use.
Most email apps were designed for a phone and stretched onto a tablet. Mail+ was designed the other way around — start with the canvas a foldable gives you when it's open, then collapse it gracefully when you close the device. The same Compose UI handles a regular phone, a foldable open in book mode, and a freeform desktop-mode window without forking the code.
“The first email client I've used on a foldable that doesn't feel like it's pretending to be a phone.” — Designed for big screens, polished for small ones.
Features
Everything Mail+ does today
Gmail integration that's actually Gmail
Not a wrapper around a web view — a native Gmail client built on the Gmail REST API.
- Google OAuth sign-in with token refresh handled in the background.
- Gmail v1 REST API for threads, messages, labels, send, modify, and trash operations.
- Multi-label awareness — the same message can live under Inbox, Starred, and a custom label, and read state stays consistent across every view.
- Parallel API calls for first-paint speed — label list and unread counts fetch concurrently while the inbox loads.
- Cache-first loading via SharedPreferences-backed per-label caches, so the inbox appears instantly and syncs in the background.
- Graceful degradation — when the network is flaky, cached state stays on screen instead of clearing it out.
Adaptive layout, three form factors
Width-aware navigation and a list-detail scaffold that does the right thing automatically.
- Compact (phone, foldable cover screen): bottom navigation bar, single-pane navigation, thread tap opens a new screen.
- Medium (small tablet, half-open foldable portrait): navigation rail, single-pane.
- Expanded (foldable unfolded, desktop mode, tablet landscape): permanent navigation drawer, two-pane list-detail with a ~40/60 split.
- Smooth pane transitions via
NavigableListDetailPaneScaffold— Compose handles the choreography. - Compose overlay replaces the detail pane on expanded screens and collapses back when you send or discard.
- One codebase — no separate phone/tablet activities, no XML layouts, no
sw600dpresource forks.
Foldables and desktop mode as first-class targets
Hinge-aware layouts, free-form windows, and a UI that respects the seam.
- Foldable posture detection via Jetpack WindowManager — the app knows when you're flat, half-open, book mode, or table-top.
- Table-top mode: controls on the bottom pane, content on top — perfect for reading email at a desk.
- Book mode: two-pane content that respects
isSeparatingso nothing important sits under the hinge. - Desktop mode:
resizeableActivity=trueand a<layout>manifest tag — the app can be resized to any window dimensions and stays interactive when you dock to an external display. - Pointer + keyboard friendly — built for the mouse and keyboard you plug into a desktop dock.
- Cover screen on a foldable: the compact layout handles the outer display perfectly.
Reading experience
Email you'd actually want to read on a big screen.
- HTML and plain-text rendering with embedded WebView, scripting disabled, image loading isolated.
- Pinch-to-zoom on every message, plus built-in zoom controls.
- Drawer-swipe is disabled while reading — your zoom gesture always wins instead of opening the side drawer accidentally.
- Sender avatars generated from a hash of the sender's address, with a deterministic color from the palette so the same sender looks the same every time.
- Smart timestamps — same-day messages show
h:mm a, older messages showMMM d. - Thread headers — Message-ID and References parsed so conversations stay grouped.
Compose, reply, and forward
A real composer, not a popup.
- Full composition surface with To, Cc, Subject, and body — fields that feel like fields, not floating placeholders.
- Reply, Reply All, and Forward with automatic quoting (“On [date], [sender] wrote:”).
- Multipart MIME send — every message goes out as plain text + HTML alternative so it lands cleanly in any client.
- Conversation threading — In-Reply-To and References headers set automatically so replies group with the original thread.
- Send progress indicator with a spinner so you know the API actually accepted the message.
- Drafts kept in memory while composing, so accidental navigation doesn't lose the message.
Triage and management
All the daily verbs.
- Archive — removes from Inbox, preserves under every other label the message belongs to.
- Delete — moves to Trash and clears the message from all cached views.
- Mark as read / unread — updates the Gmail server and every local cache in one shot.
- Optimistic UI — actions reflect immediately; the API call happens in the background.
- Bold unread rows with bold sender name + bold subject so unread state is unmissable at a glance.
- Selection highlight on the detail pane (expanded layout) so you always know which message you're reading.
Search
Find what you need without leaving the current label.
- Full-text search across sender, subject, and snippet within the current view.
- Instant filtering — results update as you type, no submit button.
- Case-insensitive matching, including across Unicode.
- Stays in context — search inside Inbox stays in Inbox; search inside a custom label scopes to that label.
Labels and organization
Gmail's labels, treated as the first-class concept they are.
- System labels first: Inbox, Starred, Snoozed, Sent, Drafts, Important, All Mail, Spam, Trash.
- Unlimited user labels with full CRUD — create, rename, recolor, delete.
- Nested hierarchy — Gmail's
Parent/Childnaming is rendered as a hierarchy in the drawer. - Color-coded labels with user-assigned hex colors rendered as dots; a calm fallback palette when nothing's set.
- Alphabetical sort for user labels so the same label is always in the same place.
- Per-label unread badges shown in the drawer and updated live as messages are read.
Favorites home-screen widget
Triage from the launcher.
- Glance-based widget using the new Compose-style widget framework, not legacy
RemoteViews. - Multi-section — Mail, Calendar, Contacts, Tasks, and a morning briefing all share one widget.
- Section switcher built into the widget header — tap a tab to swap content without leaving the launcher.
- Unread message list with sender avatar, subject, and snippet.
- Inline detail preview — tap a message in the widget to expand its snippet, date, and sender right in place.
- State persistence — the widget remembers what you were viewing across launches.
Settings and account
Configuration that respects you.
- Manage labels screen with nested editing and color assignment.
- Portal login for xMethod account, separate from Google OAuth — two independent identities.
- Sign out from the drawer, cleanly clearing tokens and caches.
- Per-identity signatures (UI scaffold in place, full editor on the roadmap).
- Server-side filter rules (UI scaffold in place, full editor on the roadmap).
Design and theming
Material 3 done with a calm visual voice.
- Material You dynamic color on Android 12+ — Mail+ picks up your wallpaper palette.
- Custom warm palette as the fallback — beige background
#FAF6F1, dark cocoa ink#3D2F24, sage and water-blue accents. - Serif headlines for long-form reading; system sans for UI chrome.
- Outlined icon set for clarity at small sizes and a quieter visual weight.
- Edge-to-edge insets with proper window-inset handling on gesture-nav devices.
- Hierarchical spacing — 12–16dp rhythm across the whole app, no ad-hoc paddings.
Architecture and performance
Modern Android, built to last.
- 100% Kotlin and Jetpack Compose — no Views, no Fragments, no XML layouts.
- Hilt dependency injection wired through repositories and ViewModels.
- Gradle convention plugins (
xm17.android.library,xm17.android.compose,xm17.hilt) keep every module's build script three lines long. - Modular by feature —
feature/emailis independently buildable, with its own data layer, theme, and screens. - Coroutines + Flow for async work; everything respects lifecycle scopes.
- OkHttp client reuse and parallel coroutine fetches keep cold-start time low.
Roadmap
What's coming next
-
Snooze with custom date/time picker
Backend already supports Snoozed label — UI date picker in active development.
-
Server-side filter rules editor
Manage Gmail's filter rules from inside the app — backend wired, UI in design.
-
Signature editor
Per-identity signatures with rich-text formatting.
-
Keyboard shortcuts for desktop mode
Gmail-style hotkeys (
j/kto move,eto archive,rto reply) for pointer-and-keyboard use on a docked phone or tablet. -
Splash screen
Branded launch via
androidx.core:core-splashscreen.
Mail+ ships through Google Play.
A direct-to-consumer release on the Play Store — no enterprise contracts, no licensing. Install it like any other Android app and sign in with your Google account.
Coming soon to Google Play