player clean up, az selector style fixes

This commit is contained in:
Violet Caulfield
2026-03-07 01:18:49 -06:00
parent 58d35ec8e9
commit a8cecd813f
2 changed files with 31 additions and 58 deletions
@@ -1,6 +1,6 @@
import React, { RefObject, useEffect, useRef, useState } from 'react'
import { LayoutChangeEvent, View as RNView, Text as RNText } from 'react-native'
import { getToken, Spinner, Text, useTheme, YStack } from 'tamagui'
import { View as RNView, Text as RNText } from 'react-native'
import { getToken, Paragraph, Spinner, useTheme, View, YStack } from 'tamagui'
import { Gesture, GestureDetector } from 'react-native-gesture-handler'
import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'
import { scheduleOnRN } from 'react-native-worklets'
@@ -153,57 +153,40 @@ export default function AZScroller({
top: gesturePositionY.value,
}))
const handleLetterLayout = (event: LayoutChangeEvent) => {
letterHeight.current = event.nativeEvent.layout.height
}
const alphabetElements = alphabetToUse.map((letter, index) => {
const letterElement = (
<Text key={letter} userSelect='none' color={'$borderColor'} fontSize={17.5}>
{letter}
</Text>
)
return index === 0 ? (
<Text
key={letter}
color={'$borderColor'}
userSelect='none'
fontSize={17.5}
onLayout={handleLetterLayout}
>
{letterElement}
</Text>
) : (
letterElement
)
})
const alphabetElements = alphabetToUse.map((letter, index) => (
<Paragraph
flex={1}
key={letter}
userSelect='none'
color={'$borderColor'}
fontSize={'$6'}
fontWeight={'$6'}
textAlign='center'
>
{letter}
</Paragraph>
))
useEffect(() => {
triggerHaptic('impactLight')
if (overlayLetter !== '') {
triggerHaptic('impactLight')
}
}, [overlayLetter])
useEffect(() => {
if (alphabetSelectorRef.current) {
alphabetSelectorRef.current.measureInWindow((x, y, width, height) => {
alphabetSelectorTopY.current = y
alphabetSelectorHeight.current = height
letterHeight.current = height / alphabetToUse.length
})
}
}, [])
return (
<>
<View>
<GestureDetector gesture={gesture}>
<YStack
minWidth={'$2'}
maxWidth={'$3'}
justifyContent='flex-start'
alignItems='center'
alignContent='center'
paddingVertical={0}
paddingHorizontal={0}
onLayout={(event) => {
requestAnimationFrame(() => {
alphabetSelectorRef.current?.measureInWindow((x, y, width, height) => {
alphabetSelectorTopY.current = y
alphabetSelectorHeight.current = height
})
})
}}
ref={alphabetSelectorRef}
>
<YStack minWidth={'$2'} maxWidth={'$3'} flex={1} ref={alphabetSelectorRef}>
{alphabetElements}
</YStack>
</GestureDetector>
@@ -244,7 +227,7 @@ export default function AZScroller({
</RNText>
)}
</Animated.View>
</>
</View>
)
}
@@ -9,7 +9,6 @@ import { usePlayerQueueStore } from '../../../stores/player/queue'
import { usePlayerSettingsStore } from '../../../stores/settings/player'
import { useUsageSettingsStore } from '../../../stores/settings/usage'
import calculateTrackVolume from '../../../utils/audio/normalization'
import { TRACKPLAYER_LOOKAHEAD_COUNT } from '../../../configs/player.config'
import {
TrackPlayer,
DownloadManager,
@@ -87,15 +86,6 @@ export async function onChangeTrack(track: TrackItem, reason?: Reason) {
reportPlaybackStarted(track, 0)
// Proactively resolve URLs for upcoming tracks so the native player can buffer
// them for gapless playback before onTracksNeedUpdate fires.
TrackPlayer.getNextTracks(TRACKPLAYER_LOOKAHEAD_COUNT)
.then((upcomingTracks) => {
const unresolved = upcomingTracks.filter((t) => !t.url)
if (unresolved.length > 0) return updateTrackMediaInfo(unresolved)
})
.catch((err) => console.warn('Failed to preload lookahead URLs', err))
// Apply audio normalization if enabled in settings
const { enableAudioNormalization } = usePlayerSettingsStore.getState()
if (enableAudioNormalization) {