diff --git a/apps/expo/src/components/player/BottomControls.tsx b/apps/expo/src/components/player/BottomControls.tsx
index 8e9325c..01439a1 100644
--- a/apps/expo/src/components/player/BottomControls.tsx
+++ b/apps/expo/src/components/player/BottomControls.tsx
@@ -8,10 +8,9 @@ import { AudioTrackSelector } from "./AudioTrackSelector";
import { CaptionsSelector } from "./CaptionsSelector";
import { Controls } from "./Controls";
import { DownloadButton } from "./DownloadButton";
-import { PlaybackSpeedSelector } from "./PlaybackSpeedSelector";
import { ProgressBar } from "./ProgressBar";
-import { QualitySelector } from "./QualitySelector";
import { SeasonSelector } from "./SeasonEpisodeSelector";
+import { SettingsSelector } from "./SettingsSelector";
import { SourceSelector } from "./SourceSelector";
import { mapMillisecondsToTime } from "./utils";
@@ -83,8 +82,7 @@ export const BottomControls = ({ isLocalAsset }: { isLocalAsset: boolean }) => {
-
-
+
{Platform.OS === "android" ||
(Platform.OS === "ios" && isDevelopmentProvisioningProfile()) ? (
diff --git a/apps/expo/src/components/player/PlaybackSpeedSelector.tsx b/apps/expo/src/components/player/PlaybackSpeedSelector.tsx
index 2553474..955b608 100644
--- a/apps/expo/src/components/player/PlaybackSpeedSelector.tsx
+++ b/apps/expo/src/components/player/PlaybackSpeedSelector.tsx
@@ -1,82 +1,59 @@
-import { useState } from "react";
+import type { SheetProps } from "tamagui";
import { MaterialCommunityIcons } from "@expo/vector-icons";
import { useTheme } from "tamagui";
import { usePlaybackSpeed } from "~/hooks/player/usePlaybackSpeed";
-import { MWButton } from "../ui/Button";
-import { Controls } from "./Controls";
import { Settings } from "./settings/Sheet";
-export const PlaybackSpeedSelector = () => {
+export const PlaybackSpeedSelector = (props: SheetProps) => {
const theme = useTheme();
- const [open, setOpen] = useState(false);
- const { currentSpeed, changePlaybackSpeed } = usePlaybackSpeed();
-
- const speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
+ const { speeds, currentSpeed, changePlaybackSpeed } = usePlaybackSpeed();
return (
- <>
-
-
+
+
+
+ props.onOpenChange?.(false)}
/>
}
- onPress={() => setOpen(true)}
- >
- Playback
-
-
-
-
-
-
-
- setOpen(false)}
- />
- }
- title="Playback settings"
- />
-
- {speeds.map((speed) => (
-
- )
- }
- onPress={() => {
- changePlaybackSpeed(speed)
- .then(() => setOpen(false))
- .catch((err) => {
- console.log("error", err);
- });
- }}
- />
- ))}
-
-
-
- >
+ title="Playback settings"
+ />
+
+ {speeds.map((speed) => (
+
+ )
+ }
+ onPress={() => {
+ changePlaybackSpeed(speed)
+ .then(() => props.onOpenChange?.(false))
+ .catch((err) => {
+ console.log("error", err);
+ });
+ }}
+ />
+ ))}
+
+
+
);
};
diff --git a/apps/expo/src/components/player/QualitySelector.tsx b/apps/expo/src/components/player/QualitySelector.tsx
index 0e499f4..5f766a9 100644
--- a/apps/expo/src/components/player/QualitySelector.tsx
+++ b/apps/expo/src/components/player/QualitySelector.tsx
@@ -1,17 +1,14 @@
-import { useState } from "react";
-import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons";
+import type { SheetProps } from "tamagui";
+import { MaterialCommunityIcons } from "@expo/vector-icons";
import { useTheme } from "tamagui";
import { constructFullUrl } from "@movie-web/provider-utils";
import { usePlayerStore } from "~/stores/player/store";
-import { MWButton } from "../ui/Button";
-import { Controls } from "./Controls";
import { Settings } from "./settings/Sheet";
-export const QualitySelector = () => {
+export const QualitySelector = (props: SheetProps) => {
const theme = useTheme();
- const [open, setOpen] = useState(false);
const videoRef = usePlayerStore((state) => state.videoRef);
const videoSrc = usePlayerStore((state) => state.videoSrc);
const stream = usePlayerStore((state) => state.interface.currentStream);
@@ -46,26 +43,10 @@ export const QualitySelector = () => {
return (
<>
-
-
- }
- onPress={() => setOpen(true)}
- >
- Quality
-
-
-
@@ -76,7 +57,7 @@ export const QualitySelector = () => {
name="close"
size={24}
color={theme.playerSettingsUnactiveText.val}
- onPress={() => setOpen(false)}
+ onPress={() => props.onOpenChange?.(false)}
/>
}
title="Quality settings"
diff --git a/apps/expo/src/components/player/SettingsSelector.tsx b/apps/expo/src/components/player/SettingsSelector.tsx
new file mode 100644
index 0000000..d035a36
--- /dev/null
+++ b/apps/expo/src/components/player/SettingsSelector.tsx
@@ -0,0 +1,101 @@
+import { useState } from "react";
+import { MaterialCommunityIcons, MaterialIcons } from "@expo/vector-icons";
+import { useTheme } from "tamagui";
+
+import { MWButton } from "../ui/Button";
+import { Controls } from "./Controls";
+import { PlaybackSpeedSelector } from "./PlaybackSpeedSelector";
+import { QualitySelector } from "./QualitySelector";
+import { Settings } from "./settings/Sheet";
+
+export const SettingsSelector = () => {
+ const theme = useTheme();
+ const [open, setOpen] = useState(false);
+ const [qualityOpen, setQualityOpen] = useState(false);
+ const [playbackOpen, setPlaybackOpen] = useState(false);
+
+ return (
+ <>
+
+
+ }
+ onPress={() => setOpen(true)}
+ >
+ Settings
+
+
+
+
+
+
+
+
+
+ setOpen(false)}
+ />
+ }
+ title="Settings"
+ />
+
+
+ }
+ iconRight={
+
+ }
+ onPress={() => setQualityOpen(true)}
+ />
+
+ }
+ iconRight={
+
+ }
+ onPress={() => setPlaybackOpen(true)}
+ />
+
+
+
+ >
+ );
+};
diff --git a/apps/expo/src/hooks/player/usePlaybackSpeed.ts b/apps/expo/src/hooks/player/usePlaybackSpeed.ts
index c02698d..d37789a 100644
--- a/apps/expo/src/hooks/player/usePlaybackSpeed.ts
+++ b/apps/expo/src/hooks/player/usePlaybackSpeed.ts
@@ -2,6 +2,8 @@ import { useCallback } from "react";
import { usePlayerStore } from "~/stores/player/store";
+const speeds = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];
+
export const usePlaybackSpeed = () => {
const videoRef = usePlayerStore((state) => state.videoRef);
@@ -15,6 +17,7 @@ export const usePlaybackSpeed = () => {
);
return {
+ speeds,
currentSpeed: videoRef?.props.rate ?? 1,
changePlaybackSpeed,
} as const;