appId: com.edde746.plezy name: TV hardware media and back keys follow player chrome state tags: - e2e - regression - tv - playback --- - runFlow: ../subflows/onboard_jellyfin_tv.yaml - pressKey: "Remote Dpad Center" - waitForAnimationToEnd: timeout: 5000 - runFlow: when: visible: "(?s)^(Play|Resume).*$" commands: - pressKey: "Remote Dpad Center" # TV playback starts with chrome hidden (#1765), so wait for its loading label # rather than treating the Pause button as readiness. A failed open reaches the # transport assertions below. - extendedWaitUntil: notVisible: "Overview" timeout: 30000 - extendedWaitUntil: notVisible: "Loading video" timeout: 30000 - assertNotVisible: "(?s)^(Play|Pause)$" # Transport keys keep chrome hidden (#1676); pause first so seeks cannot race # the end of this short fixture. - pressKey: "Remote Media Play Pause" - extendedWaitUntil: visible: "Paused" timeout: 10000 - assertNotVisible: "(?s)^Play$" # D-pad seeks use the cumulative skip badge, not the scrub bar. - pressKey: "Remote Dpad Right" - extendedWaitUntil: visible: "(?s)^Seek forward 10 seconds$" timeout: 10000 - assertNotVisible: "(?s)^Play$" - pressKey: "Remote Dpad Right" - extendedWaitUntil: visible: "(?s)^Seek forward 20 seconds$" timeout: 10000 - pressKey: "Remote Media Play Pause" - extendedWaitUntil: visible: "Playing" timeout: 10000 - assertNotVisible: "(?s)^Pause$" # Select is the explicit way to restore the chrome. - pressKey: "Remote Dpad Center" - extendedWaitUntil: visible: "(?s)^(Play|Pause)$" timeout: 10000 - pressKey: "back" - extendedWaitUntil: notVisible: "(?s)^Pause$" timeout: 10000 - assertNotVisible: "Overview" - pressKey: "back" - waitForAnimationToEnd: timeout: 5000 - runFlow: when: visible: "Overview" commands: - pressKey: "back" - extendedWaitUntil: visible: id: "tv_browse_rail_selection" timeout: 15000