12.16 Section 12: Frictionless UI & Hands-Free Operation

Text size

Make every label in the app bigger, on top of your phone's own font size.

Where to find it

Settings Text size

Summary

Four steps in Settings (Default, Large, Larger, Largest) resize all the text in the app at once: the main screen and its dials, every calculator, dialog, menu and help page, the first-run wizard and the guided tours. The step multiplies whatever font size the phone is already set to. Small labels grow the most and the big exposure readouts barely move, so captions get readable without the meter falling apart.

How it works

The four steps

Default is the size the app has always shipped with. Large, Larger and Largest multiply it by 1.15, 1.3 and 1.45. Tap a step and the whole app redraws straight away, this screen included. The sample line under the buttons is set in the smallest caption style the app uses, so you can judge the worst case before you close Settings.

It adds to your phone's font size

Android has its own Font size setting under Settings, Display, and the app already follows it. This setting stacks on top: if your phone is on large text and you pick Larger here, you get both. The combined size stops at the biggest size Android itself offers, so a phone that is already at its maximum can't go any bigger, and the app says so under the buttons.

Small text grows most

Big numbers like the shutter speed and aperture in the middle of the screen barely change, because they are easy to read already. The small grey captions, chip labels and dial titles are the ones that grow, and those are the ones you squint at outdoors in bright sun.

Where it applies

Everything the app draws: the viewfinder controls and dials, the compass and overlays, Equipment and the pickers, every calculator and tool, menus, the wizard, the tours and these help pages. A few things are drawn by Android itself and only follow your phone's setting: the short messages that pop up at the bottom of the screen, notifications and the keyboard.

Saved on the phone, not in a profile

Text size belongs to the person holding the phone, so it stays put when you switch profiles, and it survives restarts and updates.

Implementation notes (for developers)
TextSize enum (model/TextSize.kt): DEFAULT 1.0, LARGE 1.15, LARGER 1.3, LARGEST 1.45, persisted by name in AppMeta.textSizeName (app-wide, Room v81) with a SharedPreferences copy (text_size/name) read synchronously when the ViewModel is built so the first frame is already at the saved size; AppMeta wins if the two disagree. Combined font scale = phone scale x step, capped at 2.0 (Android's own maximum) and never below the phone scale. AppTheme provides a LocalDensity with that font scale (ui/theme/TextScale.kt); Density(d, fs) goes through Compose's non-linear tables, so small text grows by about the full step while readouts of 30 sp and up barely move. Dialogs, sheets and menus re-provide their own density, so every window goes through ui/AppWindows.kt (AppDialog, AppAlertDialog, AppModalBottomSheet, AppDropdownMenu, AppExposedDropdownMenu), which keep the call-site density stable (an open dialog is not rebuilt on change) and re-apply the step inside; TextScaleWindowGuardTest fails on any raw window call. Shipped alongside: labelSmall 11 -> 12 sp, a 10 sp floor at Default, contrast fixes (de-emphasised onSurface alpha text -> onSurfaceVariant; Classic onSurfaceVariant #9E9E9E, Paper LcdInkMid #3C4136) and layout fixes for Largest on a 360 dp phone (knob, buttons and strip dials, shutter and aperture rings, Paper focal ruler and headers, onboarding chip steps, Settings cards). Toasts, notifications and the keyboard are drawn by Android and follow only the phone setting.

Search documentation