Bloomily for Android: Accessibility Conformance Report, WCAG Edition
Written by Bloomily from its own testing. Report date: 2026-10-10.
Based on VPATĀ® Version 2.5 Rev, WCAG Edition. VPATĀ® is a registered service mark of the Information Technology Industry Council (ITI). WCAG criteria are applied to native software as described in WCAG2ICT.
Name of product and version
Three Android apps:
| App | Package | Users | Version this report describes |
|---|---|---|---|
| Bloomily (family app) | app.bloomily.parent | families | 1.0.74 (version code 77), on the production track on Google Play on 2026-10-10 |
| Bloomily Center | app.bloomily.staff | school staff | Not published on Google Play, and no school runs it on 2026-10-10. The rows below do not describe it |
| Bloomily Kiosk | app.bloomily.kiosk | families at the door, staff | 1.0.23 (version code 26), on the production track on Google Play on 2026-10-10 |
Every row describes the two Google Play versions. Each version's source was checked to contain every change this report relies on (the family app from Bloomily's revision 07b253ef7f, the kiosk from bd4f0dd8a1).
Report date
2026-10-10
Product description
As for iOS: the family app and the check-in tablet app. (The staff and office app for Android is not published.)
Contact information
accessibility@bloomily.app. We send a first reply within 2 business days.
Notes
- Conformance claim: WCAG 2.1 Level A and Level AA, as applied to native apps by WCAG2ICT. WCAG 2.2 rows are reported for information only.
- Evidence comes from Google's Accessibility Test Framework (the engine behind Accessibility Scanner) run over the live node tree of the audited screens on an API 36 emulator with a count per screen that can only go down, a source lint for clickables without a role, icon buttons without a name, bright loading spinners, fields that collect the person's own details without a declared purpose and dialogs that cannot scroll (all at 0), unit tests over the colour tokens and the kiosk timer, Compose semantics tests, a device test that plays a captioned teacher video, and TalkBack's own utterance log on the sign-in, Home, calendar and kiosk screens with focus moved programmatically. No TalkBack gesture walk by a person was done; nothing in this report was verified by ear. The tests ran on an emulator, not on a phone.
- Two criteria depend on a school setting, "Caption and describe the photos and videos teachers post" (Admin OS, Settings, Accessibility). It is off for every school until the school turns it on. Where a row says "Supports when the school turns on" that setting, the product has the place and the player, and the school's own words make the criterion complete; with the setting off, the row describes what families get today.
- Stripe's PaymentSheet (paying in the family app) is Stripe's; Bloomily sets no custom appearance on it. It was not opened again after the app moved to Compose 1.8.
- A school's own words (photo captions and descriptions, what a video says) are the school's; the family app shows them where the school wrote them.
Evaluation methods used
Bloomily's own testing, 2026-09-24 to 2026-10-10: the Accessibility Test Framework audit on the family app's signature screens, album tiles, Photos feed and the video player with captions, and the kiosk's Draw, Type your name, "Still there?", PIN and walk-up QR screens (the QR view with keyboard focus), at font scale 1.0 and 2.0, with the kiosk on a 10-inch landscape tablet emulator; screenshots of the family app's Home, Calendar, Messages, More, Reports, Photos, sign-in and invite-code screens at font scale 2.0 and in the dark theme, read for clipped text, with the dark theme's text measured from the screen's own pixels (83 texts on Home, Reports and Photos); keyboard and directional-pad walks of the family app's Home and of every kiosk screen with key events sent to the emulator; a device test that plays a teacher video with a checked caption track and reads the caption shown at each moment; TalkBack utterance logs on sign-in, Home, calendar, kiosk PIN, signature and warning; unit tests for contrast, the kiosk timer, calendar words and the typed signature; the source lint over all apps; contrast computed with the WCAG 2.1 formula. The Google Play versions were read on 2026-10-10. Not done: a TalkBack walk by a person, a real phone, the family app's detail screens (report detail, settings, absences form, drop-in booking) in the dark theme and at font scale 2.0, the Stripe sheet after the Compose upgrade, and the Center app (not published).
Applicable standards and guidelines
| Standard / guideline | Included in report |
|---|---|
| Web Content Accessibility Guidelines 2.0 | Level A: Yes. Level AA: Yes. Level AAA: No |
| Web Content Accessibility Guidelines 2.1 | Level A: Yes. Level AA: Yes. Level AAA: No |
| Web Content Accessibility Guidelines 2.2 | Level A and AA rows reported for information only; not part of the claim. Level AAA: No |
Terms
Supports, Partially Supports, Does Not Support and Not Applicable as defined in the web report. Not Evaluated is used for no row.
WCAG 2.x report
Table 1: Success criteria, Level A
| Criteria | Conformance level | Remarks and explanations |
|---|---|---|
| 1.1.1 Non-text Content (Level A) | Supports | No icon button lacks a name (lint at 0). Family app: album tiles, the full-size photo and daily-report thumbnails are named by the school's caption (on the family's own child), the school's description written for every family, their place in the set and the date; the full-size photo is named while it loads and after it fails; the Photos feed names each tile the same way. Calendar dots are spoken as words. A class-album photo of another family's child: Supports when the school turns on Caption and describe the photos and videos teachers post and describes each album photo; with the setting off it is named by its place and date only. |
| 1.2.1 Audio-only and Video-only (Prerecorded) (Level A) | Supports | Supports when the school turns on Caption and describe the photos and videos teachers post and writes what happens in each video. The family app shows the school's description under the video; for a video with no sound the description is the alternative. No audio-only content. |
| 1.2.2 Captions (Prerecorded) (Level A) | Supports | Supports when the school turns on Caption and describe the photos and videos teachers post and checks each video's captions. The family app plays the checked captions as a text track, follows the phone's caption setting, and offers a Captions switch that says whether it is on; the cue shown at each moment was read during playback on the emulator. Only captions a person at the school has checked are shown. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) (Level A) | Supports | Supports when the school turns on Caption and describe the photos and videos teachers post and writes what happens in each video: the description plus "Show what is said" (the checked words as plain text in a named pane) form the media alternative. |
| 1.3.1 Info and Relationships (Level A) | Supports | 88 top-bar titles and 16 kiosk step titles are headings; radio and checkbox rows are one element with their state; the kiosk PIN row is one element with its progress as its value. |
| 1.3.2 Meaningful Sequence (Level A) | Supports | TalkBack's focus order followed the layout on the logged screens, and the keyboard order on Home followed the layout. Not verified by a gesture walk. |
| 1.3.3 Sensory Characteristics (Level A) | Supports | Instructions name the control ("Press Keep going to stay", "Type your name"). |
| 1.4.1 Use of Color (Level A) | Supports | Calendar dots are spoken as words ("1 event: Holiday"); status words accompany every status colour. |
| 1.4.2 Audio Control (Level A) | Not Applicable | Nothing plays sound on its own. |
| 2.1.1 Keyboard (Level A) | Supports | Every clickable carries a role. Family app: on Home, Tab reaches all 17 controls in order and cycles back, the directional pad reaches them in spatial order, and Enter activates. Kiosk: setup was completed from the keyboard alone; the welcome tiles, Back, the ten digits and Delete are reachable, and Enter types the focused digit. The signature pad offers "Type your name". Tested with key events on the emulator, not a physical keyboard. |
| 2.1.2 No Keyboard Trap (Level A) | Supports | Tab cycles on every screen walked; navigation is the platform's. |
| 2.1.4 Character Key Shortcuts (Level A) | Not Applicable | No keyboard shortcuts are defined. |
| 2.2.1 Timing Adjustable (Level A) | Supports | Kiosk: "Still there?" 20 seconds before the 120-second reset with one "Keep going" button that restarts the full time, as often as needed; any touch restarts it; a stroke in progress holds it; the success screen stays 20 seconds. Family app: no time limits. |
| 2.2.2 Pause, Stop, Hide (Level A) | Supports | The kiosk welcome pulse stops when the system animation scale is off; nothing else moves on its own. Verified in code, not on a device. |
| 2.3.1 Three Flashes or Below Threshold (Level A) | Supports | Nothing flashes. |
| 2.4.1 Bypass Blocks (Level A) | Supports | Screen and section titles are headings, so TalkBack can jump by heading. |
| 2.4.2 Page Titled (Level A) | Supports | Every screen's top bar title is a heading ("Calendar, Heading"; "Enter Your PIN, Heading"). |
| 2.4.3 Focus Order (Level A) | Supports | Focus order follows the layout; kiosk step titles are announced on entry. Not verified by a gesture walk. |
| 2.4.4 Link Purpose (In Context) (Level A) | Supports | Buttons and links say what they do; a full-screen dismiss is named "Close". |
| 2.5.1 Pointer Gestures (Level A) | Supports | No path-based gesture is required; the signature pad has "Type your name". |
| 2.5.2 Pointer Cancellation (Level A) | Supports | Standard controls act on release; the signature pad draws on touch because drawing needs it. |
| 2.5.3 Label in Name (Level A) | Supports | Accessible names contain the visible text ("selected, Draw, Tab, 1 of 2", "Keep going", "Captions"). |
| 2.5.4 Motion Actuation (Level A) | Not Applicable | Nothing is operated by device motion. |
| 3.1.1 Language of Page (Level A) | Supports | The apps are English and declare it. |
| 3.2.1 On Focus (Level A) | Supports | Focus never changes context. |
| 3.2.2 On Input (Level A) | Supports | Choosing a value never navigates by itself. |
| 3.3.1 Error Identification (Level A) | Supports | 87 inline error texts are polite live regions; the kiosk result is a live region; a blocking warning is assertive. |
| 3.3.2 Labels or Instructions (Level A) | Supports | Fields carry their visible labels ("Caption (optional)", the PIN label); the consent sentence sits under every signature. |
| 4.1.1 Parsing (Level A) | Not Applicable | Not applicable to native software. |
| 4.1.2 Name, Role, Value (Level A) | Supports | Every clickable has a role (168 without a role to 0); PIN progress, day selection, the Draw/Type tabs and the Captions switch expose their state; the audit reports no missing name on the audited screens (only disabled buttons, which are exempt). |
Table 2: Success criteria, Level AA
| Criteria | Conformance level | Remarks and explanations |
|---|---|---|
| 1.2.4 Captions (Live) (Level AA) | Not Applicable | No live media. |
| 1.2.5 Audio Description (Prerecorded) (Level AA) | Supports | Supports when the school turns on Caption and describe the photos and videos teachers post and writes what happens in each video: "Play with description" has the phone's own voice read the school's description, then plays the clip (extended description, W3C technique G8). It is offered only when a description exists and the phone has a voice; the speech itself was not listened to. |
| 1.3.4 Orientation (Level AA) | Supports | The family app rotates. The kiosk app is locked to landscape because it runs on a tablet mounted on a wall or stand at the door; that orientation is essential to the product (WCAG 1.3.4 exception; decided 2026-09-26). |
| 1.3.5 Identify Input Purpose (Level AA) | Supports | Every field that collects the person's own email, password, name, phone, address or one-time code declares its purpose (family and kiosk sign-in, registration, sign-up); fields about someone else never do; a lint rule holds both directions. |
| 1.4.3 Contrast (Minimum) (Level AA) | Supports | Orange fills carry dark ink (7.22:1); orange as text is 5.09:1; error and success text are 6.47 and 5.02:1; every token pair is held by a unit test; the audit reports no contrast failure on the audited screens apart from disabled controls (exempt). Dark theme: 0 failures across the 83 texts measured on Home, Reports and Photos (the lowest 4.53:1), and 0 in the light theme; the family app's dark scheme button is 4.62:1. |
| 1.4.4 Resize Text (Level AA) | Supports | All text sizes are in scalable units. At font scale 2.0 the family app's Home, Calendar, Messages, More, Reports, Photos, sign-in and invite-code screens and every audited kiosk screen wrap with no clipped text; dialogs scroll; child cards grow with the text and the school's name wraps; above 1.5 times the default size the bottom bar shows icons only, with each name kept for TalkBack and a long-press tooltip; buttons with a fixed height grow with their label; the numbers on the video player's rewind and forward buttons scale. |
| 1.4.5 Images of Text (Level AA) | Supports | No text is drawn as an image apart from logos and the rendered signature. |
| 1.4.10 Reflow (Level AA) | Supports | At font scale 2.0 the family app's screens scroll in one direction (the row of child cards is a single-axis carousel), and the kiosk's audited screens fit a 10-inch landscape tablet at font scale 1.0 and 2.0. |
| 1.4.11 Non-text Contrast (Level AA) | Supports | Field outlines are 4.80:1; switches, checkboxes, radios and focused borders are 5.09:1; the selected-child ring is 4.4:1; the ink mark on a filled control is at least 3.4:1; report icons are held to 3:1. Loading spinners draw in the text orange on light surfaces (4.66 to 5.09:1) and the light orange on dark ones (6.72:1 or more); the few left in the bright orange sit on black (7.75:1), and a lint rule holds the rest at 0. |
| 1.4.12 Text Spacing (Level AA) | Not Applicable | Android provides no user setting for letter, word or paragraph spacing. |
| 1.4.13 Content on Hover or Focus (Level AA) | Not Applicable | No hover; nothing appears on focus alone. |
| 2.4.5 Multiple Ways (Level AA) | Not Applicable | App screens are not a set of pages. |
| 2.4.6 Headings and Labels (Level AA) | Supports | Headings and labels describe their content. |
| 2.4.7 Focus Visible (Level AA) | Supports | The platform focus indicator is kept on every control. The kiosk draws a 3 dp ring in the text orange (4.97:1 on ivory) around the control that has keyboard or directional-pad focus, and its full-screen walk-up QR view, which has no press ripple, draws a 4 dp border in the same orange. |
| 3.1.2 Language of Parts (Level AA) | Not Applicable | The apps are English; a school's message in another language is shown as written. |
| 3.2.3 Consistent Navigation (Level AA) | Supports | The same structure on every visit. |
| 3.2.4 Consistent Identification (Level AA) | Supports | The same controls carry the same names. |
| 3.3.3 Error Suggestion (Level AA) | Supports | Error text says what to fix. |
| 3.3.4 Error Prevention (Legal, Financial, Data) (Level AA) | Supports | Payments go through Stripe's sheet with the amount shown before confirming; a kiosk check-in can be reversed by a check-out; form sign-offs show what is signed. |
| 4.1.3 Status Messages (Level AA) | Supports | 87 error texts, the kiosk result, "Signature added" and "Signature cleared" and the timeout warning are live regions. |
WCAG 2.2 criteria (information only, not part of the claim)
| Criteria | Conformance level | Remarks and explanations |
|---|---|---|
| 2.4.11 Focus Not Obscured (Minimum) (Level AA) | Supports | The keyboard resizes the screen rather than covering the field (adjustResize). |
| 2.5.7 Dragging Movements (Level AA) | Supports | "Type your name" beside every drawn signature. |
| 2.5.8 Target Size (Minimum) (Level AA) | Supports | The audit reports no small-target finding on the audited screens; the video player's controls are 48 dp high. |
| 3.2.6 Consistent Help (Level AA) | Not Applicable | No help mechanism repeats across screens. |
| 3.3.7 Redundant Entry (Level AA) | Supports | The kiosk reuses the typed name for the signature; forms keep what was typed. |
| 3.3.8 Accessible Authentication (Minimum) (Level AA) | Supports | Sign-in by emailed code or password; no puzzle. |
Legal disclaimer (Bloomily)
This report describes Bloomily's own testing of the versions named above on the date named above. It is not a certification, and it makes no statement about content a school or a family adds to the product.