4 Commits

Author SHA1 Message Date
pezkuwichain c4fe2df923 fix(build): declare resource-task deps for google-services bind task
bindDevelopGithubGoogleServicesToRelease writes into src/develop, which
generate/mergeDevelopResources read — Gradle 8.9 fails on the implicit
dependency. Add generate/mergeResources to the bind task's dependents
(null-safe via findByName).
2026-06-13 09:12:46 -07:00
pezkuwichain 4361230c47 fix(build): bind production google-services to develop variant
develop now uses the base io.pezkuwichain.wallet applicationId, whose
google-services client is in the production google-services.json (the DEV
google-services.json only has a .debug client). Extend the release-binding
task to copy src/release/google-services.json into src/develop so
processDevelopGoogleServices finds a matching client.
2026-06-13 08:13:22 -07:00
pezkuwichain 84978e147e fix(build): develop variant uses base applicationId io.pezkuwichain.wallet
The develop build type appended a '.dev' applicationIdSuffix, producing
io.pezkuwichain.wallet.dev, which has no matching client in the
google-services.json and broke every PR/develop build at
processDevelopGoogleServices. Drop the suffix so develop uses the base
io.pezkuwichain.wallet identity (keeps the -develop versionName suffix).
2026-06-13 07:29:57 -07:00
pezkuwichain 959bfa6b0d feat(assets): PEZ-20 badge on PEZ & USDT in token list
Show a small PEZ-20 pill next to PEZ and USDT (wUSDT) token rows in the
main balance list. These are fungible assets on Pezkuwi Asset Hub — the
PEZ-20 token standard.

- item_token_asset.xml: add itemTokenAssetPez20 chip (gone by default).
- TokenAssetViewHolder: show it when chainId == Pezkuwi Asset Hub and the
  symbol is PEZ/USDT/wUSDT.

Additive only; native HEZ and other chains are unbadged. Consistent with
the pex and Telegram mini app badges.
2026-06-12 23:36:15 -07:00
3 changed files with 43 additions and 5 deletions
+13 -4
View File
@@ -80,7 +80,8 @@ android {
signingConfig signingConfigs.dev signingConfig signingConfigs.dev
matchingFallbacks = ['debug'] matchingFallbacks = ['debug']
versionNameSuffix '-develop' versionNameSuffix '-develop'
applicationIdSuffix '.dev' // Use the base applicationId (io.pezkuwichain.wallet) — no ".dev" suffix —
// so it matches the registered google-services client.
//Init firebase //Init firebase
def localReleaseNotes = releaseNotes() def localReleaseNotes = releaseNotes()
def localFirebaseGroup = firebaseGroup() def localFirebaseGroup = firebaseGroup()
@@ -120,7 +121,10 @@ android {
applicationVariants.all { variant -> applicationVariants.all { variant ->
String name = variant.buildType.name String name = variant.buildType.name
if (name != "release" && name.startsWith("release")) { // 'develop' now shares the base io.pezkuwichain.wallet applicationId, whose
// google-services client lives in the production google-services.json — so bind
// it for develop too (the DEV google-services.json has no matching client).
if ((name != "release" && name.startsWith("release")) || name == "develop") {
createBindReleaseFileTask(variant.buildType.name) createBindReleaseFileTask(variant.buildType.name)
} }
} }
@@ -158,11 +162,16 @@ void createBindReleaseFileTask(String destination) {
"merge${capitalizedDestination}JniLibFolders".toString(), "merge${capitalizedDestination}JniLibFolders".toString(),
"merge${capitalizedDestination}StartupProfile".toString(), "merge${capitalizedDestination}StartupProfile".toString(),
"merge${capitalizedDestination}Shaders".toString(), "merge${capitalizedDestination}Shaders".toString(),
"merge${capitalizedDestination}ArtProfile".toString() "merge${capitalizedDestination}ArtProfile".toString(),
// The bind task writes into src/<dest>, which resource tasks read —
// declare the dependency so Gradle 8.9 doesn't fail on implicit ordering.
"generate${capitalizedDestination}Resources".toString(),
"merge${capitalizedDestination}Resources".toString()
] ]
dependentTasks.forEach { dependentTasks.forEach {
tasks.getByName(it).dependsOn(task) def t = tasks.findByName(it)
if (t != null) t.dependsOn(task)
} }
} }
} }
@@ -1,5 +1,6 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common.holders package io.novafoundation.nova.feature_assets.presentation.balance.common.holders
import androidx.core.view.isVisible
import coil.ImageLoader import coil.ImageLoader
import io.novafoundation.nova.common.list.GroupedListHolder import io.novafoundation.nova.common.list.GroupedListHolder
import io.novafoundation.nova.common.presentation.masking.setMaskableText import io.novafoundation.nova.common.presentation.masking.setMaskableText
@@ -13,6 +14,11 @@ import io.novafoundation.nova.feature_assets.presentation.balance.list.model.ite
import io.novafoundation.nova.feature_assets.presentation.model.AssetModel import io.novafoundation.nova.feature_assets.presentation.model.AssetModel
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableFiat import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableFiat
import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableToken import io.novafoundation.nova.feature_wallet_api.presentation.model.maskableToken
import io.novafoundation.nova.runtime.ext.Geneses
import io.novafoundation.nova.runtime.multiNetwork.chain.model.Chain
// Fungible assets on Pezkuwi Asset Hub follow the PEZ-20 token standard.
private val PEZ20_SYMBOLS = setOf("PEZ", "USDT", "wUSDT")
class TokenAssetViewHolder( class TokenAssetViewHolder(
private val binder: ItemTokenAssetBinding, private val binder: ItemTokenAssetBinding,
@@ -31,7 +37,12 @@ class TokenAssetViewHolder(
bindTotal(asset) bindTotal(asset)
binder.itemTokenAssetToken.text = asset.token.configuration.symbol.value val config = asset.token.configuration
binder.itemTokenAssetToken.text = config.symbol.value
val isPez20 = config.chainId == Chain.Geneses.PEZKUWI_ASSET_HUB && config.symbol.value in PEZ20_SYMBOLS
binder.itemTokenAssetPez20.isVisible = isPez20
if (isPez20) binder.itemTokenAssetPez20.text = "PEZ-20"
setOnClickListener { itemHandler.assetClicked(asset.token.configuration) } setOnClickListener { itemHandler.assetClicked(asset.token.configuration) }
} }
@@ -32,6 +32,24 @@
app:layout_constraintVertical_chainStyle="packed" app:layout_constraintVertical_chainStyle="packed"
tools:text="DOT" /> tools:text="DOT" />
<TextView
android:id="@+id/itemTokenAssetPez20"
style="@style/TextAppearance.NovaFoundation.Regular.Caption1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:background="@drawable/bg_chip_6"
android:paddingHorizontal="6dp"
android:paddingVertical="1dp"
android:textColor="@color/chip_text"
android:textSize="9sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/itemTokenAssetToken"
app:layout_constraintStart_toEndOf="@+id/itemTokenAssetToken"
app:layout_constraintTop_toTopOf="@+id/itemTokenAssetToken"
tools:text="PEZ-20"
tools:visibility="visible" />
<LinearLayout <LinearLayout
android:id="@+id/itemTokenAssetRateContainer" android:id="@+id/itemTokenAssetRateContainer"
android:layout_width="wrap_content" android:layout_width="wrap_content"