Screen Text
Coryn includes a built-in Screen Text State Provider during recording. It reads text from Android Views and Compose semantics without OCR, including dialogs and popups. It also runs when UI screenshots are disabled. No custom provider registration or manual reporting call is required.
Text is collected periodically, about every 500 ms during active recording. Collection pauses when recording sleeps or the screen is off. Only text changes are recorded.
Collected text
- Android
TextViewtext uses the displayed transformation; an empty value can fall back to its hint. The whole value is collected, rather than only the currently displayed lines. - Native sources must be shown, nontransparent and have a visible rectangle. A View fully clipped out of the viewport is currently skipped.
- Compose text and editable fields are collected when exposed through semantics. Off-screen content can be included if it is still in the composition; lazy items that have not been composed are not collected.
- Identical text from different sources is represented once, including duplicates shared by native Views and Compose. Runs of ASCII spaces collapse to one space before comparison:
"one space"and"one space"represent the same value. Tabs and line breaks are preserved; whitespace-only values are omitted. WebView page text, images, custom Canvas drawing and Surface pixels are not OCR-scanned.
Privacy
Mark sensitive content with the same View or Compose hiding APIs used for screenshots. A marked ancestor excludes its descendants from text collection. Password fields, password semantics and accessibility-private Compose subtrees are also excluded.
Text exclusion follows the marked source and its ancestry. Extra mask padding or overlap with another hidden rectangle does not exclude otherwise unmarked text.
Apply hiding on the content's own UI thread before displaying sensitive text. Hiding content later does not erase text already collected. Android's FLAG_SECURE does not exclude a window from Screen Text collection; use Coryn hiding for sensitive text even when the flag is enabled.
Manual States, Events, Screen arguments and API request Events require their own redaction. Screen Text hiding does not sanitize those payloads.
Text updates
Text is recorded when it appears, changes or disappears. Identical text shown in multiple places is recorded once; removing one copy does not remove the text while another eligible copy remains. Reordering unchanged text produces no update.
No manual State submission is needed. Use custom States or Events for data that must be captured explicitly, rather than relying on a short-lived text change being collected.
Large screens
Very large text-heavy screens may produce truncated text or skipped updates. Keep text content reasonable and test representative screens in replay.
Demo
Open Mixed in CorynReplayDemoApp and find Screen text changes. Update, add, remove or hide the sample text, then inspect the result in replay. Pause briefly between actions so each change can be collected.