Skip to content

Commit

Permalink
Improve LinkPrimalWalletViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
AleksandarIlic committed Feb 28, 2025
1 parent 27777c4 commit 24fbdd7
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import net.primal.android.settings.network.NetworkSettingsScreen
import net.primal.android.settings.network.NetworkSettingsViewModel
import net.primal.android.settings.notifications.NotificationsSettingsScreen
import net.primal.android.settings.notifications.NotificationsSettingsViewModel
import net.primal.android.settings.wallet.domain.parseAsPrimalWalletNwc
import net.primal.android.settings.wallet.nwc.primal.create.CreateNewWalletConnectionScreen
import net.primal.android.settings.wallet.nwc.primal.create.CreateNewWalletConnectionViewModel
import net.primal.android.settings.wallet.nwc.primal.link.LinkPrimalWalletScreen
Expand Down Expand Up @@ -218,20 +219,26 @@ private fun NavGraphBuilder.linkPrimalWallet(
popEnterTransition = { primalScaleIn },
popExitTransition = { primalSlideOutHorizontallyToEnd },
) {
val nwcPrimalUrl = LocalActivity.current?.intent?.data?.toString()
val activity = LocalActivity.current
fun dismissLinkPrimalWallet() {
if (!navController.popBackStack()) {
activity?.finishAfterTransition()
}
}

val nwcPrimalUrl = activity?.intent?.data?.toString()
if (nwcPrimalUrl == null) {
dismissLinkPrimalWallet()
return@composable
}

val viewModel = hiltViewModel<LinkPrimalWalletViewModel, LinkPrimalWalletViewModel.Factory> { factory ->
factory.create(nwcPrimalUrl = nwcPrimalUrl)
factory.create(nwcRequest = nwcPrimalUrl.parseAsPrimalWalletNwc())
}
val activity = LocalActivity.current
LockToOrientationPortrait()
LinkPrimalWalletScreen(
viewModel = viewModel,
onDismiss = {
if (!navController.popBackStack()) {
activity?.finishAfterTransition()
}
},
onDismiss = { dismissLinkPrimalWallet() },
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@ fun String.parseAsPrimalWalletNwc(): PrimalWalletNwc {
val appIcon = uri.getQueryParameterOrNull("appicon")
val appName = uri.getQueryParameterOrNull("appname")

if (uri.host != "connect") throw PrimalWalletNwcParseException()
if (uri.host != "connect") {
throw PrimalWalletNwcParseException(
message = "Uri host is not 'connect'. Have you changed the deep linking pattern?",
)
}

return PrimalWalletNwc(
callback = callback,
Expand All @@ -30,4 +34,4 @@ private fun Uri.getQueryParameterOrNull(key: String): String? {
return runCatching { this.getQueryParameter(key) }.getOrNull()
}

class PrimalWalletNwcParseException : RuntimeException()
class PrimalWalletNwcParseException(override val message: String?) : RuntimeException(message)
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.getAndUpdate
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import net.primal.android.networking.sockets.errors.WssException
import net.primal.android.settings.wallet.domain.parseAsPrimalWalletNwc
import net.primal.android.settings.wallet.domain.PrimalWalletNwc
import net.primal.android.settings.wallet.nwc.primal.PrimalNwcDefaults.DEFAULT_APP_NAME
import net.primal.android.settings.wallet.nwc.primal.link.LinkPrimalWalletContract.SideEffect
import net.primal.android.settings.wallet.nwc.primal.link.LinkPrimalWalletContract.UiEvent
Expand All @@ -29,24 +29,21 @@ import timber.log.Timber

@HiltViewModel(assistedFactory = LinkPrimalWalletViewModel.Factory::class)
class LinkPrimalWalletViewModel @AssistedInject constructor(
@Assisted private val nwcPrimalUrl: String?,
@Assisted private val nwcRequest: PrimalWalletNwc,
private val activeAccountStore: ActiveAccountStore,
private val nwcWalletRepository: NwcWalletRepository,
) : ViewModel() {

@AssistedFactory
interface Factory {
fun create(nwcPrimalUrl: String?): LinkPrimalWalletViewModel
fun create(nwcRequest: PrimalWalletNwc): LinkPrimalWalletViewModel
}

private val primalNwcWallet = nwcPrimalUrl?.parseAsPrimalWalletNwc()
?: error("could not parse nwc primal wallet uri.")

private val _state = MutableStateFlow(
UiState(
appName = primalNwcWallet.appName ?: DEFAULT_APP_NAME,
appIcon = primalNwcWallet.appIcon,
callback = primalNwcWallet.callback ?: "",
callback = nwcRequest.callback ?: "",
appName = nwcRequest.appName ?: DEFAULT_APP_NAME,
appIcon = nwcRequest.appIcon,
),
)
val state = _state.asStateFlow()
Expand Down

0 comments on commit 24fbdd7

Please sign in to comment.