Accessible Form Feedback

A red border means nothing to a screen reader user, so the checkout applies Text Accessibility's props: each Field links its input to the visible label (nativeID, aria-labelledby); the error is text with aria-live="polite", an Android live region that TalkBack reads without moving focus; shouldFocusError calls focus() on the first invalid field's ref after a failed submit; the invalid handler announces "3 fields need attention" with AccessibilityInfo.announceForAccessibility(); the server banner has role="alert"; and the delivery options use role="radio" with aria-checked. After a failed submit, a UI dump shows the focus:

Finding the focused view after a failed submitShell
adb -s emulator-5554 exec-out uiautomator dump /dev/tty | tr '>' '\n' | grep 'focused="true"' \
  | grep -oE 'class="[^"]*"|bounds="[^"]*"'
Output
class="android.widget.EditText"
bounds="[42,737][1038,857]"

Those bounds are the email field, the first invalid one. Write specific messages ("A postcode has 5 digits", not "Invalid"), and try the flow with TalkBack on (Accessibility and i18n).