Skip to content

Commit

Permalink
WalletDetails showing token price and genuineness #9
Browse files Browse the repository at this point in the history
  • Loading branch information
MrStahlfelge committed Feb 25, 2022
1 parent 24d0aeb commit fe0a0c6
Show file tree
Hide file tree
Showing 12 changed files with 197 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class TokenInformationDialogFragment : BottomSheetDialogFragment() {
binding.labelTokenName.text =
if (displayName.isBlank()) getString(R.string.label_unnamed_token) else displayName

binding.labelTokenName.setCompoundDrawablesWithIntrinsicBounds(
binding.labelTokenName.setCompoundDrawablesRelativeWithIntrinsicBounds(
0, 0, getGenuineDrawableId(), 0
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
package org.ergoplatform.android.tokens

import android.view.LayoutInflater
import android.view.View
import android.widget.LinearLayout
import org.ergoplatform.TokenAmount
import org.ergoplatform.android.R
import org.ergoplatform.android.databinding.EntryWalletTokenBinding
import org.ergoplatform.android.databinding.EntryWalletTokenDetailsBinding
import org.ergoplatform.android.databinding.FragmentChooseTokenDialogItemBinding
import org.ergoplatform.persistance.GENUINE_SUSPICIOUS
import org.ergoplatform.persistance.GENUINE_VERIFIED
import org.ergoplatform.persistance.TokenInformation
import org.ergoplatform.persistance.WalletToken
import org.ergoplatform.tokens.isSingularToken
import org.ergoplatform.utils.formatTokenAmounts

fun inflateAndBindTokenView(
walletToken: WalletToken,
Expand All @@ -29,18 +26,20 @@ fun inflateAndBindTokenView(
itemBinding.labelTokenName.text =
walletToken.name ?: layoutInflater.context.getString(R.string.label_unnamed_token)
itemBinding.labelTokenVal.text =
formatTokenAmounts(
TokenAmount(
walletToken.amount ?: 0,
walletToken.decimals,
)
).toStringPrettified()
}

fun FragmentChooseTokenDialogItemBinding.bind(token: WalletToken) {
labelTokenName.text = token.name ?: root.context.getString(R.string.label_unnamed_token)
labelTokenId.text = token.tokenId
}

fun TokenInformation.getGenuineDrawableId(): Int {
fun TokenInformation.getGenuineDrawableId() = getGenuineDrawableId(genuineFlag)

fun getGenuineDrawableId(genuineFlag: Int): Int {
return when (genuineFlag) {
GENUINE_VERIFIED -> R.drawable.ic_verified_24
GENUINE_SUSPICIOUS -> R.drawable.ic_suspicious_24
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.ergoplatform.android.tokens

import org.ergoplatform.android.databinding.EntryWalletTokenDetailsBinding
import org.ergoplatform.android.ui.AndroidStringProvider
import org.ergoplatform.android.ui.setTextAndVisibility
import org.ergoplatform.persistance.WalletToken
import org.ergoplatform.uilogic.StringProvider
import org.ergoplatform.uilogic.tokens.WalletEntryViewUiLogic

class WalletEntryView(val binding: EntryWalletTokenDetailsBinding, walletToken: WalletToken) :
WalletEntryViewUiLogic(walletToken) {
override val texts: StringProvider
get() = AndroidStringProvider(binding.root.context)

override fun setDisplayedTokenName(tokenName: String) {
binding.labelTokenName.text = tokenName
}

override fun setGenuineFlag(genuineFlag: Int) {
binding.labelTokenName.setCompoundDrawablesRelativeWithIntrinsicBounds(
0,
0,
getGenuineDrawableId(genuineFlag),
0
)
}

override fun setDisplayedTokenId(tokenId: String?) {
binding.labelTokenId.setTextAndVisibility(tokenId)
}

override fun setDisplayedBalance(value: String?) {
binding.labelTokenVal.setTextAndVisibility(value)
}

override fun setDisplayedPrice(price: String?) {
binding.labelBalanceValue.setTextAndVisibility(price)
}

}
7 changes: 7 additions & 0 deletions android/src/main/java/org/ergoplatform/android/ui/UiUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -154,4 +154,11 @@ fun BottomSheetDialogFragment.expandBottomSheetOnShow() {

fun postDelayed(delayMs: Long, r: Runnable) {
Handler(Looper.getMainLooper()).postDelayed(r, delayMs)
}

fun TextView.setTextAndVisibility(newText: String?) {
newText?.let {
visibility = View.VISIBLE
text = it
} ?: run { visibility = View.GONE }
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import org.ergoplatform.android.Preferences
import org.ergoplatform.android.R
import org.ergoplatform.android.databinding.EntryWalletTokenDetailsBinding
import org.ergoplatform.android.databinding.FragmentWalletDetailsBinding
import org.ergoplatform.android.tokens.WalletDetailsView
import org.ergoplatform.android.tokens.WalletEntryView
import org.ergoplatform.android.ui.AndroidStringProvider
import org.ergoplatform.android.ui.navigateSafe
import org.ergoplatform.android.ui.openUrlWithBrowser
Expand Down Expand Up @@ -216,8 +216,8 @@ class WalletDetailsFragment : Fragment(), AddressChooserCallback {
this,
true
)
val walletDetailsView = WalletDetailsView(itemBinding)
walletDetailsView.bind(token)
val walletDetailsView = WalletEntryView(itemBinding, token)
walletDetailsView.bind()
tokensViewList.add(walletDetailsView)

walletDetailsView.binding.root.setOnClickListener {
Expand Down Expand Up @@ -248,7 +248,7 @@ class WalletDetailsFragment : Fragment(), AddressChooserCallback {
}

// list of token views currently in view
private val tokensViewList = ArrayList<WalletDetailsView>()
private val tokensViewList = ArrayList<WalletEntryView>()

private fun onTokenInfoChanged(tokenInfoHashMap: HashMap<String, TokenInformation>) {
// token info changed, or we have the last call from another view instance
Expand Down
77 changes: 50 additions & 27 deletions android/src/main/res/layout/entry_wallet_token_details.xml
Original file line number Diff line number Diff line change
@@ -1,52 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?selectableItemBackground"
android:orientation="vertical"
android:minHeight="55dp"
android:paddingVertical="5dp"
tools:showIn="@layout/fragment_wallet_details">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
android:orientation="vertical"
tools:ignore="UselessParent">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">

<TextView
android:id="@+id/label_token_val"
style="@style/TextAppearance.App.Body1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="6dp"
android:maxLines="1"
android:textStyle="bold"
tools:text="1230000" />

<TextView
android:id="@+id/label_token_name"
style="@style/TextAppearance.App.Body1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="@dimen/small_padding"
android:ellipsize="end"
android:maxLines="1"
app:drawableTint="@color/primary"
tools:drawableEnd="@drawable/ic_verified_24"
tools:text="Very long NFT name here" />

</LinearLayout>

<TextView
android:id="@+id/label_token_val"
style="@style/TextAppearance.App.Body1"
android:id="@+id/label_token_id"
style="@style/TextAppearance.App.Body2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginHorizontal="6dp"
android:layout_marginHorizontal="@dimen/half_horizontal_margin"
android:ellipsize="middle"
android:maxLines="1"
android:textStyle="bold"
tools:text="1230000" />
android:textColor="@color/darkgrey"
tools:text="ba5856162d6342d2a0072f464a5a8b62b4ac4dd77195bec18c6bf268c2def831" />

<TextView
android:id="@+id/label_token_name"
android:id="@+id/label_balance_value"
style="@style/TextAppearance.App.Body1"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:ellipsize="end"
android:maxLines="1"
tools:text="Very long NFT name here" />
android:gravity="center"
android:maxLines="5"
android:textColor="@color/lightgrey"
tools:text="904.2 ERG" />

</LinearLayout>

<TextView
android:id="@+id/label_token_id"
style="@style/TextAppearance.App.Body2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/half_horizontal_margin"
android:ellipsize="middle"
android:gravity="center"
android:maxLines="1"
android:textColor="@color/darkgrey"
tools:text="ba5856162d6342d2a0072f464a5a8b62b4ac4dd77195bec18c6bf268c2def831" />


</LinearLayout>
</FrameLayout>
2 changes: 1 addition & 1 deletion android/src/main/res/layout/fragment_token_information.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
android:layout_gravity="center"
android:ellipsize="end"
android:gravity="center"
android:maxLines="5"
android:maxLines="1"
android:textColor="@color/lightgrey"
tools:text="904.2 ERG" />

Expand Down
23 changes: 22 additions & 1 deletion common-jvm/src/main/java/org/ergoplatform/TokenAmount.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.ergoplatform

import org.ergoplatform.persistance.WalletToken
import org.ergoplatform.utils.formatDoubleWithPrettyReduction
import java.math.BigDecimal
import java.math.RoundingMode
import java.text.NumberFormat
Expand Down Expand Up @@ -43,6 +45,20 @@ class TokenAmount(val rawValue: Long, val decimals: Int) {
return numberInstance.format(toBigDecimal())
}

/**
* Formats token (asset) amounts, always formatted US-style.
* For larger amounts, 1,120.00 becomes 1.1K, useful for displaying with less space
*/
fun toStringPrettified(): String {
val doubleValue: Double = toDouble()
val preciseString = toString()
return if (doubleValue < 1000 && preciseString.length < 8 || doubleValue < 1) {
toStringUsFormatted(false)
} else {
formatDoubleWithPrettyReduction(doubleValue)
}
}

fun toBigDecimal() = rawValue.toBigDecimal().movePointLeft(decimals)

fun toDouble(): Double {
Expand All @@ -60,4 +76,9 @@ fun String.toTokenAmount(decimals: Int): TokenAmount? {
} catch (t: Throwable) {
return null
}
}
}

fun WalletToken.toTokenAmount(): TokenAmount = TokenAmount(
amount ?: 0,
decimals
)
Loading

0 comments on commit fe0a0c6

Please sign in to comment.