fix(player): dolny pasek sterowania nad systemowym paskiem nawigacji

Zgloszenie 386ef7ab (Galaxy S25, Android 16, nawigacja trzema przyciskami): pasek
przewijania niewidoczny w pionie. `controlsBottom` mial `bottom: 0` i stale
`paddingBottom: 18`, bez marginesow systemowych. Od Androida 15 apka rysuje pod paskiem
nawigacji, wiec przy trzech przyciskach (~48 dp) scrubber ladowal pod nimi.

Dolozony `useSafeAreaInsets()`: dol plus lewy i prawy, bo w poziomie pasek przyciskow
siedzi z boku. Z gestami margines to kilka dp, wiec wyglad prawie bez zmian.
`SafeAreaProvider` juz owija apke, ten sam hook jest w nawigacji.

tsc: 11 bledow przed i po, zadnego w okolicy zmiany. Wpis w changelogu 2026-09-02a.
This commit is contained in:
goon-foss 2026-09-02 12:26:20 +02:00
parent ca80ae44b6
commit e5eb27228e
2 changed files with 26 additions and 1 deletions

View file

@ -29,6 +29,14 @@ export type ChangelogEntry = {
};
export const CHANGELOG: ChangelogEntry[] = [
{
id: '2026-09-02a',
date: 'September 2026',
items: [
'The seek bar no longer hides behind the Android navigation buttons. On phones that use the three-button bar, the player controls sat underneath it. They now leave room for it.',
'Movies stop swallowing other movies. Titles that differ only by a series number, like part 60 and part 61, or a bare title against a numbered sequel, were being merged into one entry with a pile of wrong links. New arrivals are kept apart now; already merged ones are being sorted out separately.',
],
},
{
id: '2026-08-27a',
date: 'August 2026',

View file

@ -13,6 +13,7 @@ import { setLastPlayback } from '../lib/lastPlayback';
import { allowScreenOff, keepScreenOn } from '../lib/keepAwake';
import { usePreferences } from '../PreferencesContext';
import React from 'react';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import {
ActivityIndicator,
Alert,
@ -203,6 +204,12 @@ function PlayerScreenActive() {
function NativeVideoPlayer({ params }: { params: RouteParams }) {
const client = useClient();
const nav = useNavigation<NativeStackNavigationProp<RootStackParamList, 'Player'>>();
// Marginesy systemowe. Od Androida 15 apka rysuje pod paskiem nawigacji, wiec dolny
// pasek sterowania z `bottom: 0` ladowal POD trzema przyciskami systemowymi i scrubber
// znikal (zgloszenie 386ef7ab, Galaxy S25 / Android 16, nawigacja przyciskami).
// Z gestami dolny margines to kilka dp, z przyciskami ~48 dp; w poziomie pasek
// przyciskow siedzi z boku, stad tez lewy i prawy.
const insets = useSafeAreaInsets();
const { url, sceneId, origin: playOrigin, resolvePageUrl, entityKind, durationSec, refererHost, title, fallbackEmbedUrl, headers: paramHeaders, fallbackProxyUrl } = params;
const { markBroken, canMark, busy: markBusy } = useMarkSourceBroken(params);
// 'movie' → /movies/{id}/progress, 'scene' (default) → /scenes/{id}/progress.
@ -1083,7 +1090,17 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) {
</View>
)}
<View style={styles.controlsBottom} pointerEvents="box-none">
<View
style={[
styles.controlsBottom,
{
paddingBottom: 18 + insets.bottom,
paddingLeft: 14 + insets.left,
paddingRight: 14 + insets.right,
},
]}
pointerEvents="box-none"
>
<Text style={styles.timeText}>{formatTime(displayedTime)}</Text>
<GestureDetector gesture={scrubGesture}>
<View style={styles.scrubTouchArea} onLayout={scrubBarLayout} collapsable={false}>