cleanup brightness hooks

This commit is contained in:
Jorrin
2024-02-14 17:43:35 +01:00
parent a7392e92c9
commit ea6698b6e4
3 changed files with 81 additions and 60 deletions

View File

@@ -0,0 +1,46 @@
import { useCallback, useEffect, useState } from "react";
import { useSharedValue } from "react-native-reanimated";
import * as Brightness from "expo-brightness";
import { useDebounce } from "../useDebounce";
export const useBrightness = () => {
const [showBrightnessOverlay, setShowBrightnessOverlay] = useState(false);
const debouncedShowBrightnessOverlay = useDebounce(showBrightnessOverlay, 20);
const brightness = useSharedValue(0.5);
const debouncedBrightness = useDebounce(brightness.value, 20);
useEffect(() => {
async function init() {
try {
const { status } = await Brightness.requestPermissionsAsync();
if (status === Brightness.PermissionStatus.GRANTED) {
const currentBrightness = await Brightness.getBrightnessAsync();
brightness.value = currentBrightness;
}
} catch (error) {
console.error("Failed to get brightness permissions:", error);
}
}
void init();
}, []);
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);
}
}, []);
return {
showBrightnessOverlay: debouncedShowBrightnessOverlay,
brightness,
debouncedBrightness: `${Math.round(debouncedBrightness * 100)}%`,
setShowBrightnessOverlay,
handleBrightnessChange,
} as const;
};