about summary refs log tree commit diff
path: root/src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx
diff options
context:
space:
mode:
authorHailey <me@haileyok.com>2024-09-06 15:01:05 -0700
committerGitHub <noreply@github.com>2024-09-06 15:01:05 -0700
commit7e4f8cabd3971bdf19647d122e3267ab6d1991e8 (patch)
tree412ab40714dde2e8d5b53a9fe931648053bb81fe /src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx
parent00ce95893d9f661a378db002f25def281e433d8b (diff)
downloadvoidsky-7e4f8cabd3971bdf19647d122e3267ab6d1991e8.tar.zst
[Video] Handle push/pop on Android for autoplay (#5194)
Diffstat (limited to 'src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx')
-rw-r--r--src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx b/src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx
index da8c7a98c..95fa0bb0e 100644
--- a/src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx
+++ b/src/view/com/util/post-embeds/ActiveVideoNativeContext.tsx
@@ -1,7 +1,7 @@
 import React from 'react'
 import {useVideoPlayer, VideoPlayer} from 'expo-video'
 
-import {isNative} from '#/platform/detection'
+import {isAndroid, isNative} from '#/platform/detection'
 
 const Context = React.createContext<{
   activeSource: string
@@ -26,7 +26,18 @@ export function Provider({children}: {children: React.ReactNode}) {
   })
 
   const setActiveSourceOuter = (src: string | null, viewId: string | null) => {
-    setActiveSource(src ? src : '')
+    // HACK
+    // expo-video doesn't like it when you try and move a `player` to another `VideoView`. Instead, we need to actually
+    // unregister that player to let the new screen register it. This is only a problem on Android, so we only need to
+    // apply it there.
+    if (src === activeSource && isAndroid) {
+      setActiveSource('')
+      setTimeout(() => {
+        setActiveSource(src ? src : '')
+      }, 100)
+    } else {
+      setActiveSource(src ? src : '')
+    }
     setActiveViewId(viewId ? viewId : '')
   }