diff --git a/common/src/main/res/values-ku/strings.xml b/common/src/main/res/values-ku/strings.xml
index a92c11a..b8430d8 100644
--- a/common/src/main/res/values-ku/strings.xml
+++ b/common/src/main/res/values-ku/strings.xml
@@ -2778,7 +2778,7 @@
Tu jixwe hemwelatî yî
Di People Chain de balance têr nîne. Herî kêm 1.1 HEZ pêwîst e.
Serlêdan bi serkeftî hat şandin
- Ji bo hemwelatîbûna Kurdistana Dîjîtal hevalê xwe vexwîne!\n\nNavnîşana min a referansê:\n%s
+ Ji bo hemwelatîbûna Kurdistana Dîjîtal hevalê xwe vexwîne!\n\nDi sepanê de veke:\n%1$s\n\nNavnîşana referansê:\n%2$s
Lînka Referansê Parve Bike
Navnîşana Referansê (ne mecbûrî)
Referansa te serlêdana te pejirand. Ji bo temamkirina hemwelatîbûnê îmze bike.
diff --git a/common/src/main/res/values-tr/strings.xml b/common/src/main/res/values-tr/strings.xml
index 2d59629..14da288 100644
--- a/common/src/main/res/values-tr/strings.xml
+++ b/common/src/main/res/values-tr/strings.xml
@@ -45,7 +45,7 @@
Zaten vatandaşsınız
People Chain\'de yetersiz bakiye. En az 1.1 HEZ gerekli.
Başvuru başarıyla gönderildi
- Dijital Kurdistan vatandaşlığı için arkadaşını davet et!\n\nReferans adresim:\n%s
+ Dijital Kurdistan vatandaşlığı için arkadaşını davet et!\n\nUygulamada aç:\n%1$s\n\nReferans adresi:\n%2$s
Referans Linkini Paylaş
Referans Adresi (opsiyonel)
Referansınız başvurunuzu onayladı. Vatandaşlığı tamamlamak için imzalayın.
diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml
index c83574a..1c7a1d8 100644
--- a/common/src/main/res/values/strings.xml
+++ b/common/src/main/res/values/strings.xml
@@ -2782,7 +2782,7 @@
You are already a citizen
Insufficient balance on People Chain. At least 1.1 HEZ required.
Application submitted successfully
- Refer a friend for Digital Kurdistan citizenship!\n\nMy referrer address:\n%s
+ Refer a friend for Digital Kurdistan citizenship!\n\nOpen in app:\n%1$s\n\nReferrer address:\n%2$s
Share Referral Link
Referrer Address (optional)
Your referrer has approved your application. Sign to complete citizenship.
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/di/modules/deeplinks/DeepLinkModule.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/di/modules/deeplinks/DeepLinkModule.kt
index 68f121e..cdbb843 100644
--- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/di/modules/deeplinks/DeepLinkModule.kt
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/di/modules/deeplinks/DeepLinkModule.kt
@@ -8,6 +8,7 @@ import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepos
import io.novafoundation.nova.feature_assets.presentation.AssetsRouter
import io.novafoundation.nova.feature_assets.presentation.balance.detail.deeplink.AssetDetailsDeepLinkConfigurator
import io.novafoundation.nova.feature_assets.presentation.balance.detail.deeplink.AssetDetailsDeepLinkHandler
+import io.novafoundation.nova.feature_assets.presentation.citizenship.deeplink.CitizenshipDeepLinkHandler
import io.novafoundation.nova.feature_assets.presentation.novacard.common.NovaCardRestrictionCheckMixin
import io.novafoundation.nova.feature_assets.presentation.novacard.overview.deeplink.NovaCardDeepLinkHandler
import io.novafoundation.nova.feature_deep_linking.presentation.configuring.LinkBuilderFactory
@@ -56,12 +57,21 @@ class DeepLinkModule {
)
}
+ @Provides
+ @FeatureScope
+ fun provideCitizenshipDeepLinkHandler(
+ automaticInteractionGate: AutomaticInteractionGate
+ ): CitizenshipDeepLinkHandler {
+ return CitizenshipDeepLinkHandler(automaticInteractionGate)
+ }
+
@Provides
@FeatureScope
fun provideDeepLinks(
assetDetails: AssetDetailsDeepLinkHandler,
- novaCardDeepLink: NovaCardDeepLinkHandler
+ novaCardDeepLink: NovaCardDeepLinkHandler,
+ citizenshipDeepLink: CitizenshipDeepLinkHandler
): AssetDeepLinks {
- return AssetDeepLinks(listOf(assetDetails, novaCardDeepLink))
+ return AssetDeepLinks(listOf(assetDetails, novaCardDeepLink, citizenshipDeepLink))
}
}
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt
index 105d83f..8741f42 100644
--- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListFragment.kt
@@ -178,8 +178,8 @@ class BalanceListFragment :
viewModel.filtersIndicatorIcon.observe(headerAdapter::setFilterIconRes)
viewModel.assetViewModeModelFlow.observe { manageAssetsAdapter.setAssetViewModeModel(it) }
- viewModel.openCitizenshipEvent.observeEvent {
- CitizenshipBottomSheet().show(childFragmentManager, "citizenship")
+ viewModel.openCitizenshipEvent.observeEvent { referrer ->
+ CitizenshipBottomSheet.newInstance(referrer).show(childFragmentManager, "citizenship")
}
viewModel.shareReferralEvent.observeEvent { shareText ->
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt
index 7266b7a..2e95c5e 100644
--- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/BalanceListViewModel.kt
@@ -40,6 +40,7 @@ import io.novafoundation.nova.feature_assets.presentation.balance.breakdown.mode
import io.novafoundation.nova.feature_assets.presentation.balance.common.AssetListMixinFactory
import io.novafoundation.nova.feature_assets.presentation.balance.common.buySell.BuySellSelectorMixin
import io.novafoundation.nova.feature_assets.presentation.balance.common.buySell.BuySellSelectorMixinFactory
+import io.novafoundation.nova.feature_assets.presentation.citizenship.PendingCitizenshipReferrer
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.NftPreviewUi
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.TotalBalanceModel
import io.novafoundation.nova.feature_assets.presentation.balance.list.view.AssetViewModeModel
@@ -115,8 +116,8 @@ class BalanceListViewModel(
private val _showBalanceBreakdownEvent = MutableLiveData>()
val showBalanceBreakdownEvent: LiveData> = _showBalanceBreakdownEvent
- private val _openCitizenshipEvent = MutableLiveData>()
- val openCitizenshipEvent: LiveData> = _openCitizenshipEvent
+ private val _openCitizenshipEvent = MutableLiveData>()
+ val openCitizenshipEvent: LiveData> = _openCitizenshipEvent
private val _shareReferralEvent = MutableLiveData>()
val shareReferralEvent: LiveData> = _shareReferralEvent
@@ -267,6 +268,10 @@ class BalanceListViewModel(
walletInteractor.nftSyncTrigger()
.onEach { trigger -> walletInteractor.syncChainNfts(selectedMetaAccount.first(), trigger.chain) }
.launchIn(viewModelScope)
+
+ PendingCitizenshipReferrer.referrerEvent
+ .onEach { referrer -> _openCitizenshipEvent.postValue(Event(referrer)) }
+ .launchIn(this)
}
fun fullSync() {
@@ -409,13 +414,14 @@ class BalanceListViewModel(
}
fun basvuruClicked() = launchUnit {
- _openCitizenshipEvent.postValue(Event(Unit))
+ _openCitizenshipEvent.postValue(Event(null))
}
fun shareReferralClicked() = launchUnit {
val metaAccount = selectedAccountUseCase.getSelectedMetaAccount()
val address = metaAccount.defaultSubstrateAddress ?: return@launchUnit
- val shareText = resourceManager.getString(R.string.citizenship_share_referral, address)
+ val deepLink = "pezkuwiwallet://pezkuwi/open/citizenship?referrer=$address"
+ val shareText = resourceManager.getString(R.string.citizenship_share_referral, deepLink, address)
_shareReferralEvent.postValue(Event(shareText))
}
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt
index 1d616b3..cb41145 100644
--- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipBottomSheet.kt
@@ -3,6 +3,7 @@ package io.novafoundation.nova.feature_assets.presentation.citizenship
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.Color
+import android.os.Bundle
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
@@ -21,6 +22,16 @@ import io.novafoundation.nova.feature_assets.di.AssetsFeatureComponent
class CitizenshipBottomSheet : BaseBottomSheetFragment() {
+ companion object {
+ private const val KEY_REFERRER = "referrer"
+
+ fun newInstance(referrer: String? = null) = CitizenshipBottomSheet().apply {
+ arguments = Bundle().apply {
+ referrer?.let { putString(KEY_REFERRER, it) }
+ }
+ }
+ }
+
override fun createBinding() = FragmentCitizenshipBottomSheetBinding.inflate(layoutInflater)
override fun inject() {
@@ -35,6 +46,7 @@ class CitizenshipBottomSheet : BaseBottomSheetFragment
updateUiForStatus(status)
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipViewModel.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipViewModel.kt
index 00b299b..3085409 100644
--- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipViewModel.kt
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/CitizenshipViewModel.kt
@@ -208,7 +208,8 @@ class CitizenshipViewModel(
val metaAccount = selectedAccountUseCase.getSelectedMetaAccount()
val address = metaAccount.addressIn(chain) ?: return@launch
- val shareText = resourceManager.getString(R.string.citizenship_share_referral, address)
+ val deepLink = "pezkuwiwallet://pezkuwi/open/citizenship?referrer=$address"
+ val shareText = resourceManager.getString(R.string.citizenship_share_referral, deepLink, address)
_shareEvent.postValue(Event(shareText))
} catch (e: Exception) {
Log.e(TAG, "shareReferralLink failed", e)
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/PendingCitizenshipReferrer.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/PendingCitizenshipReferrer.kt
new file mode 100644
index 0000000..a4e4666
--- /dev/null
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/PendingCitizenshipReferrer.kt
@@ -0,0 +1,14 @@
+package io.novafoundation.nova.feature_assets.presentation.citizenship
+
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableSharedFlow
+
+object PendingCitizenshipReferrer {
+
+ private val _referrerEvent = MutableSharedFlow(extraBufferCapacity = 1)
+ val referrerEvent: Flow = _referrerEvent
+
+ fun emit(referrer: String) {
+ _referrerEvent.tryEmit(referrer)
+ }
+}
diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/deeplink/CitizenshipDeepLinkHandler.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/deeplink/CitizenshipDeepLinkHandler.kt
new file mode 100644
index 0000000..ad026eb
--- /dev/null
+++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/citizenship/deeplink/CitizenshipDeepLinkHandler.kt
@@ -0,0 +1,35 @@
+package io.novafoundation.nova.feature_assets.presentation.citizenship.deeplink
+
+import android.net.Uri
+import io.novafoundation.nova.common.utils.sequrity.AutomaticInteractionGate
+import io.novafoundation.nova.common.utils.sequrity.awaitInteractionAllowed
+import io.novafoundation.nova.feature_assets.presentation.citizenship.PendingCitizenshipReferrer
+import io.novafoundation.nova.feature_deep_linking.presentation.handling.CallbackEvent
+import io.novafoundation.nova.feature_deep_linking.presentation.handling.DeepLinkHandler
+import kotlinx.coroutines.flow.MutableSharedFlow
+
+class CitizenshipDeepLinkHandler(
+ private val automaticInteractionGate: AutomaticInteractionGate
+) : DeepLinkHandler {
+
+ companion object {
+ private const val PATH_PREFIX = "/open/citizenship"
+ private const val REFERRER_PARAM = "referrer"
+ }
+
+ override val callbackFlow = MutableSharedFlow()
+
+ override suspend fun matches(data: Uri): Boolean {
+ val path = data.path ?: return false
+ return path.startsWith(PATH_PREFIX)
+ }
+
+ override suspend fun handleDeepLink(data: Uri): Result = runCatching {
+ automaticInteractionGate.awaitInteractionAllowed()
+
+ val referrer = data.getQueryParameter(REFERRER_PARAM)
+ ?: throw IllegalArgumentException("Missing referrer parameter")
+
+ PendingCitizenshipReferrer.emit(referrer)
+ }
+}