optimize volume and brightness overlays

This commit is contained in:
Jorrin
2024-03-21 21:58:41 +01:00
parent 86f1210090
commit 945a9bf21d
8 changed files with 119 additions and 111 deletions

View File

@@ -1,14 +1,18 @@
import { useCallback, useEffect, useState } from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { useSharedValue } from "react-native-reanimated";
import * as Brightness from "expo-brightness";
import { useDebounce } from "../useDebounce";
import { useDebounceValue } from "tamagui";
export const useBrightness = () => {
const [showBrightnessOverlay, setShowBrightnessOverlay] = useState(false);
const debouncedShowBrightnessOverlay = useDebounce(showBrightnessOverlay, 20);
const brightness = useSharedValue(0.5);
const debouncedBrightness = useDebounce(brightness.value, 20);
const currentBrightness = useDebounceValue(brightness.value, 20);
const memoizedBrightness = useMemo(
() => currentBrightness,
[currentBrightness],
);
useEffect(() => {
async function init() {
@@ -26,24 +30,19 @@ export const useBrightness = () => {
void init();
}, [brightness]);
const handleBrightnessChange = useCallback(
async (newValue: number) => {
try {
setShowBrightnessOverlay(true);
brightness.value = newValue;
await Brightness.setBrightnessAsync(newValue);
} catch (error) {
console.error("Failed to set brightness:", error);
}
},
[brightness],
);
const handleBrightnessChange = useCallback(async (newValue: number) => {
try {
await Brightness.setBrightnessAsync(newValue);
} catch (error) {
console.error("Failed to set brightness:", error);
}
}, []);
return {
showBrightnessOverlay: debouncedShowBrightnessOverlay,
brightness,
debouncedBrightness: `${Math.round(debouncedBrightness * 100)}%`,
showBrightnessOverlay,
setShowBrightnessOverlay,
brightness,
currentBrightness: memoizedBrightness,
handleBrightnessChange,
} as const;
};