Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.ahmadrd.cryptotrack.ui.detail
- import android.os.Bundle
- import android.util.Log
- import android.view.View
- import android.widget.Toast
- import androidx.activity.enableEdgeToEdge
- import androidx.activity.viewModels
- import androidx.appcompat.app.AppCompatActivity
- import androidx.core.view.ViewCompat
- import androidx.core.view.WindowInsetsCompat
- import androidx.lifecycle.ViewModelProvider
- import com.ahmadrd.cryptotrack.R
- import com.ahmadrd.cryptotrack.ui.utils.Result
- import com.ahmadrd.cryptotrack.databinding.ActivityDetailBinding
- import com.ahmadrd.cryptotrack.di.Injection
- import com.ahmadrd.cryptotrack.ui.home.HomeViewModel
- import com.ahmadrd.cryptotrack.ui.utils.ChartFormatter
- import com.ahmadrd.cryptotrack.ui.utils.PriceFormatter
- import com.ahmadrd.cryptotrack.ui.utils.ViewModelFactory
- import com.bumptech.glide.Glide
- class DetailActivity : AppCompatActivity() {
- companion object {
- const val EXTRA_ID = "extra_id"
- }
- private lateinit var binding: ActivityDetailBinding
- private val repository = Injection.provideCoinRepository()
- private val factory = ViewModelFactory(repository)
- private val viewModel: DetailViewModel by viewModels { factory }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- binding = ActivityDetailBinding.inflate(layoutInflater)
- setContentView(binding.root)
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.detail)) { v, insets ->
- val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
- insets
- }
- // viewModel = ViewModelProvider(this, factory)[HomeViewModel::class.java]
- val dataCoins = intent.getStringExtra(EXTRA_ID)
- if (dataCoins != null) {
- viewModel.getDetailCoins(dataCoins)
- observeViewModel()
- }
- }
- private fun observeViewModel() {
- viewModel.detailCoins.observe(this) { result ->
- when (result) {
- is Result.Loading -> showLoading(true)
- is Result.Success -> {
- showLoading(false)
- Glide.with(this)
- .load(result.data.image?.thumb)
- .error(R.drawable.baseline_broken_image_24)
- .into(binding.imgCoinLogo)
- with(binding) {
- tvCoinName.text = result.data.name
- // tvPrice.text = "$${result.data.marketData?.currentPrice?.usd ?: "N/A"}"
- // tvPriceChange.text = "${result.data.marketData?.priceChangePercentage24hInCurrency?.usd ?: "N/A"}%"
- tvPrice.text = PriceFormatter.formatUSD(result.data.marketData?.currentPrice?.usd ?: 0.0)
- tvPriceChange.text = getString(
- R.string.price_change_format,
- result.data.marketData?.priceChangePercentage24hInCurrency?.usd
- ?: getString(R.string.not_available)
- )
- val priceList = result.data.marketData?.sparkline?.price
- Log.d("SparklineCheck", "Price list size: ${priceList?.size}")
- if (!priceList.isNullOrEmpty()) {
- ChartFormatter.setupSparklineChart(
- chartView,
- priceList,
- result.data.marketData.priceChangePercentage24h
- )
- } else {
- chartView.clear()
- }
- tvMarketCap.text = getString(
- R.string.market_cap_format,
- result.data.marketData?.marketCap?.usd
- ?: getString(R.string.not_available)
- )
- tvVolume.text = getString(
- R.string.volume_format,
- result.data.marketData?.totalVolume?.usd
- ?: getString(R.string.not_available)
- )
- tvHighLow.text = getString(
- R.string.high_low_format,
- result.data.marketData?.high24h?.usd
- ?: getString(R.string.not_available),
- result.data.marketData?.low24h?.usd
- ?: getString(R.string.not_available)
- )
- tvSupply.text = getString(
- R.string.total_supply_format,
- result.data.marketData?.totalSupply
- ?: getString(R.string.not_available),
- result.data.symbol?.uppercase()
- )
- // tvMarketCap.text = "Market Cap: $${result.data.marketData?.marketCap?.usd ?: "N/A"}"
- // tvVolume.text = "24h Volume: $${result.data.marketData?.totalVolume?.usd ?: "N/A"}"
- // tvHighLow.text = "24h High / Low: $${result.data.marketData?.high24h?.usd ?: "N/A"} / $${result.data.marketData?.low24h?.usd ?: "N/A"}"
- // tvSupply.text = "Total Supply: ${result.data.marketData?.totalSupply ?: "N/A"} ${result.data.symbol?.uppercase()}"
- val desc = result.data.description?.en
- if (desc != null && desc != "") {
- tvDescription.text = desc
- } else {
- tvDescription.text = getString(R.string.no_desc)
- }
- }
- }
- is Result.Error -> {
- showError(result.error)
- }
- }
- }
- }
- private fun showLoading(isLoading: Boolean) {
- binding.shimmerFrameDetail.visibility = if (isLoading) View.VISIBLE else View.GONE
- binding.contentLayout.visibility = if (isLoading) View.GONE else View.VISIBLE
- }
- private fun showError(isError: String) {
- Toast.makeText(this, isError, Toast.LENGTH_SHORT).show()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement