diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a85fe035..08379fd9d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -75,6 +75,20 @@ android:scheme="https" /> + + + + + + + + + diff --git a/app/src/main/kotlin/net/primal/android/navigation/PrimalAppNavigation.kt b/app/src/main/kotlin/net/primal/android/navigation/PrimalAppNavigation.kt index 1a0692149..786c73237 100644 --- a/app/src/main/kotlin/net/primal/android/navigation/PrimalAppNavigation.kt +++ b/app/src/main/kotlin/net/primal/android/navigation/PrimalAppNavigation.kt @@ -448,6 +448,11 @@ fun SharedTransitionScope.PrimalAppNavigation() { ) } + is DeepLink.Article -> { + navController.popBackStack() + navController.navigateToArticleDetails(deepLink.naddr) + } + null -> navController.navigateToHome() } } diff --git a/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLink.kt b/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLink.kt index 82f7a5180..10add9826 100644 --- a/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLink.kt +++ b/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLink.kt @@ -6,5 +6,6 @@ sealed class DeepLink { data class NostrWalletConnect(val nwc: net.primal.android.user.domain.NostrWalletConnect) : DeepLink() data class Profile(val pubkey: String) : DeepLink() data class Note(val noteId: String) : DeepLink() + data class Article(val naddr: String) : DeepLink() data class PrimalNWC(val primalWalletNwc: PrimalWalletNwc) : DeepLink() } diff --git a/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLinkingHandler.kt b/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLinkingHandler.kt index 85f4b7cf6..c01334b8b 100644 --- a/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLinkingHandler.kt +++ b/app/src/main/kotlin/net/primal/android/navigation/deeplinking/DeepLinkingHandler.kt @@ -8,6 +8,7 @@ import net.primal.android.user.domain.isNwcUrl import net.primal.android.user.domain.parseNWCUrl private val PRIMAL_NOTE_REGEX = Regex("https://.*primal.net/e/") +private val PRIMAL_ARTICLE_REGEX = Regex("https://.*primal.net/a/") private val PRIMAL_PROFILE_REGEX = Regex("https://.*primal.net/p/") private const val NOSTR_WALLET_CONNECT_SCHEMA = "nostr+walletconnect://" @@ -28,6 +29,11 @@ fun String.parseDeepLinkOrNull(): DeepLink? = unknownProfileIdentifier.resolveProfileId()?.let { DeepLink.Profile(it) } } + PRIMAL_ARTICLE_REGEX.containsMatchIn(this) -> { + val unknownArticleIdentifier = PRIMAL_ARTICLE_REGEX.replace(this, "") + unknownArticleIdentifier.let { DeepLink.Article(it) } + } + isNostrWalletConnectSchemaAndUrl() -> runCatching { DeepLink.NostrWalletConnect(nwc = this.parseNWCUrl())