Files

3.4 KiB

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