From 533aa9e831eb680958d0c7d99dbf239ea0f6389c Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Wed, 18 Feb 2026 06:52:01 +0300 Subject: [PATCH] feat: replace dashboard image with Welati counter (Hejmara Kurd Le Cihane) Remove telegram_welcome image from dashboard card, add live Welati citizen count fetched from kurds-counter API endpoint. Shows formatted count with "Hejmara Kurd Le Cihane" label in green. --- common/src/main/res/values/strings.xml | 1 + .../data/model/PezkuwiDashboardData.kt | 3 +- .../repository/PezkuwiDashboardRepository.kt | 19 +++++++++++- .../balance/list/BalanceListViewModel.kt | 4 ++- .../list/model/PezkuwiDashboardModel.kt | 3 +- .../list/view/PezkuwiDashboardAdapter.kt | 1 + .../res/layout/item_pezkuwi_dashboard.xml | 31 +++++++++++++------ 7 files changed, 49 insertions(+), 13 deletions(-) diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index df93e79..bb61a5a 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -2766,4 +2766,5 @@ Trust Score Apply & Actions Use our Telegram MiniApp for Digital Kurdistan citizenship services.\n\nTo earn PEZ rewards, you must hold a Welatî ticket and stake at least 10 HEZ.\n\nNon-citizens can only benefit from HEZ rewards. + Hejmara Kurd Le Cihane diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/model/PezkuwiDashboardData.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/model/PezkuwiDashboardData.kt index ca64737..8718e05 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/model/PezkuwiDashboardData.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/model/PezkuwiDashboardData.kt @@ -4,5 +4,6 @@ import java.math.BigInteger data class PezkuwiDashboardData( val roles: List, - val trustScore: BigInteger + val trustScore: BigInteger, + val welatiCount: Int ) diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/repository/PezkuwiDashboardRepository.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/repository/PezkuwiDashboardRepository.kt index 8eabef3..919317e 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/repository/PezkuwiDashboardRepository.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/data/repository/PezkuwiDashboardRepository.kt @@ -9,24 +9,41 @@ import io.novafoundation.nova.runtime.storage.source.StorageDataSource import io.novasama.substrate_sdk_android.runtime.AccountId import io.novasama.substrate_sdk_android.runtime.metadata.moduleOrNull import io.novasama.substrate_sdk_android.runtime.metadata.storage +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.json.JSONObject import java.math.BigInteger +import java.net.URL class PezkuwiDashboardRepository( private val remoteStorageDataSource: StorageDataSource ) { + companion object { + private const val WELATI_COUNTER_URL = "https://subquery.pezkuwichain.io/kurds" + } + suspend fun getDashboard(accountId: AccountId): PezkuwiDashboardData { val chainId = ChainGeneses.PEZKUWI_PEOPLE val roles = queryRoles(chainId, accountId) val trustScore = queryTrustScore(chainId, accountId) + val welatiCount = fetchWelatiCount() return PezkuwiDashboardData( roles = roles.ifEmpty { listOf("Non-Citizen") }, - trustScore = trustScore + trustScore = trustScore, + welatiCount = welatiCount ) } + private suspend fun fetchWelatiCount(): Int = withContext(Dispatchers.IO) { + runCatching { + val response = URL(WELATI_COUNTER_URL).readText() + JSONObject(response).getInt("count") + }.getOrDefault(0) + } + private suspend fun queryRoles(chainId: String, accountId: AccountId): List = runCatching { remoteStorageDataSource.query(chainId) { val tikiModule = runtime.metadata.moduleOrNull("Tiki") ?: return@query emptyList() 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 6343845..b28055b 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 @@ -64,6 +64,7 @@ import io.novafoundation.nova.feature_wallet_api.presentation.model.FractionPart import io.novafoundation.nova.feature_wallet_connect_api.domain.sessions.WalletConnectSessionsUseCase import io.novafoundation.nova.feature_wallet_connect_api.presentation.mapNumberOfActiveSessionsToUi import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain +import java.text.NumberFormat import kotlinx.coroutines.async import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.debounce @@ -228,7 +229,8 @@ class BalanceListViewModel( .map { data -> PezkuwiDashboardModel( roles = data.roles, - trustScore = data.trustScore.toString() + trustScore = data.trustScore.toString(), + welatiCount = NumberFormat.getIntegerInstance().format(data.welatiCount) ) } .getOrNull() diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/model/PezkuwiDashboardModel.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/model/PezkuwiDashboardModel.kt index 979426e..a312fb3 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/model/PezkuwiDashboardModel.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/model/PezkuwiDashboardModel.kt @@ -2,5 +2,6 @@ package io.novafoundation.nova.feature_assets.presentation.balance.list.model data class PezkuwiDashboardModel( val roles: List, - val trustScore: String + val trustScore: String, + val welatiCount: String ) diff --git a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/view/PezkuwiDashboardAdapter.kt b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/view/PezkuwiDashboardAdapter.kt index 79bd358..512f04f 100644 --- a/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/view/PezkuwiDashboardAdapter.kt +++ b/feature-assets/src/main/java/io/novafoundation/nova/feature_assets/presentation/balance/list/view/PezkuwiDashboardAdapter.kt @@ -58,6 +58,7 @@ class PezkuwiDashboardHolder( fun bind(model: PezkuwiDashboardModel) { bindRoles(model.roles) binder.pezkuwiDashboardTrustValue.text = model.trustScore + binder.pezkuwiDashboardWelatiCount.text = model.welatiCount } private fun bindRoles(roles: List) { diff --git a/feature-assets/src/main/res/layout/item_pezkuwi_dashboard.xml b/feature-assets/src/main/res/layout/item_pezkuwi_dashboard.xml index 80966e0..7ac92be 100644 --- a/feature-assets/src/main/res/layout/item_pezkuwi_dashboard.xml +++ b/feature-assets/src/main/res/layout/item_pezkuwi_dashboard.xml @@ -72,15 +72,28 @@ - + + + + + +