From ab09d92b0de1bef6315dc4919fc314dea4463615 Mon Sep 17 00:00:00 2001 From: nk Date: Mon, 8 Jun 2026 14:41:42 +0300 Subject: [PATCH] =?UTF-8?q?feat(deeplink):=20=D0=BA=D0=BD=D0=BE=D0=BF?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B2=20?= =?UTF-8?q?SOVA=20(re.sova.five,=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20?= =?UTF-8?q?sideload)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/radiola/domain/model/DeeplinkService.kt | 5 ++++- .../main/java/com/radiola/ui/player/PlayerViewModel.kt | 6 +++++- .../main/java/com/radiola/ui/settings/SettingsScreen.kt | 8 ++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt b/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt index 291ef86..492d5d2 100644 --- a/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt +++ b/app/src/main/java/com/radiola/domain/model/DeeplinkService.kt @@ -15,7 +15,10 @@ enum class DeeplinkService( APPLE_MUSIC("apple", "Apple Music", "https://music.apple.com/search?term=%s"), YOUTUBE_MUSIC("youtube", "YouTube Music", "https://music.youtube.com/search?q=%s"), TIDAL("tidal", "Tidal", "https://listen.tidal.com/search?q=%s"), - DEEZER("deezer", "Deezer", "https://www.deezer.com/search/%s"); + DEEZER("deezer", "Deezer", "https://www.deezer.com/search/%s"), + // Сторонний клиент ВК (мод VK 6.12). Открываем поиск музыки напрямую в его + // пакете через LinkRedirActivity. Доступен только в sideload-сборке. + SOVA("sova", "SOVA", "https://vk.com/audio?q=%s", packageName = "re.sova.five"); fun buildSearchUrl(artist: String, song: String): String { val query = java.net.URLEncoder.encode("$artist $song", "UTF-8") diff --git a/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt b/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt index 716dad4..cabf2b8 100644 --- a/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt +++ b/app/src/main/java/com/radiola/ui/player/PlayerViewModel.kt @@ -108,7 +108,11 @@ class PlayerViewModel @Inject constructor( } viewModelScope.launch { settingsRepository.getEnabledDeeplinkServices().collect { ids -> - _enabledServices.value = DeeplinkService.entries.filter { it.serviceId in ids } + _enabledServices.value = DeeplinkService.entries.filter { + it.serviceId in ids && + // SOVA (сторонний мод ВК) — только в sideload-сборке. + (com.radiola.BuildConfig.SHOW_DEV_TOOLS || it != DeeplinkService.SOVA) + } } } viewModelScope.launch { diff --git a/app/src/main/java/com/radiola/ui/settings/SettingsScreen.kt b/app/src/main/java/com/radiola/ui/settings/SettingsScreen.kt index 9061142..5f6dedf 100644 --- a/app/src/main/java/com/radiola/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/com/radiola/ui/settings/SettingsScreen.kt @@ -407,7 +407,11 @@ fun SettingsScreen( .background(colors.surface) .border(1.dp, colors.border, RoundedCornerShape(16.dp)) ) { - DeeplinkService.entries.forEachIndexed { index, service -> + // В store-сборке скрываем SOVA (сторонний мод ВК) — только sideload. + val services = DeeplinkService.entries.filter { + com.radiola.BuildConfig.SHOW_DEV_TOOLS || it != DeeplinkService.SOVA + } + services.forEachIndexed { index, service -> val checked = service.serviceId in enabledServices val trackColor by animateColorAsState( targetValue = if (checked) colors.accent else colors.surface2, @@ -438,7 +442,7 @@ fun SettingsScreen( ) ) } - if (index < DeeplinkService.entries.size - 1) { + if (index < services.size - 1) { HorizontalDivider( color = colors.border, modifier = Modifier.padding(horizontal = 16.dp)