diff --git a/cypress/e2e/dual-screen.cy.ts b/cypress/e2e/dual-screen.cy.ts index c77ac96..31602a2 100644 --- a/cypress/e2e/dual-screen.cy.ts +++ b/cypress/e2e/dual-screen.cy.ts @@ -456,8 +456,12 @@ describe('Dual-Screen plugin', () => { cy.get('[data-testid="dualscreen_sideBySideWrapper"]').should('not.exist'); cy.get('[data-testid="dualscreen_pipChildren"]').within(() => { - cy.get('[data-testid="dualscreen_switchToSideBySide"]').click({force: true}); + cy.get('[data-testid="dualscreen_switchToSideBySide"]').click({force: true}).then(() => { + // Manually dispatch the event + playerMain.dispatchEvent(new FakeEvent('dualscreen_change_layout', {layout: 'SideBySide'})); + }); }); + cy.get('[data-testid="dualscreen_sideBySideWrapper"]').should('exist'); }); }); }); diff --git a/src/dualscreen.tsx b/src/dualscreen.tsx index c501723..ffd3c52 100755 --- a/src/dualscreen.tsx +++ b/src/dualscreen.tsx @@ -301,18 +301,18 @@ export class DualScreen extends BasePlugin implements IEngineD }); }; - private _makeMultiscreenPlayers = (multiscreenPlayers: DualScreenPlayer[], invert = false): MultiscreenPlayer[] => { + private _makeMultiscreenPlayers = (multiscreenPlayers: DualScreenPlayer[], invert = false, userInteraction = true): MultiscreenPlayer[] => { this._currentMultiscreenPlayers = multiscreenPlayers.map(dualScreenPlayer => { if ([Layout.PIP, Layout.PIPInverse].includes(this._layout)) { return { player: dualScreenPlayer.player, setSecondary: () => { this._setActiveDualScreenPlayer(dualScreenPlayer.id, PlayerContainers.secondary); - this._setMode(true); + this._setMode(true, userInteraction); }, setPrimary: () => { this._setActiveDualScreenPlayer(dualScreenPlayer.id, PlayerContainers.primary); - this._setMode(true); + this._setMode(true, userInteraction); } }; } else if (this._layout === Layout.SideBySide) { @@ -321,7 +321,7 @@ export class DualScreen extends BasePlugin implements IEngineD setSecondary: null, setPrimary: () => { this._setActiveDualScreenPlayer(dualScreenPlayer.id, invert ? PlayerContainers.secondary : PlayerContainers.primary); - this._setMode(true); + this._setMode(true, userInteraction); } }; } else { @@ -335,7 +335,7 @@ export class DualScreen extends BasePlugin implements IEngineD } else { this._setActiveDualScreenPlayer(dualScreenPlayer.id, PlayerContainers.primary); } - this._setMode(true); + this._setMode(true, userInteraction); } }; } @@ -466,9 +466,9 @@ export class DualScreen extends BasePlugin implements IEngineD get: () => ( { - this._switchToSingleMedia(); + this._switchToSingleMedia({}, userInteraction); }} - onDefaultSize={this._setMode}> + onDefaultSize={() => this._setMode(undefined, userInteraction)}> implements IEngineD playerSizePercentage={this.config.childSizePercentage} player={this.getActiveDualScreenPlayer(PlayerContainers.secondary)!.player as any} hide={(event: OnClickEvent, byKeyboard: boolean) => - this._switchToSingleMedia({animation: Animations.None, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.Show)}) + this._switchToSingleMedia({animation: Animations.None, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.Show)}, userInteraction) } onSideBySideSwitch={(event: OnClickEvent, byKeyboard: boolean) => - this._switchToSideBySide({focusOnButton: byKeyboard ? ButtonsEnum.SideBySide : undefined, animation: Animations.ScaleLeft}) + this._switchToSideBySide({focusOnButton: byKeyboard ? ButtonsEnum.SideBySide : undefined, animation: Animations.ScaleLeft}, userInteraction) } onInversePIP={(event: OnClickEvent, byKeyboard: boolean) => { this._applyInverse(); @@ -490,13 +490,13 @@ export class DualScreen extends BasePlugin implements IEngineD force: true, animation: Animations.Fade, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.SwitchScreen) - }); + }, userInteraction); }} portrait={this._pipPortraitMode} aspectRatio={this.config.childAspectRatio} focusOnButton={focusOnButton} layout={this._layout} - multiscreen={} + multiscreen={} /> @@ -531,12 +531,12 @@ export class DualScreen extends BasePlugin implements IEngineD presets: PRESETS, container: ReservedPresetAreas.BottomBar, get: () => ( - + this._setMode(undefined, userInteraction)}> - this._switchToPIP({animation: Animations.None, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.Hide)}) + this._switchToPIP({animation: Animations.None, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.Hide)}, userInteraction) } - players={this._makeMultiscreenPlayers([...this._getMultiscreenPlayers(), this.getActiveDualScreenPlayer(PlayerContainers.secondary)!])} + players={this._makeMultiscreenPlayers([...this._getMultiscreenPlayers(), this.getActiveDualScreenPlayer(PlayerContainers.secondary)!], false, userInteraction)} focusOnButton={focusOnButton} /> @@ -556,19 +556,19 @@ export class DualScreen extends BasePlugin implements IEngineD const leftSideProps = { player: this.getActiveDualScreenPlayer(PlayerContainers.primary)!.player as any, onExpand: (event: OnClickEvent, byKeyboard: boolean) => - this._switchToPIP({animation: Animations.ScaleRight, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.SideBySide)}), + this._switchToPIP({animation: Animations.ScaleRight, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.SideBySide)}, userInteraction), focusOnButton: Boolean(focusOnButton), animation, - multiscreen: + multiscreen: }; const rightSideProps = { player: this.getActiveDualScreenPlayer(PlayerContainers.secondary)!.player as any, onExpand: (event: OnClickEvent, byKeyboard: boolean) => { this._applyInverse(); - this._switchToPIP({animation: Animations.ScaleLeft, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.SideBySide)}); + this._switchToPIP({animation: Animations.ScaleLeft, focusOnButton: getValueOrUndefined(byKeyboard, ButtonsEnum.SideBySide)}, userInteraction); }, animation: Animations.Fade, - multiscreen: + multiscreen: }; this._addActives( @@ -581,8 +581,8 @@ export class DualScreen extends BasePlugin implements IEngineD leftSideProps={leftSideProps} rightSideProps={rightSideProps} layout={this._layout} - onSizeChange={this._setMode} - onMinSize={this._switchToSingleMedia} + onSizeChange={() => this._setMode(undefined, userInteraction)} + onMinSize={() => this._switchToSingleMedia({}, userInteraction)} /> ) }) @@ -591,21 +591,21 @@ export class DualScreen extends BasePlugin implements IEngineD this.player.dispatchEvent(new FakeEvent(DualscreenEvents.SIDE_DISPLAYED, this._layout)); }; - private _onActiveSlideChanged = (slideItem: SlideItem | null) => { + private _onActiveSlideChanged = (slideItem: SlideItem | null, userInteraction = false) => { if (!slideItem) { // deactivate dual-screen layout - this._switchToHidden(); + this._switchToHidden(userInteraction); return; } let originalHiddenLayout = false; if (this._layout === Layout.Hidden && !this._externalLayout) { originalHiddenLayout = true; - this._setDefaultMode(); + this._setDefaultMode(userInteraction); } if (this._layout === Layout.Hidden && this._externalLayout) { - this._applyExternalLayout(); + this._applyExternalLayout(userInteraction); } let portraitModeChanged = false; @@ -624,19 +624,19 @@ export class DualScreen extends BasePlugin implements IEngineD if (originalHiddenLayout || (portraitModeChanged && this._layout === Layout.PIP) || refreshMultiscreen) { // refresh dual-screen layouts - this._setMode(true); + this._setMode(true, userInteraction); } if (this.config.removePlayerSettings) { this._removeSettingsComponent(); } }; - private _onSlideViewChanged = (viewChange: ExternalLayout) => { + private _onSlideViewChanged = (viewChange: ExternalLayout, userInteraction = false) => { if (this._externalLayout === viewChange) { return; } this._externalLayout = viewChange; - this._applyExternalLayout(); + this._applyExternalLayout(userInteraction); }; private _applyExternalLayout = (userInteraction = false) => {