feat(deeplink): прямое открытие в пакете стороннего сервиса (packageName)
This commit is contained in:
@@ -15,6 +15,32 @@ object DeeplinkNavigator {
|
||||
val url = service.buildSearchUrl(track.artist, track.song)
|
||||
Log.d("DeeplinkNavigator", "url=$url")
|
||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
|
||||
|
||||
val pkg = service.packageName
|
||||
if (pkg != null) {
|
||||
// Сторонний клиент: открыть напрямую в его пакете, если установлен.
|
||||
val installed = try {
|
||||
context.packageManager.getPackageInfo(pkg, 0)
|
||||
true
|
||||
} catch (e: Exception) {
|
||||
false
|
||||
}
|
||||
if (installed) {
|
||||
intent.setPackage(pkg)
|
||||
try {
|
||||
context.startActivity(intent)
|
||||
return
|
||||
} catch (e: Exception) {
|
||||
Log.e("DeeplinkNavigator", "Не удалось открыть в $pkg", e)
|
||||
// упадём в общий путь ниже (системный выбор / браузер)
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(context, "${service.displayName} не установлено", Toast.LENGTH_SHORT).show()
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Обычные сервисы (или фолбэк) — системный выбор приложения.
|
||||
try {
|
||||
context.startActivity(Intent.createChooser(intent, "Открыть в..."))
|
||||
} catch (e: Exception) {
|
||||
|
||||
@@ -3,7 +3,10 @@ package com.radiola.domain.model
|
||||
enum class DeeplinkService(
|
||||
val serviceId: String,
|
||||
val displayName: String,
|
||||
val searchUrlTemplate: String
|
||||
val searchUrlTemplate: String,
|
||||
// Пакет стороннего приложения: если задан — открываем поиск прямо в нём
|
||||
// (setPackage), иначе через системный выбор «Открыть в...».
|
||||
val packageName: String? = null
|
||||
) {
|
||||
YANDEX("yandex", "Яндекс Музыка", "https://music.yandex.ru/search?text=%s"),
|
||||
VK("vk", "ВК Музыка", "https://vk.com/audio?q=%s"),
|
||||
|
||||
Reference in New Issue
Block a user