Added initial code for possible future deeplink nav support

This commit is contained in:
Arty Bishop committed 2026-06-07 16:01:23 +01:00
1 parent e5033cb2e9
commit ec1a55c93d
4 files changed
+125 -4

No files matched your search

@@ -38,3 +38,33 @@ sealed class Screen(val iconResId: Int, val titleResId: Int) : NavKey {
@Serializable
data object Settings : Screen(R.drawable.ic_settings, R.string.nav_prefs)
}
@Serializable
data object RadarDestination : NavKey
interface IDeeplinkMatcher {
fun match(deeplink: String): NavKey?
}
object PassDetailsMatcher : IDeeplinkMatcher {
val passDetailsRegex = """https://github.com/rt-bishop/Look4Sat/passes/(.*)""".toRegex()
override fun match(deeplink: String): NavKey? {
val passMatch = passDetailsRegex.find(deeplink)
passMatch?.let { match ->
val passId = match.groupValues[1]
if (passId.isNotEmpty()) return RadarDestination
}
return null
}
}
class DeeplinkResolver(private val fallbackDestination: NavKey = Screen.Passes) {
private val matchers: List<IDeeplinkMatcher> = listOf(PassDetailsMatcher)
fun resolve(deeplink: String): NavKey {
matchers.forEach { it.match(deeplink)?.let { match -> return match } }
return fallbackDestination
}
}
@@ -0,0 +1,39 @@
/*
* Look4Sat. Amateur radio satellite tracker and pass predictor.
* Copyright (C) 2019-2026 Arty Bishop and contributors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.rtbishop.look4sat.core.presentation
import org.junit.Test
class DeeplinkResolverTest {
@Test
fun returnsDefaultDestination() {
val deeplinkResolver = DeeplinkResolver()
val result = deeplinkResolver.resolve("/deeplink")
assert(result == Screen.Passes)
}
@Test
fun returnsRadarDestination() {
val passId = "some-pass-id"
val passDeeplink = "https://github.com/rt-bishop/Look4Sat/passes/$passId"
val deeplinkResolver = DeeplinkResolver()
val result = deeplinkResolver.resolve(passDeeplink)
assert(result == RadarDestination)
}
}