From a45848bde9d55f75f619ae1ebef94bd922264070 Mon Sep 17 00:00:00 2001 From: Mehmedalija Karisik Date: Fri, 21 Feb 2025 15:33:18 +0100 Subject: [PATCH] Implement deep link for article links --- app/src/main/AndroidManifest.xml | 14 ++++++++++++++ .../android/navigation/PrimalAppNavigation.kt | 5 +++++ .../android/navigation/deeplinking/DeepLink.kt | 1 + .../navigation/deeplinking/DeepLinkingHandler.kt | 6 ++++++ 4 files changed, 26 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 968bd5cce..275d7a4ff 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 2eaf17fc5..ef02d915e 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 const val NOSTR_WALLET_CONNECT_SCHEMA = "nostr+walletconnect://" private const val NOSTR_WALLET_CONNECT_ALT_SCHEMA = "nostrwalletconnect://" @@ -22,6 +23,11 @@ fun String.parseDeepLinkOrNull(): DeepLink? = unknownNoteIdentifier.resolveNoteId()?.let { DeepLink.Note(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())