react-native-audio-browser 0.2.0-next.7 → 0.2.0-next.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +7 -1
- package/android/src/main/java/com/audiobrowser/AudioBrowser.kt +33 -8
- package/android/src/main/java/com/audiobrowser/ServiceBinding.kt +46 -0
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +1 -2
- package/android/src/main/java/com/audiobrowser/browser/BrowserUrlResolution.kt +1 -2
- package/android/src/main/java/com/audiobrowser/browser/SectionScope.kt +6 -7
- package/android/src/main/java/com/audiobrowser/player/NowPlayingUpdater.kt +0 -1
- package/android/src/main/java/com/audiobrowser/player/PlaybackStateStore.kt +2 -4
- package/android/src/main/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicy.kt +2 -1
- package/android/src/main/java/com/audiobrowser/util/ArtworkVariant.kt +7 -9
- package/android/src/main/java/com/audiobrowser/util/TrackFactory.kt +8 -7
- package/android/src/test/java/com/audiobrowser/ServiceBindingTest.kt +68 -0
- package/android/src/test/java/com/audiobrowser/TestFixtures.kt +0 -1
- package/android/src/test/java/com/audiobrowser/browser/JsonArtworkTest.kt +2 -1
- package/android/src/test/java/com/audiobrowser/browser/SectionScopeTest.kt +2 -4
- package/android/src/test/java/com/audiobrowser/player/PlaybackErrorClassifierTest.kt +3 -4
- package/android/src/test/java/com/audiobrowser/player/RetryLoadErrorHandlingPolicyTest.kt +3 -3
- package/ios/Browser/BrowserManager.swift +2 -2
- package/ios/Browser/SearchDrillIn.swift +1 -1
- package/ios/CarPlay/RNABMediaAddHandler.swift +6 -6
- package/ios/CarPlay/RNABMediaAffinityHandler.swift +2 -2
- package/ios/CarPlay/RNABMediaIntentHandler.swift +16 -16
- package/ios/HybridAudioBrowser.swift +86 -55
- package/ios/Model/RemoteCommand.swift +18 -0
- package/ios/Model/TrackPlayerError.swift +2 -2
- package/ios/Option/SessionCategories.swift +3 -2
- package/ios/Player/MediaIntentCriteria.swift +4 -4
- package/ios/Player/PlaybackErrorHandler.swift +2 -2
- package/ios/Player/RetryManager.swift +2 -1
- package/ios/RemoteCommand/RemoteCommandCallbacks.swift +47 -0
- package/ios/RemoteCommand/RemoteCommandController.swift +9 -6
- package/ios/Tests/LoadSeekCoordinatorTests.swift +3 -1
- package/ios/Tests/MediaIntentCriteriaTests.swift +2 -2
- package/ios/Tests/PlaybackCoordinatorTests.swift +1 -1
- package/ios/Tests/RemoteCommandControllerTests.swift +156 -0
- package/ios/Tests/RemoteCommandTests.swift +67 -0
- package/ios/Tests/SectionScopeTests.swift +2 -2
- package/ios/Tests/TabBarEntriesTests.swift +7 -7
- package/ios/TrackPlayer.swift +1 -1
- package/ios/TrackPlayerCallbacks.swift +5 -38
- package/lib/commonjs/AudioBrowser.js +0 -11
- package/lib/commonjs/AudioBrowser.js.map +1 -1
- package/lib/commonjs/features/carConnection.js +1 -1
- package/lib/commonjs/features/equalizer.js +1 -1
- package/lib/commonjs/features/errors.js +3 -3
- package/lib/commonjs/features/favorites.js +1 -1
- package/lib/commonjs/features/gate.js +1 -1
- package/lib/commonjs/features/metadata.js +3 -3
- package/lib/commonjs/features/network.js +1 -1
- package/lib/commonjs/features/nowPlaying.js +1 -1
- package/lib/commonjs/features/output.js +1 -1
- package/lib/commonjs/features/playback/playWhenReady.js +1 -1
- package/lib/commonjs/features/playback/playing.js +1 -1
- package/lib/commonjs/features/playback/progress.js +1 -1
- package/lib/commonjs/features/playback/state.js +1 -1
- package/lib/commonjs/features/playback/trackPlaybackTime.js +0 -6
- package/lib/commonjs/features/playback/trackPlaybackTime.js.map +1 -1
- package/lib/commonjs/features/playback/volume.js +1 -1
- package/lib/commonjs/features/player/options.js +3 -19
- package/lib/commonjs/features/player/options.js.map +1 -1
- package/lib/commonjs/features/player/setup.js +2 -2
- package/lib/commonjs/features/player/setup.js.map +1 -1
- package/lib/commonjs/features/player/validateOptions.js +24 -0
- package/lib/commonjs/features/player/validateOptions.js.map +1 -0
- package/lib/commonjs/features/queue/activeTrack.js +1 -1
- package/lib/commonjs/features/queue/queue.js +2 -2
- package/lib/commonjs/features/queue/repeatMode.js +1 -1
- package/lib/commonjs/features/queue/shuffle.js +1 -1
- package/lib/commonjs/features/remoteControls.js +13 -92
- package/lib/commonjs/features/remoteControls.js.map +1 -1
- package/lib/commonjs/features/sleepTimer.js +1 -1
- package/lib/commonjs/utils/LazyNativeEmitter.js +8 -5
- package/lib/commonjs/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/module/AudioBrowser.js +4 -1
- package/lib/module/AudioBrowser.js.map +1 -1
- package/lib/module/features/carConnection.js +1 -1
- package/lib/module/features/equalizer.js +1 -1
- package/lib/module/features/errors.js +3 -3
- package/lib/module/features/favorites.js +1 -1
- package/lib/module/features/gate.js +1 -1
- package/lib/module/features/metadata.js +3 -3
- package/lib/module/features/network.js +1 -1
- package/lib/module/features/nowPlaying.js +1 -1
- package/lib/module/features/output.js +1 -1
- package/lib/module/features/playback/playWhenReady.js +1 -1
- package/lib/module/features/playback/playing.js +1 -1
- package/lib/module/features/playback/progress.js +1 -1
- package/lib/module/features/playback/state.js +1 -1
- package/lib/module/features/playback/trackPlaybackTime.js +0 -5
- package/lib/module/features/playback/trackPlaybackTime.js.map +1 -1
- package/lib/module/features/playback/volume.js +1 -1
- package/lib/module/features/player/options.js +2 -17
- package/lib/module/features/player/options.js.map +1 -1
- package/lib/module/features/player/setup.js +1 -1
- package/lib/module/features/player/setup.js.map +1 -1
- package/lib/module/features/player/validateOptions.js +20 -0
- package/lib/module/features/player/validateOptions.js.map +1 -0
- package/lib/module/features/queue/activeTrack.js +1 -1
- package/lib/module/features/queue/queue.js +2 -2
- package/lib/module/features/queue/repeatMode.js +1 -1
- package/lib/module/features/queue/shuffle.js +1 -1
- package/lib/module/features/remoteControls.js +13 -92
- package/lib/module/features/remoteControls.js.map +1 -1
- package/lib/module/features/sleepTimer.js +1 -1
- package/lib/module/utils/LazyNativeEmitter.js +8 -5
- package/lib/module/utils/LazyNativeEmitter.js.map +1 -1
- package/lib/typescript/src/AudioBrowser.d.ts +0 -1
- package/lib/typescript/src/AudioBrowser.d.ts.map +1 -1
- package/lib/typescript/src/features/carConnection.d.ts +1 -1
- package/lib/typescript/src/features/equalizer.d.ts +1 -1
- package/lib/typescript/src/features/errors.d.ts +3 -3
- package/lib/typescript/src/features/favorites.d.ts +1 -1
- package/lib/typescript/src/features/gate.d.ts +3 -2
- package/lib/typescript/src/features/gate.d.ts.map +1 -1
- package/lib/typescript/src/features/metadata.d.ts +3 -3
- package/lib/typescript/src/features/network.d.ts +1 -1
- package/lib/typescript/src/features/nowPlaying.d.ts +1 -1
- package/lib/typescript/src/features/output.d.ts +1 -1
- package/lib/typescript/src/features/playback/playWhenReady.d.ts +1 -1
- package/lib/typescript/src/features/playback/playing.d.ts +1 -1
- package/lib/typescript/src/features/playback/progress.d.ts +1 -1
- package/lib/typescript/src/features/playback/state.d.ts +1 -1
- package/lib/typescript/src/features/playback/volume.d.ts +1 -1
- package/lib/typescript/src/features/player/options.d.ts +1 -1
- package/lib/typescript/src/features/player/options.d.ts.map +1 -1
- package/lib/typescript/src/features/player/validateOptions.d.ts +2 -0
- package/lib/typescript/src/features/player/validateOptions.d.ts.map +1 -0
- package/lib/typescript/src/features/queue/activeTrack.d.ts +1 -1
- package/lib/typescript/src/features/queue/queue.d.ts +2 -2
- package/lib/typescript/src/features/queue/repeatMode.d.ts +1 -1
- package/lib/typescript/src/features/queue/shuffle.d.ts +1 -1
- package/lib/typescript/src/features/remoteControls.d.ts +23 -22
- package/lib/typescript/src/features/remoteControls.d.ts.map +1 -1
- package/lib/typescript/src/features/sleepTimer.d.ts +1 -1
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts +8 -4
- package/lib/typescript/src/utils/LazyNativeEmitter.d.ts.map +1 -1
- package/package.json +3 -1
- package/src/AudioBrowser.ts +4 -1
- package/src/features/carConnection.ts +1 -1
- package/src/features/equalizer.ts +1 -1
- package/src/features/errors.ts +3 -3
- package/src/features/favorites.ts +1 -1
- package/src/features/gate.ts +1 -1
- package/src/features/metadata.ts +3 -3
- package/src/features/network.ts +1 -1
- package/src/features/nowPlaying.ts +1 -1
- package/src/features/output.ts +1 -1
- package/src/features/playback/playWhenReady.ts +1 -1
- package/src/features/playback/playing.ts +1 -1
- package/src/features/playback/progress.ts +1 -1
- package/src/features/playback/state.ts +1 -1
- package/src/features/playback/trackPlaybackTime.test.ts +20 -6
- package/src/features/playback/trackPlaybackTime.ts +0 -5
- package/src/features/playback/volume.ts +1 -1
- package/src/features/player/options.ts +2 -20
- package/src/features/player/setup.ts +1 -1
- package/src/features/player/validateOptions.ts +22 -0
- package/src/features/queue/activeTrack.ts +1 -1
- package/src/features/queue/queue.ts +2 -2
- package/src/features/queue/repeatMode.ts +1 -1
- package/src/features/queue/shuffle.ts +1 -1
- package/src/features/remoteControls.ts +13 -92
- package/src/features/sleepTimer.ts +1 -1
- package/src/public-surface.test.ts +123 -0
- package/src/utils/LazyNativeEmitter.ts +9 -6
|
@@ -19,7 +19,7 @@ export declare function setPlayWhenReady(playWhenReady: boolean): void;
|
|
|
19
19
|
/**
|
|
20
20
|
* Subscribes to play when ready changes.
|
|
21
21
|
* @param callback - Called when playWhenReady changes
|
|
22
|
-
* @returns
|
|
22
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
23
23
|
*/
|
|
24
24
|
export declare const onPlayWhenReadyChanged: NativeUpdatedValue<PlaybackPlayWhenReadyChangedEvent>;
|
|
25
25
|
/**
|
|
@@ -10,7 +10,7 @@ export declare function getPlayingState(): PlayingState;
|
|
|
10
10
|
/**
|
|
11
11
|
* Subscribes to playing state changes.
|
|
12
12
|
* @param callback - Called when playing or buffering state changes
|
|
13
|
-
* @returns
|
|
13
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
14
14
|
*/
|
|
15
15
|
export declare const onPlayingState: NativeUpdatedValue<PlayingState>;
|
|
16
16
|
/**
|
|
@@ -29,7 +29,7 @@ export declare function getProgress(): Progress;
|
|
|
29
29
|
/**
|
|
30
30
|
* Subscribes to playback progress updates.
|
|
31
31
|
* @param callback - Called periodically with playback progress updates
|
|
32
|
-
* @returns
|
|
32
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
33
33
|
*/
|
|
34
34
|
export declare const onProgressUpdated: NativeUpdatedValue<PlaybackProgressUpdatedEvent>;
|
|
35
35
|
/**
|
|
@@ -32,7 +32,7 @@ export declare function getPlayback(): Playback;
|
|
|
32
32
|
/**
|
|
33
33
|
* Subscribes to playback state changes.
|
|
34
34
|
* @param callback - Called when the playback state changes
|
|
35
|
-
* @returns
|
|
35
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
36
36
|
*/
|
|
37
37
|
export declare const onPlaybackChanged: NativeUpdatedValue<Playback>;
|
|
38
38
|
/**
|
|
@@ -21,7 +21,7 @@ export declare function setSystemVolume(level: number): void;
|
|
|
21
21
|
/**
|
|
22
22
|
* Subscribes to system volume changes.
|
|
23
23
|
* @param callback - Called when the system volume changes
|
|
24
|
-
* @returns
|
|
24
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
25
25
|
*/
|
|
26
26
|
export declare const onSystemVolumeChanged: NativeUpdatedValue<number>;
|
|
27
27
|
/**
|
|
@@ -451,7 +451,7 @@ export declare function getOptions(): Options;
|
|
|
451
451
|
/**
|
|
452
452
|
* Subscribes to player options changes.
|
|
453
453
|
* @param callback - Called when the player options change
|
|
454
|
-
* @returns
|
|
454
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
455
455
|
*/
|
|
456
456
|
export declare const onOptionsChanged: NativeUpdatedValue<Options>;
|
|
457
457
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateOptions.d.ts","sourceRoot":"","sources":["../../../../../src/features/player/validateOptions.ts"],"names":[],"mappings":""}
|
|
@@ -27,7 +27,7 @@ export declare function getActiveTrackIndex(): number | undefined;
|
|
|
27
27
|
/**
|
|
28
28
|
* Subscribes to active track change events.
|
|
29
29
|
* @param callback - Called when the active track changes
|
|
30
|
-
* @returns
|
|
30
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
31
31
|
*/
|
|
32
32
|
export declare const onActiveTrackChanged: NativeUpdatedValue<PlaybackActiveTrackChangedEvent>;
|
|
33
33
|
/**
|
|
@@ -100,14 +100,14 @@ export declare function getQueue(): Track[];
|
|
|
100
100
|
/**
|
|
101
101
|
* Subscribes to playback queue ended events.
|
|
102
102
|
* @param callback - Called when playback has paused due to reaching the end of the queue
|
|
103
|
-
* @returns
|
|
103
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
104
104
|
*/
|
|
105
105
|
export declare const onQueueEnded: NativeUpdatedValue<PlaybackQueueEndedEvent>;
|
|
106
106
|
/**
|
|
107
107
|
* Subscribes to queue change events.
|
|
108
108
|
* Called when tracks are added, removed, reordered, or when track metadata changes.
|
|
109
109
|
* @param callback - Called with the updated queue
|
|
110
|
-
* @returns
|
|
110
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
111
111
|
*/
|
|
112
112
|
export declare const onQueueChanged: NativeUpdatedValue<Track[]>;
|
|
113
113
|
/**
|
|
@@ -23,7 +23,7 @@ export interface RepeatModeChangedEvent {
|
|
|
23
23
|
/**
|
|
24
24
|
* Subscribes to repeat mode changes.
|
|
25
25
|
* @param callback - Called when repeat mode changes
|
|
26
|
-
* @returns
|
|
26
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
27
27
|
*/
|
|
28
28
|
export declare const onRepeatModeChanged: NativeUpdatedValue<RepeatModeChangedEvent>;
|
|
29
29
|
/**
|
|
@@ -16,7 +16,7 @@ export declare function toggleShuffle(): void;
|
|
|
16
16
|
/**
|
|
17
17
|
* Subscribes to shuffle mode changes.
|
|
18
18
|
* @param callback - Called when shuffle mode changes
|
|
19
|
-
* @returns
|
|
19
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
20
20
|
*/
|
|
21
21
|
export declare const onShuffleChanged: NativeUpdatedValue<boolean>;
|
|
22
22
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LazyNativeEmitter } from '../utils/LazyNativeEmitter';
|
|
1
2
|
/**
|
|
2
3
|
* Remote jump backward event.
|
|
3
4
|
*/
|
|
@@ -85,67 +86,67 @@ export declare function handleRemoteJumpBackward(callback: ((event: RemoteJumpBa
|
|
|
85
86
|
/**
|
|
86
87
|
* Subscribes to remote jump backward events.
|
|
87
88
|
* @param callback - Called when the user presses the jump backward button
|
|
88
|
-
* @returns
|
|
89
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
89
90
|
*/
|
|
90
|
-
export declare const onRemoteJumpBackward:
|
|
91
|
+
export declare const onRemoteJumpBackward: LazyNativeEmitter<RemoteJumpBackwardEvent>;
|
|
91
92
|
/**
|
|
92
93
|
* Subscribes to remote jump forward events.
|
|
93
94
|
* @param callback - Called when the user presses the jump forward button
|
|
94
|
-
* @returns
|
|
95
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
95
96
|
*/
|
|
96
|
-
export declare const onRemoteJumpForward:
|
|
97
|
+
export declare const onRemoteJumpForward: LazyNativeEmitter<RemoteJumpForwardEvent>;
|
|
97
98
|
/**
|
|
98
99
|
* Subscribes to remote next events.
|
|
99
100
|
* @param callback - Called when the user presses the next track button
|
|
100
|
-
* @returns
|
|
101
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
101
102
|
*/
|
|
102
|
-
export declare const onRemoteNext:
|
|
103
|
+
export declare const onRemoteNext: LazyNativeEmitter<void>;
|
|
103
104
|
/**
|
|
104
105
|
* Subscribes to remote pause events.
|
|
105
106
|
* @param callback - Called when the user presses the pause button
|
|
106
|
-
* @returns
|
|
107
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
107
108
|
*/
|
|
108
|
-
export declare const onRemotePause:
|
|
109
|
+
export declare const onRemotePause: LazyNativeEmitter<void>;
|
|
109
110
|
/**
|
|
110
111
|
* Subscribes to remote play events.
|
|
111
112
|
* @param callback - Called when the user presses the play button
|
|
112
|
-
* @returns
|
|
113
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
113
114
|
*/
|
|
114
|
-
export declare const onRemotePlay:
|
|
115
|
+
export declare const onRemotePlay: LazyNativeEmitter<void>;
|
|
115
116
|
/**
|
|
116
117
|
* Subscribes to remote play ID events (Android only).
|
|
117
118
|
* @param callback - Called when the user selects a track from an external device
|
|
118
|
-
* @returns
|
|
119
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
119
120
|
*/
|
|
120
|
-
export declare const onRemotePlayId:
|
|
121
|
+
export declare const onRemotePlayId: LazyNativeEmitter<RemotePlayIdEvent>;
|
|
121
122
|
/**
|
|
122
123
|
* Subscribes to remote play search events (Android only).
|
|
123
124
|
* @param callback - Called when the user searches for a track (usually voice search)
|
|
124
|
-
* @returns
|
|
125
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
125
126
|
*/
|
|
126
|
-
export declare const onRemotePlaySearch:
|
|
127
|
+
export declare const onRemotePlaySearch: LazyNativeEmitter<RemotePlaySearchEvent>;
|
|
127
128
|
/**
|
|
128
129
|
* Subscribes to remote previous events.
|
|
129
130
|
* @param callback - Called when the user presses the previous track button
|
|
130
|
-
* @returns
|
|
131
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
131
132
|
*/
|
|
132
|
-
export declare const onRemotePrevious:
|
|
133
|
+
export declare const onRemotePrevious: LazyNativeEmitter<void>;
|
|
133
134
|
/**
|
|
134
135
|
* Subscribes to remote seek events.
|
|
135
136
|
* @param callback - Called when the user changes the position of the timeline
|
|
136
|
-
* @returns
|
|
137
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
137
138
|
*/
|
|
138
|
-
export declare const onRemoteSeek:
|
|
139
|
+
export declare const onRemoteSeek: LazyNativeEmitter<RemoteSeekEvent>;
|
|
139
140
|
/**
|
|
140
141
|
* Subscribes to remote skip events (Android only).
|
|
141
142
|
* @param callback - Called when the user presses the skip button
|
|
142
|
-
* @returns
|
|
143
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
143
144
|
*/
|
|
144
|
-
export declare const onRemoteSkip:
|
|
145
|
+
export declare const onRemoteSkip: LazyNativeEmitter<RemoteSkipEvent>;
|
|
145
146
|
/**
|
|
146
147
|
* Subscribes to remote stop events.
|
|
147
148
|
* @param callback - Called when the user presses the stop button
|
|
148
|
-
* @returns
|
|
149
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
149
150
|
*/
|
|
150
|
-
export declare const onRemoteStop:
|
|
151
|
+
export declare const onRemoteStop: LazyNativeEmitter<void>;
|
|
151
152
|
//# sourceMappingURL=remoteControls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteControls.d.ts","sourceRoot":"","sources":["../../../../src/features/remoteControls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remoteControls.d.ts","sourceRoot":"","sources":["../../../../src/features/remoteControls.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAI9D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAQD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QAElE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QAEnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QAElE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QAEtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QAElE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,QAGzD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAAG,SAAS,QAGhE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC,GAAG,SAAS,QAGjE;AASD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,4CAG9B,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,2CAG7B,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,yBAExB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,yBAEzB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,yBAExB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,sCAE1B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,0CAG5B,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,yBAE5B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,oCAExB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,oCAExB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,yBAExB,CAAA"}
|
|
@@ -57,7 +57,7 @@ export declare function clearSleepTimer(): boolean;
|
|
|
57
57
|
/**
|
|
58
58
|
* Subscribes to sleep timer changes.
|
|
59
59
|
* @param callback - Called when the sleep timer state changes
|
|
60
|
-
* @returns
|
|
60
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
61
61
|
*/
|
|
62
62
|
export declare const onSleepTimerChanged: NativeUpdatedValue<SleepTimer>;
|
|
63
63
|
/**
|
|
@@ -11,9 +11,11 @@ type Callback<T> = (arg: T) => void;
|
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```typescript
|
|
14
|
-
* export const onRemotePlay =
|
|
14
|
+
* export const onRemotePlay = LazyNativeEmitter.emitterize<void>(
|
|
15
15
|
* (cb) => (nativeBrowser.onRemotePlay = cb)
|
|
16
16
|
* )
|
|
17
|
+
*
|
|
18
|
+
* const unsubscribe = onRemotePlay.addListener(() => console.log('play'))
|
|
17
19
|
* ```
|
|
18
20
|
*/
|
|
19
21
|
export declare class LazyNativeEmitter<T> {
|
|
@@ -23,11 +25,13 @@ export declare class LazyNativeEmitter<T> {
|
|
|
23
25
|
private getListeners;
|
|
24
26
|
addListener(callback: Callback<T>): () => void;
|
|
25
27
|
/**
|
|
26
|
-
* Creates a lazy emitter
|
|
28
|
+
* Creates a lazy emitter for a native callback.
|
|
29
|
+
*
|
|
27
30
|
* @param setter - Function that sets the native callback property
|
|
28
|
-
* @returns
|
|
31
|
+
* @returns The emitter instance — subscribe with `addListener`, which returns
|
|
32
|
+
* an unsubscribe function
|
|
29
33
|
*/
|
|
30
|
-
static emitterize<T>(setter: (callback: (data: T) => void) => void):
|
|
34
|
+
static emitterize<T>(setter: (callback: (data: T) => void) => void): LazyNativeEmitter<T>;
|
|
31
35
|
}
|
|
32
36
|
export {};
|
|
33
37
|
//# sourceMappingURL=LazyNativeEmitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyNativeEmitter.d.ts","sourceRoot":"","sources":["../../../../src/utils/LazyNativeEmitter.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC
|
|
1
|
+
{"version":3,"file":"LazyNativeEmitter.d.ts","sourceRoot":"","sources":["../../../../src/utils/LazyNativeEmitter.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;AAEnC;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,iBAAiB,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAAmC;IAEpD,YAAY,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,EAExD;IAED,OAAO,CAAC,YAAY;IAWpB,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAI7C;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EACjB,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,KAAK,IAAI,GAC5C,iBAAiB,CAAC,CAAC,CAAC,CAEtB;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-browser",
|
|
3
|
-
"version": "0.2.0-next.
|
|
3
|
+
"version": "0.2.0-next.9",
|
|
4
4
|
"description": "react-native-audio-browser is a react native package built with Nitro",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"android:format": "yarn workspace example-native android:format",
|
|
48
|
+
"android:format:check": "yarn workspace example-native android:format:check",
|
|
48
49
|
"android:ide": "yarn workspace example-native android:ide",
|
|
49
50
|
"android:logs": "react-native log-android",
|
|
50
51
|
"android:test": "yarn workspace example-native android:test",
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
"prepare": "bob build",
|
|
55
56
|
"example": "yarn workspace example-native",
|
|
56
57
|
"ci:format": "oxfmt --check src",
|
|
58
|
+
"ci:format:ios": "swiftformat --lint ios",
|
|
57
59
|
"ci:lint": "oxlint --type-aware src",
|
|
58
60
|
"format": "oxfmt --write",
|
|
59
61
|
"ios:format": "swiftformat ios",
|
package/src/AudioBrowser.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
// `./native` is deliberately NOT re-exported. It holds the raw Nitro hybrid
|
|
2
|
+
// object, whose `on*` properties are single callback slots that the emitters in
|
|
3
|
+
// `./features` own — a consumer assigning one silently unsubscribes every hook
|
|
4
|
+
// in the library. Feature modules import it directly; nothing else should.
|
|
1
5
|
export * from './features'
|
|
2
|
-
export * from './native'
|
|
3
6
|
export * from './types'
|
|
4
7
|
export * from './utils/useDebug'
|
|
@@ -19,7 +19,7 @@ export function isCarConnected(): boolean {
|
|
|
19
19
|
* Subscribes to car connection changes (CarPlay on iOS, Android Auto /
|
|
20
20
|
* Android Automotive on Android). Never fires on web.
|
|
21
21
|
* @param callback - Called with the new connection state
|
|
22
|
-
* @returns
|
|
22
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
23
23
|
*/
|
|
24
24
|
export const onCarConnectedChanged = NativeUpdatedValue.emitterize<boolean>(
|
|
25
25
|
(cb) => (nativeBrowser.onCarConnectedChanged = cb)
|
|
@@ -46,7 +46,7 @@ export function setEqualizerLevels(levels: number[]): void {
|
|
|
46
46
|
/**
|
|
47
47
|
* Subscribes to equalizer settings changes (Android only).
|
|
48
48
|
* @param callback - Called when equalizer settings change
|
|
49
|
-
* @returns
|
|
49
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
50
50
|
*/
|
|
51
51
|
export const onEqualizerChanged =
|
|
52
52
|
NativeUpdatedValue.emitterize<EqualizerSettings>(
|
package/src/features/errors.ts
CHANGED
|
@@ -134,7 +134,7 @@ export function getPlaybackError(): PlaybackError | undefined {
|
|
|
134
134
|
/**
|
|
135
135
|
* Subscribes to playback error events.
|
|
136
136
|
* @param callback - Called when a playback error occurs
|
|
137
|
-
* @returns
|
|
137
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
138
138
|
*/
|
|
139
139
|
export const onPlaybackError =
|
|
140
140
|
NativeUpdatedValue.emitterize<PlaybackErrorEvent>(
|
|
@@ -165,7 +165,7 @@ export function getNavigationError(): NavigationError | undefined {
|
|
|
165
165
|
/**
|
|
166
166
|
* Subscribes to navigation error events.
|
|
167
167
|
* @param callback - Called when a navigation error occurs
|
|
168
|
-
* @returns
|
|
168
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
169
169
|
*/
|
|
170
170
|
export const onNavigationError =
|
|
171
171
|
NativeUpdatedValue.emitterize<NavigationErrorEvent>(
|
|
@@ -198,7 +198,7 @@ export function getFormattedNavigationError():
|
|
|
198
198
|
/**
|
|
199
199
|
* Subscribes to formatted navigation error changes.
|
|
200
200
|
* @param callback - Called when the formatted navigation error changes
|
|
201
|
-
* @returns
|
|
201
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
202
202
|
*/
|
|
203
203
|
export const onFormattedNavigationError = NativeUpdatedValue.emitterize<
|
|
204
204
|
FormattedNavigationError | undefined
|
|
@@ -82,7 +82,7 @@ export interface FavoriteChangedEvent {
|
|
|
82
82
|
* The native side has already updated the track's favorite state and UI.
|
|
83
83
|
*
|
|
84
84
|
* @param callback - Called with the track and its new favorite state
|
|
85
|
-
* @returns
|
|
85
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
86
86
|
*
|
|
87
87
|
* @example
|
|
88
88
|
* ```ts
|
package/src/features/gate.ts
CHANGED
|
@@ -148,7 +148,7 @@ export function clearGate(): void {
|
|
|
148
148
|
|
|
149
149
|
/**
|
|
150
150
|
* Subscribes to gate events (fired when a request is gated).
|
|
151
|
-
* @returns
|
|
151
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
152
152
|
*/
|
|
153
153
|
export const onGate = LazyNativeEmitter.emitterize<GateEvent>(
|
|
154
154
|
(cb) => (nativeBrowser.onGate = cb)
|
package/src/features/metadata.ts
CHANGED
|
@@ -99,7 +99,7 @@ export interface ChapterMetadata {
|
|
|
99
99
|
/**
|
|
100
100
|
* Subscribes to chapter metadata events.
|
|
101
101
|
* @param callback - Called when chapter metadata is received
|
|
102
|
-
* @returns
|
|
102
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
103
103
|
*/
|
|
104
104
|
export const onChapterMetadata = NativeUpdatedValue.emitterize<
|
|
105
105
|
ChapterMetadata[]
|
|
@@ -108,7 +108,7 @@ export const onChapterMetadata = NativeUpdatedValue.emitterize<
|
|
|
108
108
|
/**
|
|
109
109
|
* Subscribes to track metadata events.
|
|
110
110
|
* @param callback - Called when static track metadata is received
|
|
111
|
-
* @returns
|
|
111
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
112
112
|
*/
|
|
113
113
|
export const onTrackMetadata = NativeUpdatedValue.emitterize<TrackMetadata>(
|
|
114
114
|
(cb) => (nativeBrowser.onTrackMetadata = cb)
|
|
@@ -117,7 +117,7 @@ export const onTrackMetadata = NativeUpdatedValue.emitterize<TrackMetadata>(
|
|
|
117
117
|
/**
|
|
118
118
|
* Subscribes to timed metadata events (ICY/ID3 from live streams).
|
|
119
119
|
* @param callback - Called when stream metadata is received (title, artist from ICY/ID3 tags)
|
|
120
|
-
* @returns
|
|
120
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
121
121
|
*/
|
|
122
122
|
export const onTimedMetadata = NativeUpdatedValue.emitterize<TimedMetadata>(
|
|
123
123
|
(cb) => (nativeBrowser.onTimedMetadata = cb)
|
package/src/features/network.ts
CHANGED
|
@@ -17,7 +17,7 @@ export function getOnline(): boolean {
|
|
|
17
17
|
/**
|
|
18
18
|
* Subscribes to network connectivity changes.
|
|
19
19
|
* @param callback - Called when network state changes
|
|
20
|
-
* @returns
|
|
20
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
21
21
|
*/
|
|
22
22
|
export const onOnlineChanged = NativeUpdatedValue.emitterize<boolean>(
|
|
23
23
|
(cb) => (nativeBrowser.onOnlineChanged = cb)
|
|
@@ -74,7 +74,7 @@ export function clearNowPlayingFlash(): void {
|
|
|
74
74
|
* Subscribes to now playing metadata change events.
|
|
75
75
|
* Fires when updateNowPlaying is called or when the track changes.
|
|
76
76
|
* @param callback - Called when now playing metadata changes
|
|
77
|
-
* @returns
|
|
77
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
78
78
|
*/
|
|
79
79
|
export const onNowPlayingChanged =
|
|
80
80
|
NativeUpdatedValue.emitterize<NowPlayingMetadata>(
|
package/src/features/output.ts
CHANGED
|
@@ -46,7 +46,7 @@ export function getOutput(): Output | undefined {
|
|
|
46
46
|
/**
|
|
47
47
|
* Subscribes to current-output changes (headphones unplugged, Bluetooth speaker
|
|
48
48
|
* connected, AirPlay/route selected). Fires on iOS and Android 11+; never below.
|
|
49
|
-
* @returns
|
|
49
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
50
50
|
*/
|
|
51
51
|
export const onOutputChanged = NativeUpdatedValue.emitterize<Output>(
|
|
52
52
|
(cb) => (nativeBrowser.onOutputChanged = cb)
|
|
@@ -35,7 +35,7 @@ export function setPlayWhenReady(playWhenReady: boolean): void {
|
|
|
35
35
|
/**
|
|
36
36
|
* Subscribes to play when ready changes.
|
|
37
37
|
* @param callback - Called when playWhenReady changes
|
|
38
|
-
* @returns
|
|
38
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
39
39
|
*/
|
|
40
40
|
export const onPlayWhenReadyChanged =
|
|
41
41
|
NativeUpdatedValue.emitterize<PlaybackPlayWhenReadyChangedEvent>(
|
|
@@ -23,7 +23,7 @@ export function getPlayingState(): PlayingState {
|
|
|
23
23
|
/**
|
|
24
24
|
* Subscribes to playing state changes.
|
|
25
25
|
* @param callback - Called when playing or buffering state changes
|
|
26
|
-
* @returns
|
|
26
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
27
27
|
*/
|
|
28
28
|
export const onPlayingState = NativeUpdatedValue.emitterize<PlayingState>(
|
|
29
29
|
(cb) => (nativeBrowser.onPlaybackPlayingState = cb)
|
|
@@ -46,7 +46,7 @@ export function getProgress(): Progress {
|
|
|
46
46
|
/**
|
|
47
47
|
* Subscribes to playback progress updates.
|
|
48
48
|
* @param callback - Called periodically with playback progress updates
|
|
49
|
-
* @returns
|
|
49
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
50
50
|
*/
|
|
51
51
|
export const onProgressUpdated =
|
|
52
52
|
NativeUpdatedValue.emitterize<PlaybackProgressUpdatedEvent>(
|
|
@@ -55,7 +55,7 @@ export function getPlayback(): Playback {
|
|
|
55
55
|
/**
|
|
56
56
|
* Subscribes to playback state changes.
|
|
57
57
|
* @param callback - Called when the playback state changes
|
|
58
|
-
* @returns
|
|
58
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
59
59
|
*/
|
|
60
60
|
export const onPlaybackChanged = NativeUpdatedValue.emitterize<Playback>(
|
|
61
61
|
(cb) => (nativeBrowser.onPlaybackChanged = cb)
|
|
@@ -13,12 +13,26 @@ vi.mock('../queue/activeTrack', () => ({
|
|
|
13
13
|
onActiveTrackChanged: { addListener: vi.fn(() => () => {}) }
|
|
14
14
|
}))
|
|
15
15
|
|
|
16
|
-
import { trackPlaybackTime
|
|
16
|
+
import { trackPlaybackTime } from './trackPlaybackTime'
|
|
17
17
|
|
|
18
18
|
beforeEach(() => {
|
|
19
19
|
nativeMock.setPlaybackIntervalEnabled.mockClear()
|
|
20
20
|
})
|
|
21
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Drives the fan-out through the same slot the native side does: `install()`
|
|
24
|
+
* assigns `onPlaybackInterval`, so calling it here also asserts that wiring
|
|
25
|
+
* exists — a dedicated test-only export would skip it.
|
|
26
|
+
*/
|
|
27
|
+
function tick(times = 1) {
|
|
28
|
+
for (let i = 0; i < times; i++) {
|
|
29
|
+
if (!nativeMock.onPlaybackInterval) {
|
|
30
|
+
throw new Error('trackPlaybackTime never installed onPlaybackInterval')
|
|
31
|
+
}
|
|
32
|
+
nativeMock.onPlaybackInterval()
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
22
36
|
describe('trackPlaybackTime', () => {
|
|
23
37
|
it('enables native tick on first subscriber, disables on last', () => {
|
|
24
38
|
const a = trackPlaybackTime(() => {}, 5)
|
|
@@ -38,17 +52,17 @@ describe('trackPlaybackTime', () => {
|
|
|
38
52
|
(e) => calls.push({ total: e.total, sinceLast: e.sinceLast }),
|
|
39
53
|
3
|
|
40
54
|
)
|
|
41
|
-
|
|
55
|
+
tick(2)
|
|
42
56
|
expect(calls).toEqual([])
|
|
43
|
-
|
|
57
|
+
tick(1) // total now 3 → fires
|
|
44
58
|
expect(calls).toEqual([{ total: 3, sinceLast: 3 }])
|
|
45
|
-
|
|
59
|
+
tick(3) // total now 6 → fires again
|
|
46
60
|
expect(calls).toEqual([
|
|
47
61
|
{ total: 3, sinceLast: 3 },
|
|
48
62
|
{ total: 6, sinceLast: 3 }
|
|
49
63
|
])
|
|
50
64
|
cancel()
|
|
51
|
-
|
|
65
|
+
tick(3)
|
|
52
66
|
expect(calls).toHaveLength(2) // cancelled
|
|
53
67
|
})
|
|
54
68
|
|
|
@@ -57,7 +71,7 @@ describe('trackPlaybackTime', () => {
|
|
|
57
71
|
const slow: number[] = []
|
|
58
72
|
const cancelFast = trackPlaybackTime((e) => fast.push(e.total), 1)
|
|
59
73
|
const cancelSlow = trackPlaybackTime((e) => slow.push(e.total), 2)
|
|
60
|
-
|
|
74
|
+
tick(2)
|
|
61
75
|
expect(fast).toEqual([1, 2])
|
|
62
76
|
expect(slow).toEqual([2])
|
|
63
77
|
cancelFast()
|
|
@@ -99,8 +99,3 @@ export function trackPlaybackTime(
|
|
|
99
99
|
if (handles.size === 0) nativeBrowser.setPlaybackIntervalEnabled(false)
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
|
|
103
|
-
/** @internal test hook — drives the fan-out without a native tick. */
|
|
104
|
-
export function __emitTickForTests(ticks = 1) {
|
|
105
|
-
for (let i = 0; i < ticks; i++) onTick()
|
|
106
|
-
}
|
|
@@ -42,7 +42,7 @@ export function setSystemVolume(level: number): void {
|
|
|
42
42
|
/**
|
|
43
43
|
* Subscribes to system volume changes.
|
|
44
44
|
* @param callback - Called when the system volume changes
|
|
45
|
-
* @returns
|
|
45
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
46
46
|
*/
|
|
47
47
|
export const onSystemVolumeChanged = NativeUpdatedValue.emitterize<number>(
|
|
48
48
|
(cb) => (nativeBrowser.onSystemVolumeChanged = cb)
|
|
@@ -3,6 +3,7 @@ import type { CarPlayNowPlayingButton } from '../../types/browser'
|
|
|
3
3
|
import { nativeBrowser } from '../../native'
|
|
4
4
|
import { NativeUpdatedValue } from '../../utils/NativeUpdatedValue'
|
|
5
5
|
import { useNativeUpdatedValue } from '../../utils/useNativeUpdatedValue'
|
|
6
|
+
import { validateIOSUpdateOptions } from './validateOptions'
|
|
6
7
|
|
|
7
8
|
// MARK: - Types
|
|
8
9
|
|
|
@@ -524,25 +525,6 @@ export interface NativeUpdateOptions {
|
|
|
524
525
|
|
|
525
526
|
// MARK: - Functions
|
|
526
527
|
|
|
527
|
-
const MAX_CARPLAY_NOW_PLAYING_BUTTONS = 5
|
|
528
|
-
|
|
529
|
-
/**
|
|
530
|
-
* Warns when more CarPlay now-playing buttons are configured than CarPlay renders.
|
|
531
|
-
* Shared by {@link updateOptions} and `setupPlayer` (both can carry `ios` options).
|
|
532
|
-
*
|
|
533
|
-
* @internal Validation helper, not public API — `stripInternal` removes it from
|
|
534
|
-
* the published types and typedoc hides it from the docs.
|
|
535
|
-
*/
|
|
536
|
-
export function validateIOSUpdateOptions(ios?: IOSUpdateOptions): void {
|
|
537
|
-
const buttons = ios?.carPlayNowPlayingButtons
|
|
538
|
-
if (buttons && buttons.length > MAX_CARPLAY_NOW_PLAYING_BUTTONS) {
|
|
539
|
-
console.warn(
|
|
540
|
-
`[react-native-audio-browser] ${buttons.length} CarPlay now-playing ` +
|
|
541
|
-
`buttons configured; CarPlay shows at most ${MAX_CARPLAY_NOW_PLAYING_BUTTONS}.`
|
|
542
|
-
)
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
528
|
/**
|
|
547
529
|
* Updates the configuration for the components.
|
|
548
530
|
* Pass only the properties you want to change - all properties are optional.
|
|
@@ -587,7 +569,7 @@ export function getOptions(): Options {
|
|
|
587
569
|
/**
|
|
588
570
|
* Subscribes to player options changes.
|
|
589
571
|
* @param callback - Called when the player options change
|
|
590
|
-
* @returns
|
|
572
|
+
* @returns An emitter — subscribe with `addListener(callback)`, which returns a cleanup function
|
|
591
573
|
*/
|
|
592
574
|
export const onOptionsChanged = NativeUpdatedValue.emitterize<Options>(
|
|
593
575
|
(cb) => (nativeBrowser.onOptionsChanged = cb)
|