import { Feather } from "@expo/vector-icons"; import { BlurView } from "expo-blur"; import React, { useEffect } from "react"; import { Platform, TouchableOpacity, ViewProps } from "react-native"; import GoogleCast, { CastContext, useCastDevice, useDevices, useMediaStatus, useRemoteMediaClient, } from "react-native-google-cast"; interface Props extends ViewProps { width?: number; height?: number; background?: "blur" | "transparent"; } export const Chromecast: React.FC = ({ width = 48, height = 48, background = "transparent", ...props }) => { const client = useRemoteMediaClient(); const castDevice = useCastDevice(); const devices = useDevices(); const sessionManager = GoogleCast.getSessionManager(); const discoveryManager = GoogleCast.getDiscoveryManager(); const mediaStatus = useMediaStatus(); useEffect(() => { (async () => { if (!discoveryManager) { return; } await discoveryManager.startDiscovery(); })(); }, [client, devices, castDevice, sessionManager, discoveryManager]); if (background === "transparent") return ( { if (mediaStatus?.currentItemId) CastContext.showExpandedControls(); else CastContext.showCastDialog(); }} className="rounded-full h-10 w-10 flex items-center justify-center b" {...props} > ); if (Platform.OS === "android") return ( { if (mediaStatus?.currentItemId) CastContext.showExpandedControls(); else CastContext.showCastDialog(); }} className="rounded-full h-10 w-10 flex items-center justify-center bg-neutral-800/80" {...props} > ); return ( { if (mediaStatus?.currentItemId) CastContext.showExpandedControls(); else CastContext.showCastDialog(); }} {...props} > ); };