Skip to content

Commit

Permalink
add releaseScreenWake on reset
Browse files Browse the repository at this point in the history
  • Loading branch information
MacielG1 committed Sep 23, 2024
1 parent 79ea28a commit 44137c9
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 28 deletions.
6 changes: 3 additions & 3 deletions src/components/MainMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ export default function MainMenu() {
const changeTitle = (title: string) => (document.title = title);

let playSound = useAudio(start, stop, sound1, sound2);
const { enableScreenWake, releaseScreenWake } = useScreenWake(); // Destructure the functions
const { enableScreenWake, releaseScreenWake } = useScreenWake();

useEffect(() => {
let isMounted = true; // used in the cleanup function
let isMounted = true;

if (timer && isMounted) {
enableScreenWake();
Expand Down Expand Up @@ -157,7 +157,7 @@ export default function MainMenu() {
releaseScreenWake();
}
}; // eslint-disable-next-line react-hooks/exhaustive-deps
}, [time]);
}, [time, enableScreenWake, releaseScreenWake]); // Add enableScreenWake and releaseScreenWake to the dependency array

return (
<>
Expand Down
4 changes: 4 additions & 0 deletions src/components/MenuButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { useEventListener } from "usehooks-ts";
import useStore from "../store/useStore";
import Timer from "../utils/Timer";
import Button from "./Button";
import useScreenWake from "../utils/useScreenWake"; // Add this import

export default function MenuButtons() {
const [setWorkTime, setRestTime, setPrepTime] = useStore((state) => [state.setWorkTime, state.setRestTime, state.setPrepTime]);
Expand All @@ -11,6 +12,8 @@ export default function MenuButtons() {
const [updateWorkoutFullTime, isPaused, setIsPaused] = useStore((state) => [state.updateWorkoutFullTime, state.isPaused, state.setIsPaused]);
const [autoRestartonReset, preferredLanguage] = useStore((state) => [state.autoRestartonReset, state.preferredLanguage]);

const { releaseScreenWake } = useScreenWake();

function handleStart() {
if (isPaused) setIsPaused(false);

Expand All @@ -37,6 +40,7 @@ export default function MenuButtons() {
function handleReset() {
timer?.stop();
resetTimer();
releaseScreenWake();
if (autoRestartonReset) {
setTimeout(() => {
handleStart();
Expand Down
48 changes: 23 additions & 25 deletions src/utils/useScreenWake.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,32 @@
import { useEffect } from "react";
import { useRef, useCallback } from "react";

export default function useScreenWake() {
let wakeLock: WakeLockSentinel | null = null;
const wakeLockRef = useRef<WakeLockSentinel | null>(null);

async function enableScreenWake() {
try {
wakeLock = await navigator.wakeLock.request("screen");
console.log("Screen wake lock activated");
} catch (error) {
console.error("Error requesting screen wake lock:", error);
const enableScreenWake = useCallback(async () => {
if (!wakeLockRef.current) {
try {
wakeLockRef.current = await navigator.wakeLock.request("screen");
console.log("Screen wake lock activated");
} catch (error) {
console.error("Error requesting screen wake lock:", error);
}
}
}
}, []);

function releaseScreenWake() {
if (wakeLock) {
wakeLock.release();
console.log("Screen wake lock released");
const releaseScreenWake = useCallback(() => {
if (wakeLockRef.current) {
wakeLockRef.current
.release()
.then(() => {
wakeLockRef.current = null;
console.log("Screen wake lock released");
})
.catch((error) => {
console.error("Error releasing screen wake lock:", error);
});
}
}
}, []);

useEffect(() => {
// Request wake lock when the component mounts
enableScreenWake();

// Release wake lock when the component unmounts
return () => {
releaseScreenWake();
};
}, []); // Empty dependency array ensures the effect runs only once

// Return both functions for external use
return { enableScreenWake, releaseScreenWake };
}

0 comments on commit 44137c9

Please sign in to comment.