Files

90 lines
3.4 KiB
Markdown

# App Navigation Shell Specification
## Purpose
The 5-root tab contract, the push-chrome rule for second-level screens, the
explicit Favoritos exemption from that rule, and root-to-root switching
(Escuchar "Ver todas" to Favoritos). Traceable to WU1.
## Requirements
### Requirement: Five-Tab Root Navigation
The app MUST render exactly 5 root tabs, in order: Escuchar, Buscar,
Favoritos, Alarmas, Ajustes, using the existing `PluriIconGlyph.*` icon set.
`PluriIconGlyph.home` MUST be the Escuchar tab's icon.
#### Scenario: App launch renders the 5 tabs in order
- GIVEN the app has finished cold-start
- WHEN the bottom navigation renders
- THEN exactly 5 tabs appear, labeled Escuchar, Buscar, Favoritos, Alarmas, Ajustes, in that order
#### Scenario: Escuchar uses the home glyph
- GIVEN the bottom navigation is rendered
- WHEN the Escuchar tab's icon is inspected
- THEN it is `PluriIconGlyph.home`
### Requirement: Push-Chrome on Second-Level Screens
Every genuine second-level screen (Reproductor completo, Países, Vacaciones,
Ecualizador, Grabaciones, and every new Settings detail screen) MUST render
a 56px header with a back affordance and MUST NOT render a bottom tab bar.
#### Scenario: Reproductor completo hides the tab bar
- GIVEN the user opens Reproductor completo from Escuchar
- WHEN the screen renders
- THEN it shows a 56px header with a back arrow and no bottom tab bar
#### Scenario: A Settings detail screen hides the tab bar
- GIVEN the user pushes any Settings detail screen from the Ajustes root
- WHEN the screen renders
- THEN it shows a 56px header with a back arrow and no bottom tab bar
### Requirement: Favoritos Tab-Bar Exemption
Favoritos MUST keep its bottom tab bar. This is the one deliberate exception
to the push-chrome rule: the source mockup draws this content as a pushed
screen only because its own 4-root IA had demoted Favoritos out of the root
set. In this app's 5-tab IA, Favoritos is root-level and MUST render the tab
bar like every other root.
#### Scenario: Favoritos renders with its tab bar
- GIVEN the user is on the Favoritos tab
- WHEN the screen renders
- THEN the bottom tab bar is visible, unlike every true second-level screen
### Requirement: Root-to-Root Switching Without Push
Navigating from Escuchar's "Tus emisoras" section to the full favorites list
MUST switch the active tab index to Favoritos. It MUST NOT push a new route.
#### Scenario: "Ver todas" switches tabs, not routes
- GIVEN the user is on Escuchar with 1 or more favorite stations
- WHEN they tap "Ver todas"
- THEN the active tab index becomes Favoritos
- AND no new route is pushed onto the navigation stack (back from Favoritos returns to whatever screen preceded Escuchar, not to Escuchar itself)
### Requirement: Escuchar Tab Rename Preserves the ARB Key
The former "Inicio" tab MUST be relabeled "Escuchar" (English: "Listen") by
changing the `navHome` key's VALUE, not by introducing a new key. The key
`navHome` MUST continue to exist, unchanged, in all 13 ARB locales.
#### Scenario: English and Spanish values are updated
- GIVEN `lib/l10n/app_en.arb` and `lib/l10n/app_es.arb`
- WHEN the `navHome` key is read
- THEN `app_en.arb` returns `"Listen"` and `app_es.arb` returns `"Escuchar"`
#### Scenario: Key parity across all 13 locales (edge case)
- GIVEN all 13 ARB files
- WHEN each is checked for the `navHome` key
- THEN every file still contains the key `navHome` (value content may differ), and no file is missing it