# language: fr Fonctionnalité: Commandes au volant et interactions simplifiées En tant que conducteur en sécurité Je veux utiliser uniquement les commandes simplifiées au volant Afin de naviguer sans distraction et en toute sécurité Contexte: Étant donné que l'API RoadWave est disponible Et qu'un utilisateur est connecté Et que l'application est connectée via CarPlay ou Android Auto Scénario: Trois commandes disponibles au volant uniquement Étant donné que je conduis à 50 km/h Quand je consulte les commandes physiques disponibles Alors seules 3 actions sont disponibles: | Commande | Action | | Suivant | Passer au contenu suivant | | Précédent | Revenir au précédent (règle 10s) | | Play/Pause | Pause/reprise avec fade 0.3s | Et aucune commande complexe n'est proposée Scénario: Commande "Suivant" au volant Étant donné que j'écoute un contenu "A" Quand j'appuie sur le bouton physique "Suivant" au volant Alors le contenu "B" démarre immédiatement Et aucune action supplémentaire n'est requise Et l'interface ne demande aucune confirmation Scénario: Commande "Précédent" au volant respecte règle 10s Étant donné que j'écoute un contenu depuis 5 secondes Quand j'appuie sur "Précédent" au volant Alors je reviens au contenu précédent (règle <10s) Étant donné que j'écoute un contenu depuis 15 secondes Quand j'appuie sur "Précédent" au volant Alors le contenu actuel rejoue depuis le début (règle ≥10s) Scénario: Commande "Play/Pause" avec fade audio Étant donné qu'un contenu est en lecture Quand j'appuie sur "Pause" au volant Alors la lecture se met en pause avec un fade out de 0.3 secondes Et la position de lecture est sauvegardée Quand j'appuie sur "Play" au volant Alors la lecture reprend avec un fade in de 0.3 secondes Et la reprise se fait à la position exacte Scénario: Aucune commande complexe supportée Étant donné que je conduis Quand j'essaie un appui long sur "Suivant" Alors l'action n'est pas détectée (non supporté iOS/Android) Quand j'essaie un double-appui sur "Pause" Alors l'action n'est pas détectée Et seules les actions simples (clic simple) fonctionnent Scénario: Compatibilité 100% tous véhicules Étant donné que je conduis une voiture avec commandes basiques Et que mon véhicule a seulement Suivant/Précédent/Pause Quand j'utilise RoadWave Alors toutes les fonctions essentielles sont accessibles Et je n'ai pas besoin de boutons supplémentaires Scénario: Feedback visuel discret après action Étant donné que j'appuie sur "Suivant" Quand le contenu change Alors l'interface CarPlay/Android Auto affiche le nouveau titre Et aucune popup ne bloque la vue Et le changement est fluide et immédiat Scénario: Like automatique renforcé après écoute ≥80% Étant donné que j'écoute un contenu de 5 minutes tagué "Automobile" Quand j'écoute pendant 4 minutes 30 secondes (90%) Alors un like automatique renforcé (+2 points) est enregistré Et un badge discret "♥ Ajouté à vos favoris" s'affiche 2 secondes Et aucune action manuelle n'est requise Scénario: Like automatique standard après écoute 30-79% Étant donné que j'écoute un contenu de 5 minutes tagué "Voyage" Quand j'écoute pendant 2 minutes (40%) Et que j'appuie sur "Suivant" Alors un like automatique standard (+1 point) est enregistré Et un badge discret s'affiche brièvement Et je peux continuer à conduire sans interruption Scénario: Signal négatif après skip rapide <10s Étant donné que j'écoute un contenu tagué "Politique" Quand j'appuie sur "Suivant" après seulement 5 secondes Alors un signal négatif (-0.5 point) est enregistré Et la jauge "Politique" diminue légèrement Et aucun message n'est affiché (transparence) Scénario: Pas de like si écoute <30% Étant donné que j'écoute un contenu de 10 minutes Quand j'écoute pendant 2 minutes (20%) Et que j'appuie sur "Suivant" Alors aucun like n'est enregistré Et les jauges ne changent pas Et le système considère l'écoute comme neutre Scénario: Badge de feedback visuel disparaît après 2 secondes Étant donné que je reçois un like automatique Quand le badge "♥ Ajouté à vos favoris" apparaît Alors il reste visible 2 secondes en bas de l'écran Et il disparaît automatiquement sans action Et il ne bloque pas la vue de la route Scénario: Tracking du temps d'écoute précis côté client Étant donné que je démarre la lecture d'un contenu Quand le player audio iOS/Android enregistre le temps Alors le startTime est enregistré à la milliseconde Quand j'arrête la lecture (Suivant, Pause, ou fin) Alors la durée exacte écoutée est calculée Et le pourcentage (durée / durée_totale * 100) est envoyé à l'API Scénario: API reçoit les événements d'écoute pour calcul Étant donné que j'écoute un contenu de 5 minutes à 80% Quand l'événement est envoyé à l'API Alors le backend reçoit: """ { "content_id": "abc123", "duration": 240, "content_total": 300, "percentage": 80.0, "action": "completed" } """ Et le backend calcule le like automatique (+2 points) Et les jauges sont mises à jour immédiatement (Redis + PostgreSQL) Scénario: Actions différentes selon arrêt du contenu Étant donné que j'écoute un contenu Quand j'appuie sur "Suivant" Alors l'action envoyée est "skipped" Quand le contenu se termine naturellement Alors l'action envoyée est "completed" Quand j'appuie sur "Pause" Alors l'action envoyée est "paused" Et le backend traite chaque action différemment Scénario: Calcul immédiat côté backend sans délai Étant donné que l'API reçoit un événement d'écoute Quand le backend traite l'événement Alors les jauges sont mises à jour immédiatement (< 100ms) Et les nouvelles recommandations utilisent les valeurs actualisées Et il n'y a aucun batch différé Scénario: Compatibilité iOS avec AVPlayer Étant donné que l'app iOS utilise AVPlayer Quand les commandes physiques sont interceptées Alors les événements MPRemoteCommandCenter sont capturés: | Commande | Événement iOS | | Suivant | nextTrackCommand | | Précédent | previousTrackCommand | | Play/Pause | playCommand / pauseCommand | Et le tracking du temps utilise CMTime Scénario: Compatibilité Android avec MediaSession Étant donné que l'app Android utilise MediaPlayer Quand les commandes physiques sont interceptées Alors les événements MediaSession sont capturés: | Commande | Action Android | | Suivant | ACTION_SKIP_TO_NEXT | | Précédent | ACTION_SKIP_TO_PREVIOUS | | Play/Pause | ACTION_PLAY / ACTION_PAUSE | Et le tracking du temps utilise SystemClock.elapsedRealtime() Scénario: Sécurité maximale - pas de distraction Étant donné que je conduis à 80 km/h Quand j'utilise RoadWave avec les commandes au volant Alors je n'ai jamais besoin de regarder mon téléphone Et je n'ai jamais besoin de toucher l'écran CarPlay/Android Auto Et toutes les actions sont accessibles via boutons physiques Et les likes sont enregistrés automatiquement Plan du Scénario: Calcul du like automatique selon pourcentage Étant donné que j'écoute un contenu tagué "Sport" Quand j'écoute pendant % Alors le like automatique est Et l'impact sur la jauge est Exemples: | pourcentage | type | points | | 10 | aucun | 0 | | 25 | aucun | 0 | | 29 | aucun | 0 | | 30 | standard | +1 | | 50 | standard | +1 | | 79 | standard | +1 | | 80 | renforcé | +2 | | 90 | renforcé | +2 | | 100 | renforcé | +2 | Plan du Scénario: Signal négatif uniquement si skip très rapide Étant donné que j'écoute un contenu Quand je skip après secondes Alors le signal est Et l'impact est Exemples: | secondes | type | points | | 3 | négatif | -0.5 | | 5 | négatif | -0.5 | | 9 | négatif | -0.5 | | 10 | neutre | 0 | | 15 | neutre | 0 | | 30 | neutre | 0 |