External Link to Request Access or Learn More From No-Access Screen
When the no-access config repository includes an external URL for a blocked route (such as a mailto link, a coordinator portal, or an organization's support page), the no-access screen widget must render a tappable link that launches the URL via the url launcher utility. The link must be visually distinct from the denial explanation text, clearly labelled (e.g., 'Contact your coordinator', 'Request access', or 'Learn more'), and must open in the device's default browser or mail client rather than a webview, since the target may be an organization portal requiring its own authentication. The url-launcher-util handles the platform-specific launch and must handle failures gracefully (e.g., no browser installed) by showing a fallback message.
User Story
Acceptance Criteria
- Given the no-access config repository has an external URL configured for the blocked route, when the no-access screen is rendered, then a labelled external link button is displayed below the denial explanation
- Given the peer mentor taps the external link, when the url launcher utility processes the request, then the URL opens in the device's default browser or mail client
- Given the url launcher fails to open the URL, when the error is caught, then a plain-language fallback message (e.g., 'Could not open link — please contact your coordinator directly') is shown
- Given the no-access config repository has no external URL for the blocked route, when the screen renders, then no broken link or placeholder button is displayed
- Given a screen-reader user navigates to the external link button, when VoiceOver or TalkBack announces it, then the label communicates both the action and that it will open outside the app
Business Value
Workshop participants from all three organizations highlighted that peer mentors are often volunteers with limited technical experience. Providing a direct, one-tap path to contact a coordinator or access support resources from the denial screen reduces support overhead, accelerates issue resolution, and demonstrates that the app actively helps users rather than leaving them stranded — increasing long-term engagement and trust.
Components
- No-Access Screen ui
- Access Denial Service service
- No-Access Configuration Repository data
- URL Launcher Utility infrastructure
- Plain Language Error Display ui