Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions packages/app/src/views/Details/Details.js
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ const Details = ({itemId, initialItem, onPlay, onSelectItem, onSelectPerson, onI
// Refs
const pageScrollerRef = useRef(null);
const pageScrollToRef = useRef(null);
const lastFocusedElementRef = useRef(null);

// Data loading
useEffect(() => {
Expand Down Expand Up @@ -586,6 +587,7 @@ const Details = ({itemId, initialItem, onPlay, onSelectItem, onSelectPerson, onI
}, [trailerOverlay]);

const openModal = useCallback((modal) => {
lastFocusedElementRef.current = document.activeElement;
setActiveModal(modal);
window.requestAnimationFrame(() => {
const modalId = `${modal}-modal`;
Expand All @@ -608,6 +610,11 @@ const Details = ({itemId, initialItem, onPlay, onSelectItem, onSelectPerson, onI

const closeModal = useCallback(() => {
setActiveModal(null);
window.requestAnimationFrame(() => {
if (lastFocusedElementRef.current) {
Spotlight.focus(lastFocusedElementRef.current);
}
});
}, []);

const handleSelectAudio = useCallback((e) => {
Expand Down
19 changes: 11 additions & 8 deletions packages/app/src/views/Player/TizenPlayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS
const healthMonitorRef = useRef(null);
const unregisterAppStateRef = useRef(null);
const controlsTimeoutRef = useRef(null);
const lastFocusedElementRef = useRef(null);
const timeUpdateIntervalRef = useRef(null);
const avplayReadyRef = useRef(false);
// Refs for stable callbacks inside AVPlay listener (avoids stale closures)
Expand Down Expand Up @@ -962,17 +963,15 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS
// ==============================
// Controls Auto-hide
// ==============================
const showControls = useCallback(() => {
const showControls = useCallback((isModalOpen = activeModal) => {
setControlsVisible(true);
if (controlsTimeoutRef.current) {
clearTimeout(controlsTimeoutRef.current);
}
// Don't auto-hide controls in audio mode
if (!isAudioMode) {
if (!isAudioMode && !isModalOpen) {
controlsTimeoutRef.current = setTimeout(() => {
if (!activeModal) {
setControlsVisible(false);
}
setControlsVisible(false);
}, CONTROLS_HIDE_DELAY);
}
}, [activeModal, isAudioMode]);
Expand Down Expand Up @@ -1232,10 +1231,10 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS

// Modal handlers
const openModal = useCallback((modal) => {
lastFocusedElementRef.current = document.activeElement;
setActiveModal(modal);
window.requestAnimationFrame(() => {
const modalId = `${modal}-modal`;

const focusResult = Spotlight.focus(modalId);

if (!focusResult) {
Expand All @@ -1252,9 +1251,13 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS

const closeModal = useCallback(() => {
setActiveModal(null);
showControls();
showControls(false);
window.requestAnimationFrame(() => {
Spotlight.focus('player-controls');
if (lastFocusedElementRef.current) {
Spotlight.focus(lastFocusedElementRef.current);
}else{
Spotlight.focus('playerControls');
}
});
}, [showControls]);

Expand Down
21 changes: 11 additions & 10 deletions packages/app/src/views/Player/WebOSPlayer.js
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,7 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS
}, [lyricsLines, currentTime]);

const lyricsScrollRef = useRef(null);


const lastFocusedElementRef = useRef(null);

const videoRef = useRef(null);
const containerRef = useRef(null);
Expand Down Expand Up @@ -1144,16 +1143,14 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS
};
}, [mediaUrl, isLoading, mimeType, playMethod, error]);

const showControls = useCallback(() => {
const showControls = useCallback((isModalOpen = activeModal) => {
setControlsVisible(true);
if (controlsTimeoutRef.current) {
clearTimeout(controlsTimeoutRef.current);
}
if (!isAudioMode) {
if (!isAudioMode && !isModalOpen) {
controlsTimeoutRef.current = setTimeout(() => {
if (!activeModal) {
setControlsVisible(false);
}
setControlsVisible(false);
}, CONTROLS_HIDE_DELAY);
}
}, [activeModal, isAudioMode]);
Expand Down Expand Up @@ -1629,10 +1626,10 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS
}, [settings.skipForwardLength, settings.seekStep, seekByOffset, isInGroup]);

const openModal = useCallback((modal) => {
lastFocusedElementRef.current = document.activeElement;
setActiveModal(modal);
window.requestAnimationFrame(() => {
const modalId = `${modal}-modal`;

const focusResult = Spotlight.focus(modalId);

if (!focusResult) {
Expand All @@ -1649,9 +1646,13 @@ const Player = ({item, resume, initialMediaSourceId, initialAudioIndex, initialS

const closeModal = useCallback(() => {
setActiveModal(null);
showControls();
showControls(false);
window.requestAnimationFrame(() => {
Spotlight.focus('player-controls');
if (lastFocusedElementRef.current) {
Spotlight.focus(lastFocusedElementRef.current);
}else{
Spotlight.focus('playerControls');
}
});
}, [showControls]);

Expand Down
Loading