Add a per-role font picker in Appearance settings. The two Material typeface roles can be set independently: brand (display/headline) and plain (title/body/label). Each can be the system default, a bundled font (Atkinson Hyperlegible, Lora, JetBrains Mono), or a .ttf/.otf the user loads from the device. The choice rebuilds the app-wide typography in MainActivity; a null/"system" choice leaves the Material default. Per the issue discussion the font-size and font-colour parts were dropped — Android's accessibility font scaling and the dynamic-colour theme already cover them. Custom files are copied into app-private storage and validated with android.graphics.fonts.Font.Builder before replacing the previous one, so a bad pick can't wedge global text rendering; a missing/unreadable file degrades to the system font. Each bundled font is previewed in its own face in the picker. OFL licences + attribution vendored under licenses/fonts/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
18 lines
1013 B
Markdown
18 lines
1013 B
Markdown
# Bundled fonts
|
|
|
|
Calendula bundles the following fonts as optional user-selectable typefaces
|
|
(Settings → Appearance → Fonts). Each is licensed under the SIL Open Font
|
|
License 1.1; the full license text is included alongside this file.
|
|
|
|
| Font | Files (`app/src/main/res/font/`) | Copyright | License |
|
|
|------|----------------------------------|-----------|---------|
|
|
| Atkinson Hyperlegible | `atkinson_hyperlegible_regular.ttf`, `atkinson_hyperlegible_bold.ttf` | © 2020 Braille Institute of America, Inc. | [OFL](AtkinsonHyperlegible-OFL.txt) |
|
|
| Lora (variable) | `lora.ttf` | © 2011 Cyreal | [OFL](Lora-OFL.txt) |
|
|
| JetBrains Mono | `jetbrains_mono_regular.ttf`, `jetbrains_mono_bold.ttf` | © 2020 The JetBrains Mono Project Authors | [OFL](JetBrainsMono-OFL.txt) |
|
|
|
|
The device's default typeface (Roboto on most Android builds) remains the
|
|
default and is not bundled.
|
|
|
|
Fonts a user loads from their own device via "Choose file…" are copied into the
|
|
app's private storage and are not redistributed.
|