react-native-audio-browser 0.2.0-next.16 → 0.2.0-next.18
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/src/main/java/com/audiobrowser/AudioBrowser.kt +165 -107
- package/android/src/main/java/com/audiobrowser/browser/BrowserManager.kt +11 -29
- package/android/src/main/java/com/audiobrowser/player/MediaSessionCallback.kt +409 -186
- package/android/src/main/java/com/audiobrowser/util/BrowserPathHelper.kt +13 -1
- package/android/src/main/res/values/strings.xml +6 -21
- package/android/src/test/java/com/audiobrowser/player/BrowseTilesTest.kt +385 -0
- package/lib/commonjs/features/browser.js +8 -0
- package/lib/commonjs/features/browser.js.map +1 -1
- package/lib/commonjs/web/browser/BrowserManager.js +6 -8
- package/lib/commonjs/web/browser/BrowserManager.js.map +1 -1
- package/lib/commonjs/web/browser/SearchManager.js +4 -7
- package/lib/commonjs/web/browser/SearchManager.js.map +1 -1
- package/lib/module/features/browser.js +8 -0
- package/lib/module/features/browser.js.map +1 -1
- package/lib/module/web/browser/BrowserManager.js +6 -8
- package/lib/module/web/browser/BrowserManager.js.map +1 -1
- package/lib/module/web/browser/SearchManager.js +4 -7
- package/lib/module/web/browser/SearchManager.js.map +1 -1
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/features/browser.d.ts +8 -0
- package/lib/typescript/src/features/browser.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/features/browser.ts +8 -0
- package/src/web/browser/BrowserManager.ts +6 -11
- package/src/web/browser/SearchManager.test.ts +75 -0
- package/src/web/browser/SearchManager.ts +7 -10
- package/src/web/browser/__tests__/search-navigation.test.ts +76 -0
|
@@ -8,7 +8,7 @@ import java.net.URLEncoder
|
|
|
8
8
|
* Utility for handling browser paths and contextual URLs in the media browser system.
|
|
9
9
|
*
|
|
10
10
|
* Handles two types of special paths:
|
|
11
|
-
* 1. System paths (prefixed with `/__`): root, search, offline, error, and
|
|
11
|
+
* 1. System paths (prefixed with `/__`): root, search, offline, error, gate, and empty paths
|
|
12
12
|
* 2. Contextual URLs: Embed parent context in track identifiers for Media3 integration
|
|
13
13
|
*
|
|
14
14
|
* Contextual URL format: `{parentPath}?__trackId={trackIdentity}&__index={childIndex}` (the
|
|
@@ -40,6 +40,9 @@ object BrowserPathHelper {
|
|
|
40
40
|
/** Browse Gate placeholder media ID (subscription/login/region block) */
|
|
41
41
|
const val GATE_PATH = "/__gate"
|
|
42
42
|
|
|
43
|
+
/** Empty-page placeholder media ID — a level that resolved with zero children (ADR 0001) */
|
|
44
|
+
const val EMPTY_PATH = "/__empty"
|
|
45
|
+
|
|
43
46
|
// Query parameter name for contextual track identifiers
|
|
44
47
|
private const val CONTEXTUAL_TRACK_PARAM = "__trackId"
|
|
45
48
|
|
|
@@ -51,6 +54,15 @@ object BrowserPathHelper {
|
|
|
51
54
|
return path == ROOT_PATH || path.startsWith("$SEARCH_PATH_PREFIX?")
|
|
52
55
|
}
|
|
53
56
|
|
|
57
|
+
/**
|
|
58
|
+
* The tile sentinels a drill-in dead-ends on: Android Auto ignores the tiles' non-browsable flag
|
|
59
|
+
* and subscribes anyway, so these serve no children rather than stacking another page.
|
|
60
|
+
* [GATE_PATH] is not one of them — it re-serves the gate tile so the message stays readable.
|
|
61
|
+
*/
|
|
62
|
+
fun isDeadEndPath(path: String): Boolean {
|
|
63
|
+
return path == OFFLINE_PATH || path == ERROR_PATH || path == EMPTY_PATH
|
|
64
|
+
}
|
|
65
|
+
|
|
54
66
|
/** Create a search path for a given query */
|
|
55
67
|
fun createSearchPath(query: String): String {
|
|
56
68
|
val encodedQuery = URLEncoder.encode(query, "UTF-8")
|
|
@@ -18,28 +18,13 @@
|
|
|
18
18
|
-->
|
|
19
19
|
<resources>
|
|
20
20
|
<!--
|
|
21
|
-
The
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
The SessionError message a browse or search failure sends alongside its
|
|
22
|
+
tile. The tiles themselves are worded by the app's `formatNavigationError`
|
|
23
|
+
(ADR 0001), so these two are the library's only device-locale browse copy —
|
|
24
|
+
kept because a SessionError carries a string, not a navigation error.
|
|
25
|
+
Offline is distinct from the browse error: it is sent only when the network
|
|
26
|
+
monitor says we are actually offline, so it may name the cause.
|
|
26
27
|
-->
|
|
27
28
|
<string name="audio_browser_offline_error">No internet connection</string>
|
|
28
|
-
<string name="audio_browser_offline_error_subtitle">Check your connection and try again</string>
|
|
29
|
-
|
|
30
|
-
<!--
|
|
31
|
-
The browse-error tile: shown when a browse fails while ONLINE — a server
|
|
32
|
-
error, a bad status, a timeout waiting for the JS browser. Deliberately
|
|
33
|
-
vague, and deliberately not "no internet connection": the genuinely-offline
|
|
34
|
-
case is caught earlier and gets the tile above, so anything reaching this
|
|
35
|
-
one has a working connection and would be misdiagnosed by that wording.
|
|
36
|
-
|
|
37
|
-
A tile rather than an error dialog because Media3 drops the message from
|
|
38
|
-
`LibraryResult.ofError` on the legacy browse bridge, which would leave a
|
|
39
|
-
bare "No items" screen. Verified on a head unit (2026-06): the Android Auto
|
|
40
|
-
browse list never renders error text by any other route, so tiles are the
|
|
41
|
-
only in-browse signal the library controls.
|
|
42
|
-
-->
|
|
43
29
|
<string name="audio_browser_browse_error">Something went wrong</string>
|
|
44
|
-
<string name="audio_browser_browse_error_subtitle">Please try again later</string>
|
|
45
30
|
</resources>
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
package com.audiobrowser.player
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle
|
|
4
|
+
import androidx.media3.common.MediaItem
|
|
5
|
+
import androidx.media3.common.MediaMetadata
|
|
6
|
+
import androidx.media3.session.MediaLibraryService
|
|
7
|
+
import androidx.media3.session.MediaSession
|
|
8
|
+
import com.audiobrowser.NavigationErrorException
|
|
9
|
+
import com.audiobrowser.TestFixtures
|
|
10
|
+
import com.audiobrowser.browser.HttpStatusException
|
|
11
|
+
import com.audiobrowser.browser.NetworkException
|
|
12
|
+
import com.audiobrowser.defaultFormattedError
|
|
13
|
+
import com.audiobrowser.formattedOrDefault
|
|
14
|
+
import com.audiobrowser.navigationErrorFor
|
|
15
|
+
import com.audiobrowser.util.BrowserPathHelper
|
|
16
|
+
import com.margelo.nitro.audiobrowser.FormattedNavigationError
|
|
17
|
+
import com.margelo.nitro.audiobrowser.NavigationError
|
|
18
|
+
import com.margelo.nitro.audiobrowser.NavigationErrorType
|
|
19
|
+
import kotlin.coroutines.Continuation
|
|
20
|
+
import kotlin.coroutines.resume
|
|
21
|
+
import kotlin.coroutines.suspendCoroutine
|
|
22
|
+
import kotlinx.coroutines.test.runTest
|
|
23
|
+
import org.junit.Assert.assertEquals
|
|
24
|
+
import org.junit.Assert.assertFalse
|
|
25
|
+
import org.junit.Assert.assertNotEquals
|
|
26
|
+
import org.junit.Assert.assertNotNull
|
|
27
|
+
import org.junit.Assert.assertNull
|
|
28
|
+
import org.junit.Assert.assertSame
|
|
29
|
+
import org.junit.Assert.assertTrue
|
|
30
|
+
import org.junit.Test
|
|
31
|
+
import org.junit.runner.RunWith
|
|
32
|
+
import org.robolectric.RobolectricTestRunner
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Tests the tiles an Android Auto browse level serves in place of a list: the empty tile of a page
|
|
36
|
+
* that resolved with zero children, and the offline and failure tiles, all worded by the app's
|
|
37
|
+
* `formatNavigationError` (ADR 0001). MediaSessionCallback itself needs a live MediaLibrarySession,
|
|
38
|
+
* so the pieces under test are the ones carved out of it: [browseLevelItems] (the empty-branch
|
|
39
|
+
* decision), the tile builders, [BrowserPathHelper.isDeadEndPath] (the drill-in guard),
|
|
40
|
+
* [announcedSearchCount] (what onSearch tells the controller to ask for), [FailedSearchSlot] (a
|
|
41
|
+
* failed search, which must not read as an empty one), [OfflineSearchRegistry] (the searches
|
|
42
|
+
* connectivity returning re-runs), [navigationErrorFor] (the one exception mapping browse, search
|
|
43
|
+
* and the JS-facing `search` rejection share) and [formattedOrDefault] (the formatter hop's
|
|
44
|
+
* fallback rule, which sits off the JNI-backed Promise edge for exactly this reason).
|
|
45
|
+
*/
|
|
46
|
+
@RunWith(RobolectricTestRunner::class)
|
|
47
|
+
class BrowseTilesTest {
|
|
48
|
+
|
|
49
|
+
private fun controller(packageName: String, uid: Int): MediaSession.ControllerInfo =
|
|
50
|
+
MediaSession.ControllerInfo.createTestOnlyControllerInfo(
|
|
51
|
+
packageName,
|
|
52
|
+
/* pid= */ 0,
|
|
53
|
+
uid,
|
|
54
|
+
/* libraryVersion= */ 2,
|
|
55
|
+
/* interfaceVersion= */ 2,
|
|
56
|
+
/* trusted= */ true,
|
|
57
|
+
Bundle.EMPTY,
|
|
58
|
+
/* isPackageNameVerified= */ true,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
private fun track(title: String): MediaItem =
|
|
62
|
+
MediaItem.Builder()
|
|
63
|
+
.setMediaId("/station/$title")
|
|
64
|
+
.setMediaMetadata(MediaMetadata.Builder().setTitle(title).build())
|
|
65
|
+
.build()
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Stands in for an app's `formatNavigationError`: different copy per error and per path, the
|
|
69
|
+
* point of ADR 0001. The search branches match the prefix the library builds car search paths
|
|
70
|
+
* from.
|
|
71
|
+
*/
|
|
72
|
+
private fun appCopy(error: NavigationError, path: String): FormattedNavigationError {
|
|
73
|
+
val isSearch = path.startsWith(BrowserPathHelper.SEARCH_PATH_PREFIX)
|
|
74
|
+
return when {
|
|
75
|
+
error.code == NavigationErrorType.NETWORK_ERROR && isSearch ->
|
|
76
|
+
FormattedNavigationError("Search needs a connection", "Reconnect and try again.")
|
|
77
|
+
error.code == NavigationErrorType.NETWORK_ERROR ->
|
|
78
|
+
FormattedNavigationError("You're offline", "Check your connection.")
|
|
79
|
+
error.code != NavigationErrorType.EMPTY_CONTENT ->
|
|
80
|
+
FormattedNavigationError("We couldn't load that", "Try again in a moment.")
|
|
81
|
+
path == "/favorites" ->
|
|
82
|
+
FormattedNavigationError("No favorites yet", "Tap the heart on a station to add it here.")
|
|
83
|
+
isSearch -> FormattedNavigationError("No results found", "Try a different search.")
|
|
84
|
+
else -> FormattedNavigationError("Nothing here", null)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@Test
|
|
89
|
+
fun `an empty favorites page serves one tile carrying the app's copy for that path`() = runTest {
|
|
90
|
+
val items = browseLevelItems(emptyList()) { appCopy(emptyContentError(), "/favorites") }
|
|
91
|
+
|
|
92
|
+
assertEquals(1, items.size)
|
|
93
|
+
val tile = items.single()
|
|
94
|
+
assertEquals(BrowserPathHelper.EMPTY_PATH, tile.mediaId)
|
|
95
|
+
assertEquals("No favorites yet", tile.mediaMetadata.title)
|
|
96
|
+
assertEquals("Tap the heart on a station to add it here.", tile.mediaMetadata.subtitle)
|
|
97
|
+
assertFalse(tile.mediaMetadata.isBrowsable!!)
|
|
98
|
+
assertFalse(tile.mediaMetadata.isPlayable!!)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Test
|
|
102
|
+
fun `with no formatter the tile carries the neutral default`() = runTest {
|
|
103
|
+
val default = defaultFormattedError(emptyContentError())
|
|
104
|
+
assertEquals("Nothing here", default.title)
|
|
105
|
+
assertNull(default.message)
|
|
106
|
+
|
|
107
|
+
val tile = browseLevelItems(emptyList()) { default }.single()
|
|
108
|
+
assertEquals("Nothing here", tile.mediaMetadata.title)
|
|
109
|
+
assertEquals("", tile.mediaMetadata.subtitle)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@Test
|
|
113
|
+
fun `a multi-line message collapses to the single-line subtitle`() = runTest {
|
|
114
|
+
val tile =
|
|
115
|
+
browseLevelItems(emptyList()) { FormattedNavigationError("Empty", "One\nTwo") }.single()
|
|
116
|
+
assertEquals("One Two", tile.mediaMetadata.subtitle)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@Test
|
|
120
|
+
fun `a page with children is served unchanged and never asks for copy`() = runTest {
|
|
121
|
+
val children = listOf(track("a"), track("b"))
|
|
122
|
+
|
|
123
|
+
val items = browseLevelItems(children) { error("formatter must not run for a full page") }
|
|
124
|
+
|
|
125
|
+
assertSame(children, items)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@Test
|
|
129
|
+
fun `a drill-in on the empty tile dead-ends`() {
|
|
130
|
+
assertTrue(BrowserPathHelper.isDeadEndPath(BrowserPathHelper.EMPTY_PATH))
|
|
131
|
+
assertFalse(BrowserPathHelper.isDeadEndPath("/favorites"))
|
|
132
|
+
// The gate tile re-serves its message instead of dead-ending.
|
|
133
|
+
assertFalse(BrowserPathHelper.isDeadEndPath(BrowserPathHelper.GATE_PATH))
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@Test
|
|
137
|
+
fun `the formatter hop keeps the app's answer`() = runTest {
|
|
138
|
+
val custom = FormattedNavigationError("No favorites yet", "Tap the heart.")
|
|
139
|
+
assertEquals(
|
|
140
|
+
custom,
|
|
141
|
+
formattedOrDefault(backgroundScope, FormattedNavigationError("Nothing here", null)) { custom },
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@Test
|
|
146
|
+
fun `the formatter hop falls back to the default on null and on a throw`() = runTest {
|
|
147
|
+
val default = FormattedNavigationError("Nothing here", null)
|
|
148
|
+
|
|
149
|
+
assertEquals(default, formattedOrDefault(backgroundScope, default) { null })
|
|
150
|
+
assertEquals(
|
|
151
|
+
default,
|
|
152
|
+
formattedOrDefault(backgroundScope, default) { throw IllegalStateException("boom") },
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
@Test
|
|
157
|
+
fun `an empty search serves one tile carrying the app's copy for the search path`() = runTest {
|
|
158
|
+
val searchPath = BrowserPathHelper.createSearchPath("jazz")
|
|
159
|
+
|
|
160
|
+
val items = browseLevelItems(emptyList()) { appCopy(emptyContentError(), searchPath) }
|
|
161
|
+
|
|
162
|
+
assertEquals(1, items.size)
|
|
163
|
+
val tile = items.single()
|
|
164
|
+
assertEquals(BrowserPathHelper.EMPTY_PATH, tile.mediaId)
|
|
165
|
+
assertEquals("No results found", tile.mediaMetadata.title)
|
|
166
|
+
assertEquals("Try a different search.", tile.mediaMetadata.subtitle)
|
|
167
|
+
assertFalse(tile.mediaMetadata.isBrowsable!!)
|
|
168
|
+
assertFalse(tile.mediaMetadata.isPlayable!!)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@Test
|
|
172
|
+
fun `a search with hits is served unchanged and never asks for copy`() = runTest {
|
|
173
|
+
val hits = listOf(track("Jazz FM"), track("Jazz24"))
|
|
174
|
+
|
|
175
|
+
val items = browseLevelItems(hits) { error("formatter must not run for a search with hits") }
|
|
176
|
+
|
|
177
|
+
assertSame(hits, items)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@Test
|
|
181
|
+
fun `a search whose every hit is disabled counts as empty and announces the tile`() {
|
|
182
|
+
val disabledOnly =
|
|
183
|
+
listOf(
|
|
184
|
+
TestFixtures.section(
|
|
185
|
+
children =
|
|
186
|
+
arrayOf(
|
|
187
|
+
TestFixtures.track(title = "Gone", disabled = true),
|
|
188
|
+
TestFixtures.track(title = "Also gone", disabled = true),
|
|
189
|
+
)
|
|
190
|
+
)
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
// Nothing servable, so the announced count is the tile's — a controller told zero would never
|
|
194
|
+
// come back for it.
|
|
195
|
+
assertEquals(1, announcedSearchCount(disabledOnly))
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@Test
|
|
199
|
+
fun `a search announces only its servable hits`() {
|
|
200
|
+
val mixed =
|
|
201
|
+
listOf(
|
|
202
|
+
TestFixtures.section(
|
|
203
|
+
children =
|
|
204
|
+
arrayOf(
|
|
205
|
+
TestFixtures.track(title = "Playable"),
|
|
206
|
+
TestFixtures.track(title = "Gone", disabled = true),
|
|
207
|
+
)
|
|
208
|
+
),
|
|
209
|
+
TestFixtures.section(children = arrayOf(TestFixtures.track(title = "Another"))),
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
assertEquals(2, announcedSearchCount(mixed))
|
|
213
|
+
assertEquals(1, announcedSearchCount(null))
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
@Test
|
|
217
|
+
fun `an offline search serves the offline tile with the app's copy for the search path`() {
|
|
218
|
+
val searchPath = BrowserPathHelper.createSearchPath("jazz")
|
|
219
|
+
val slot = FailedSearchSlot()
|
|
220
|
+
|
|
221
|
+
val tile = createOfflineMediaItem(appCopy(offlineError(), searchPath))
|
|
222
|
+
|
|
223
|
+
assertEquals(BrowserPathHelper.OFFLINE_PATH, tile.mediaId)
|
|
224
|
+
assertEquals("Search needs a connection", tile.mediaMetadata.title)
|
|
225
|
+
assertEquals("Reconnect and try again.", tile.mediaMetadata.subtitle)
|
|
226
|
+
assertFalse(tile.mediaMetadata.isBrowsable!!)
|
|
227
|
+
assertFalse(tile.mediaMetadata.isPlayable!!)
|
|
228
|
+
assertTrue(BrowserPathHelper.isDeadEndPath(BrowserPathHelper.OFFLINE_PATH))
|
|
229
|
+
// Offline is not a search that failed: connectivity returning is what serves results again,
|
|
230
|
+
// so the slot stays empty and a later re-query of the query is not a failure.
|
|
231
|
+
assertNull(slot.errorFor("jazz"))
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@Test
|
|
235
|
+
fun `the offline tile is worded per path, and title-only by default`() {
|
|
236
|
+
val browseTile = createOfflineMediaItem(appCopy(offlineError(), "/favorites"))
|
|
237
|
+
assertEquals("You're offline", browseTile.mediaMetadata.title)
|
|
238
|
+
assertEquals("Check your connection.", browseTile.mediaMetadata.subtitle)
|
|
239
|
+
|
|
240
|
+
val default = defaultFormattedError(offlineError())
|
|
241
|
+
assertEquals("Network Error", default.title)
|
|
242
|
+
assertNull(default.message)
|
|
243
|
+
assertEquals("", createOfflineMediaItem(default).mediaMetadata.subtitle)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
@Test
|
|
247
|
+
fun `the browse-error tile is worded by the error its exception mapped to`() {
|
|
248
|
+
val failure = navigationErrorFor(HttpStatusException(503, "Service Unavailable"))
|
|
249
|
+
|
|
250
|
+
val appTile = createBrowseErrorMediaItem(appCopy(failure, "/favorites"))
|
|
251
|
+
assertEquals(BrowserPathHelper.ERROR_PATH, appTile.mediaId)
|
|
252
|
+
assertEquals("We couldn't load that", appTile.mediaMetadata.title)
|
|
253
|
+
assertEquals("Try again in a moment.", appTile.mediaMetadata.subtitle)
|
|
254
|
+
|
|
255
|
+
// Without a formatter, the status text the in-app error already shows.
|
|
256
|
+
val defaultTile = createBrowseErrorMediaItem(defaultFormattedError(failure))
|
|
257
|
+
assertEquals("Service Unavailable", defaultTile.mediaMetadata.title)
|
|
258
|
+
|
|
259
|
+
// A re-read of the tile has no exception left to map, so it stands on the generic failure.
|
|
260
|
+
assertEquals("Error", defaultFormattedError(browseFailureError()).title)
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@Test
|
|
264
|
+
fun `a recorded search failure carries its error for that query only, until a success clears it`() {
|
|
265
|
+
val slot = FailedSearchSlot()
|
|
266
|
+
val failure = navigationErrorFor(HttpStatusException(500, "Internal Server Error"))
|
|
267
|
+
assertNull(slot.errorFor("jazz"))
|
|
268
|
+
|
|
269
|
+
slot.record("jazz", failure)
|
|
270
|
+
assertEquals(failure, slot.errorFor("jazz"))
|
|
271
|
+
assertNull(slot.errorFor("blues"))
|
|
272
|
+
|
|
273
|
+
slot.clear()
|
|
274
|
+
assertNull(slot.errorFor("jazz"))
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
@Test
|
|
278
|
+
fun `a failed search rejects with the navigation error a failed browse would raise`() {
|
|
279
|
+
// Nitro's Promise is JNI-backed (its constructor calls initHybrid), so the JS-facing
|
|
280
|
+
// AudioBrowser.search cannot be built here; what it rejects with is this.
|
|
281
|
+
val rejection =
|
|
282
|
+
NavigationErrorException(navigationErrorFor(HttpStatusException(503, "Service Unavailable")))
|
|
283
|
+
assertEquals(NavigationErrorType.HTTP_ERROR, rejection.error.code)
|
|
284
|
+
assertEquals(503.0, rejection.error.statusCode!!, 0.0)
|
|
285
|
+
assertEquals(false, rejection.error.statusCodeSuccess)
|
|
286
|
+
assertEquals("Service Unavailable", rejection.message)
|
|
287
|
+
|
|
288
|
+
assertEquals(
|
|
289
|
+
NavigationErrorType.NETWORK_ERROR,
|
|
290
|
+
navigationErrorFor(NetworkException("Network request failed")).code,
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
val unknown = navigationErrorFor(IllegalStateException())
|
|
294
|
+
assertEquals(NavigationErrorType.UNKNOWN_ERROR, unknown.code)
|
|
295
|
+
assertEquals("An unexpected error occurred", unknown.message)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
@Test
|
|
299
|
+
fun `an offline search is remembered per controller, latest query only`() {
|
|
300
|
+
val registry = OfflineSearchRegistry()
|
|
301
|
+
val auto = controller("com.google.android.projection.gearhead", uid = 10)
|
|
302
|
+
val assistant = controller("com.google.android.googlequicksearchbox", uid = 11)
|
|
303
|
+
|
|
304
|
+
registry.record(auto, "jazz", null)
|
|
305
|
+
registry.record(assistant, "blues", null)
|
|
306
|
+
registry.record(auto, "jazz fm", null)
|
|
307
|
+
|
|
308
|
+
val pending = registry.drain()
|
|
309
|
+
assertEquals(2, pending.size)
|
|
310
|
+
assertEquals("jazz fm", pending.single { it.browser == auto }.query)
|
|
311
|
+
assertEquals("blues", pending.single { it.browser == assistant }.query)
|
|
312
|
+
// Drained, so a second connectivity change does not re-run the same searches again.
|
|
313
|
+
assertTrue(registry.drain().isEmpty())
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
@Test
|
|
317
|
+
fun `a re-run search is announced by its hits, an offline one by its tile`() {
|
|
318
|
+
val hits =
|
|
319
|
+
listOf(
|
|
320
|
+
TestFixtures.section(
|
|
321
|
+
children =
|
|
322
|
+
arrayOf(TestFixtures.track(title = "Jazz FM"), TestFixtures.track(title = "Jazz24"))
|
|
323
|
+
)
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
// The re-run goes through the same count as the first, online search, so what a controller is
|
|
327
|
+
// told to fetch is what onGetSearchResult then serves from the cache that search filled.
|
|
328
|
+
assertEquals(2, announcedSearchCount(hits))
|
|
329
|
+
// While offline there is nothing to count: the one tile is announced instead.
|
|
330
|
+
assertEquals(1, announcedSearchCount(null))
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
@Test
|
|
334
|
+
fun `a disconnected controller's offline search is forgotten`() {
|
|
335
|
+
val registry = OfflineSearchRegistry()
|
|
336
|
+
val auto = controller("com.google.android.projection.gearhead", uid = 10)
|
|
337
|
+
val assistant = controller("com.google.android.googlequicksearchbox", uid = 11)
|
|
338
|
+
registry.record(auto, "jazz", null)
|
|
339
|
+
registry.record(assistant, "blues", null)
|
|
340
|
+
|
|
341
|
+
registry.forget(auto)
|
|
342
|
+
|
|
343
|
+
assertEquals(listOf("blues"), registry.drain().map { it.query })
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
@Test
|
|
347
|
+
fun `a remembered search keeps the params its controller asked with`() {
|
|
348
|
+
val registry = OfflineSearchRegistry()
|
|
349
|
+
val auto = controller("com.google.android.projection.gearhead", uid = 10)
|
|
350
|
+
val params =
|
|
351
|
+
MediaLibraryService.LibraryParams.Builder()
|
|
352
|
+
.setExtras(Bundle().apply { putInt("page", 3) })
|
|
353
|
+
.build()
|
|
354
|
+
|
|
355
|
+
registry.record(auto, "jazz", params)
|
|
356
|
+
|
|
357
|
+
assertEquals(3, registry.drain().single().params?.extras?.getInt("page"))
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
@Test
|
|
361
|
+
fun `the failure sentinel is distinct from the empty one and dead-ends too`() {
|
|
362
|
+
assertNotEquals(BrowserPathHelper.EMPTY_PATH, BrowserPathHelper.ERROR_PATH)
|
|
363
|
+
assertTrue(BrowserPathHelper.isDeadEndPath(BrowserPathHelper.ERROR_PATH))
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
@Test
|
|
367
|
+
fun `a formatter parked in a non-cancellable wait falls back without hanging`() = runTest {
|
|
368
|
+
val default = FormattedNavigationError("Nothing here", null)
|
|
369
|
+
var parked: Continuation<FormattedNavigationError?>? = null
|
|
370
|
+
|
|
371
|
+
try {
|
|
372
|
+
// Nitro's Promise.await parks exactly like this — suspendCoroutine, so cancelling the
|
|
373
|
+
// coroutine never unparks it. The hop must be abandoned, not waited on.
|
|
374
|
+
val formatted =
|
|
375
|
+
formattedOrDefault(backgroundScope, default) {
|
|
376
|
+
suspendCoroutine { continuation -> parked = continuation }
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
assertNotNull(parked)
|
|
380
|
+
assertEquals(default, formatted)
|
|
381
|
+
} finally {
|
|
382
|
+
parked?.resume(null)
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
@@ -156,8 +156,16 @@ function hasSearch() {
|
|
|
156
156
|
/**
|
|
157
157
|
* Searches for tracks using the configured search source.
|
|
158
158
|
*
|
|
159
|
+
* Resolves `[]` only when the source found nothing; a failed search rejects,
|
|
160
|
+
* so a caller can tell "no results" from "the request failed". The rejection's
|
|
161
|
+
* message describes the failure — native platforms reject with the underlying
|
|
162
|
+
* throwable and JS sees only its message. On web the `Error` also carries a
|
|
163
|
+
* `code`, the {@link NavigationErrorType} the browse path reports as a
|
|
164
|
+
* {@link NavigationError} (`'http-error'`, `'network-error'`).
|
|
165
|
+
*
|
|
159
166
|
* @param query - The search query string
|
|
160
167
|
* @returns Promise resolving to an array of matching tracks
|
|
168
|
+
* @throws When the search source or its request fails
|
|
161
169
|
*
|
|
162
170
|
* @see {@link configureBrowser}
|
|
163
171
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","_browserConfig","currentConfiguration","configureBrowser","configuration","__DEV__","validateBrowserConfiguration","nativeBrowser","toNativeConfig","getBrowserConfiguration","navigate","pathOrTrack","navigatePath","navigateTrack","getPath","path","onPathChanged","exports","NativeUpdatedValue","emitterize","cb","usePath","useNativeUpdatedValue","getContent","onContentChanged","useContent","getTabs","tabs","onTabsChanged","useTabs","notifyContentChanged","invalidateAllContent","hasSearch","config","searchRoute","routes","find","r","SEARCH_ROUTE_PATH","searchCallback","searchConfig","search","query"],"sourceRoot":"../../../src","sources":["features/browser.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_native","require","_NativeUpdatedValue","_useNativeUpdatedValue","_browserConfig","currentConfiguration","configureBrowser","configuration","__DEV__","validateBrowserConfiguration","nativeBrowser","toNativeConfig","getBrowserConfiguration","navigate","pathOrTrack","navigatePath","navigateTrack","getPath","path","onPathChanged","exports","NativeUpdatedValue","emitterize","cb","usePath","useNativeUpdatedValue","getContent","onContentChanged","useContent","getTabs","tabs","onTabsChanged","useTabs","notifyContentChanged","invalidateAllContent","hasSearch","config","searchRoute","routes","find","r","SEARCH_ROUTE_PATH","searchCallback","searchConfig","search","query"],"sourceRoot":"../../../src","sources":["features/browser.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -297,6 +297,9 @@ class BrowserManager {
|
|
|
297
297
|
* results (no contextual URLs), like the native `makeSearchResult`.
|
|
298
298
|
* Matches Android's BrowserManager.search() which bypasses resolve() entirely.
|
|
299
299
|
*
|
|
300
|
+
* A failed search propagates, so `navigate` turns it into a navigation error
|
|
301
|
+
* the way it does a failed browse resolve.
|
|
302
|
+
*
|
|
300
303
|
* @param searchPath The search path (format: /__search?q=query)
|
|
301
304
|
* @returns ResolvedTrack containing search results as one untitled section
|
|
302
305
|
*/
|
|
@@ -326,14 +329,9 @@ class BrowserManager {
|
|
|
326
329
|
}
|
|
327
330
|
// Handle request config-based search via the shared layered fetch.
|
|
328
331
|
else if (searchRoute.searchConfig) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
});
|
|
333
|
-
} catch (error) {
|
|
334
|
-
console.error('Search failed:', error);
|
|
335
|
-
return undefined;
|
|
336
|
-
}
|
|
332
|
+
searchResults = await this.fetchSearchResults(searchRoute.searchConfig, {
|
|
333
|
+
q: query
|
|
334
|
+
});
|
|
337
335
|
}
|
|
338
336
|
|
|
339
337
|
// Search callbacks should return fresh tracks without contextual paths (like Android)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_getTrackIdentity","require","_validation","_RequestConfigBuilder","_SimpleRouter","_BrowserPathHelper","_assertBrowsePageShape","_parseSearchResponse","_sections","BrowserManager","_configuration","router","SimpleRouter","_layerGeneration","_resolvedLayerGeneration","currentNavigationId","onPathChanged","onContentChanged","onTabsChanged","constructor","httpClient","favoriteManager","navigationErrorManager","handleNavigationError","error","path","message","navError","setNavigationError","code","statusCode","_path","value","hasValidConfiguration","clearNavigationError","pathToNavigate","getDefaultPath","navigate","tabs","_tabs","content","_content","configuration","queueSourcePath","_queueSourcePath","setFormatCallback","formatNavigationError","initialPath","tabsRoute","routes","find","r","staticTabs","browseStatic","flattenedChildren","navigatePath","navigateTrack","track","console","warn","notifyContentChanged","invalidateAllContent","navigationId","undefined","isSearchPath","startsWith","BrowserPathHelper","SEARCH_PATH_PREFIX","resolveSearchContent","resolveContent","sections","addContextualPaths","hydrateChildren","transformArtworkForContent","queryTabs","index","map","section","children","flatIndex","identity","getTrackIdentity","src","build","searchPath","queryMatch","match","query","decodeURIComponent","searchRoute","searchResults","searchCallback","reference","searchConfig","fetchSearchResults","q","normalizePage","title","artworkConfig","artwork","ensureLayersResolved","requestConfig","_resolvedRequest","parentArtworkSource","RequestConfigBuilder","resolveArtworkSourceAsync","transformTrack","artworkSource","transformedSections","Promise","all","resolveRouteContent","route","routeParams","errorContext","browseCallback","result","browseConfig","resolveFromConfig","browse","_layerResolution","generation","promise","cfg","resolvedRequest","requestResolver","request","resolvedBrowse","browseResolver","_resolvedBrowse","catch","err","kindConfig","routeConfig","params","merged","applyLayers","response","executeRequest","assertBrowsePageShape","queryParams","parseSearchResponse","length","routePatterns","findBestMatch","matchedPattern","routeMatch","matchedRoute","defaultRoute","flattenSections","expandQueueFromContextualPath","contextualPath","trackId","extractTrackId","parentPath","stripTrackId","parentResolvedTrack","rawSections","every","s","tappedIndex","extractIndex","scoped","sectionContaining","isQueueable","disabled","playableTracks","tracks","filter","selectedIndex","tappedOffset","tapped","slice","findIndex","singleTrack","assertedNotNullish","resolveMediaItemsForPlayback","startIndex","startPositionMs","searchQuery","trackPath","createSearchPath","searchTracks","t","selectedIdx","isContextual","expanded","firstTab","exports"],"sourceRoot":"../../../../src","sources":["web/browser/BrowserManager.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_getTrackIdentity","require","_validation","_RequestConfigBuilder","_SimpleRouter","_BrowserPathHelper","_assertBrowsePageShape","_parseSearchResponse","_sections","BrowserManager","_configuration","router","SimpleRouter","_layerGeneration","_resolvedLayerGeneration","currentNavigationId","onPathChanged","onContentChanged","onTabsChanged","constructor","httpClient","favoriteManager","navigationErrorManager","handleNavigationError","error","path","message","navError","setNavigationError","code","statusCode","_path","value","hasValidConfiguration","clearNavigationError","pathToNavigate","getDefaultPath","navigate","tabs","_tabs","content","_content","configuration","queueSourcePath","_queueSourcePath","setFormatCallback","formatNavigationError","initialPath","tabsRoute","routes","find","r","staticTabs","browseStatic","flattenedChildren","navigatePath","navigateTrack","track","console","warn","notifyContentChanged","invalidateAllContent","navigationId","undefined","isSearchPath","startsWith","BrowserPathHelper","SEARCH_PATH_PREFIX","resolveSearchContent","resolveContent","sections","addContextualPaths","hydrateChildren","transformArtworkForContent","queryTabs","index","map","section","children","flatIndex","identity","getTrackIdentity","src","build","searchPath","queryMatch","match","query","decodeURIComponent","searchRoute","searchResults","searchCallback","reference","searchConfig","fetchSearchResults","q","normalizePage","title","artworkConfig","artwork","ensureLayersResolved","requestConfig","_resolvedRequest","parentArtworkSource","RequestConfigBuilder","resolveArtworkSourceAsync","transformTrack","artworkSource","transformedSections","Promise","all","resolveRouteContent","route","routeParams","errorContext","browseCallback","result","browseConfig","resolveFromConfig","browse","_layerResolution","generation","promise","cfg","resolvedRequest","requestResolver","request","resolvedBrowse","browseResolver","_resolvedBrowse","catch","err","kindConfig","routeConfig","params","merged","applyLayers","response","executeRequest","assertBrowsePageShape","queryParams","parseSearchResponse","length","routePatterns","findBestMatch","matchedPattern","routeMatch","matchedRoute","defaultRoute","flattenSections","expandQueueFromContextualPath","contextualPath","trackId","extractTrackId","parentPath","stripTrackId","parentResolvedTrack","rawSections","every","s","tappedIndex","extractIndex","scoped","sectionContaining","isQueueable","disabled","playableTracks","tracks","filter","selectedIndex","tappedOffset","tapped","slice","findIndex","singleTrack","assertedNotNullish","resolveMediaItemsForPlayback","startIndex","startPositionMs","searchQuery","trackPath","createSearchPath","searchTracks","t","selectedIdx","isContextual","expanded","firstTab","exports"],"sourceRoot":"../../../../src","sources":["web/browser/BrowserManager.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,7 +20,9 @@ class SearchManager {
|
|
|
20
20
|
* Matches Android's BrowserManager.search(params: SearchParams) behavior.
|
|
21
21
|
*
|
|
22
22
|
* @param params Search parameters (query is required, other fields optional)
|
|
23
|
-
* @returns Array of matching tracks
|
|
23
|
+
* @returns Array of matching tracks — empty only when the source found none
|
|
24
|
+
* @throws The failure itself: an `Error` carrying a `NavigationErrorType`
|
|
25
|
+
* `code` from `HttpClient`, or whatever a `searchCallback` rejected with
|
|
24
26
|
*/
|
|
25
27
|
async search(params) {
|
|
26
28
|
// Find __search__ route entry
|
|
@@ -50,12 +52,7 @@ class SearchManager {
|
|
|
50
52
|
|
|
51
53
|
// Delegate to the shared layered fetch (request → search) on BrowserManager
|
|
52
54
|
// so the ladder lives in one place.
|
|
53
|
-
|
|
54
|
-
results = await this.browserManager.fetchSearchResults(searchRoute.searchConfig, searchQueryParams);
|
|
55
|
-
} catch (error) {
|
|
56
|
-
console.error('Search failed:', error);
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
55
|
+
results = await this.browserManager.fetchSearchResults(searchRoute.searchConfig, searchQueryParams);
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
// Transform artwork URLs on search results using async method with full Track access
|