diff --git a/app.json b/app.json
index 5a09452..596f3d1 100644
--- a/app.json
+++ b/app.json
@@ -22,7 +22,14 @@
"backgroundImage": "./assets/android-icon-background.png",
"monochromeImage": "./assets/android-icon-monochrome.png"
},
- "predictiveBackGestureEnabled": false
+ "predictiveBackGestureEnabled": false,
+ "permissions": [
+ "android.permission.RECORD_AUDIO",
+ "android.permission.MODIFY_AUDIO_SETTINGS",
+ "android.permission.RECORD_AUDIO",
+ "android.permission.MODIFY_AUDIO_SETTINGS"
+ ],
+ "package": "com.anonymous.bilibiliapp"
},
"web": {
"bundler": "metro",
diff --git a/app/_layout.tsx b/app/_layout.tsx
index adfd957..69ee5c2 100644
--- a/app/_layout.tsx
+++ b/app/_layout.tsx
@@ -1,6 +1,7 @@
import { Tabs } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { StatusBar } from 'expo-status-bar';
+import { SafeAreaProvider } from 'react-native-safe-area-context';
import { useEffect } from 'react';
import { useAuthStore } from '../store/authStore';
@@ -12,7 +13,7 @@ export default function RootLayout() {
}, []);
return (
- <>
+
- >
+
);
}
diff --git a/app/index.tsx b/app/index.tsx
index f7df5a5..7d11dad 100644
--- a/app/index.tsx
+++ b/app/index.tsx
@@ -1,8 +1,9 @@
import React, { useEffect, useState } from 'react';
import {
- View, FlatList, StyleSheet, SafeAreaView,
+ View, FlatList, StyleSheet,
Text, TouchableOpacity, ActivityIndicator, Dimensions
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { VideoCard } from '../components/VideoCard';
@@ -52,7 +53,7 @@ export default function HomeScreen() {
item.bvid}
+ keyExtractor={(item, index) => `${item.bvid}-${index}`}
numColumns={2}
columnWrapperStyle={styles.row}
contentContainerStyle={styles.list}
diff --git a/app/video/[bvid].tsx b/app/video/[bvid].tsx
index 3d842a3..ee1b37c 100644
--- a/app/video/[bvid].tsx
+++ b/app/video/[bvid].tsx
@@ -1,8 +1,9 @@
import React, { useState, useEffect } from 'react';
import {
- View, Text, ScrollView, StyleSheet, SafeAreaView,
+ View, Text, ScrollView, StyleSheet,
TouchableOpacity, Image, ActivityIndicator
} from 'react-native';
+import { SafeAreaView } from 'react-native-safe-area-context';
import { useLocalSearchParams, useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { VideoPlayer } from '../../components/VideoPlayer';
diff --git a/components/NativeVideoPlayer.tsx b/components/NativeVideoPlayer.tsx
new file mode 100644
index 0000000..753d8b3
--- /dev/null
+++ b/components/NativeVideoPlayer.tsx
@@ -0,0 +1,37 @@
+import React, { useRef, useState } from 'react';
+import { View, StyleSheet, Dimensions } from 'react-native';
+import { Video, ResizeMode, AVPlaybackStatus } from 'expo-av';
+
+const { width } = Dimensions.get('window');
+const VIDEO_HEIGHT = width * 0.5625;
+
+interface Props {
+ uri: string;
+}
+
+export function NativeVideoPlayer({ uri }: Props) {
+ const videoRef = useRef