Advertisement
eveeeeef21

DetailActivity Before Adding TAB

May 8th, 2025
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 6.40 KB | Source Code | 0 0
  1. package com.ahmadrd.cryptotrack.ui.detail
  2.  
  3. import android.os.Bundle
  4. import android.util.Log
  5. import android.view.View
  6. import android.widget.Toast
  7. import androidx.activity.enableEdgeToEdge
  8. import androidx.activity.viewModels
  9. import androidx.appcompat.app.AppCompatActivity
  10. import androidx.core.view.ViewCompat
  11. import androidx.core.view.WindowInsetsCompat
  12. import androidx.lifecycle.ViewModelProvider
  13. import com.ahmadrd.cryptotrack.R
  14. import com.ahmadrd.cryptotrack.ui.utils.Result
  15. import com.ahmadrd.cryptotrack.databinding.ActivityDetailBinding
  16. import com.ahmadrd.cryptotrack.di.Injection
  17. import com.ahmadrd.cryptotrack.ui.home.HomeViewModel
  18. import com.ahmadrd.cryptotrack.ui.utils.ChartFormatter
  19. import com.ahmadrd.cryptotrack.ui.utils.PriceFormatter
  20. import com.ahmadrd.cryptotrack.ui.utils.ViewModelFactory
  21. import com.bumptech.glide.Glide
  22.  
  23. class DetailActivity : AppCompatActivity() {
  24.  
  25.     companion object {
  26.         const val EXTRA_ID = "extra_id"
  27.     }
  28.  
  29.     private lateinit var binding: ActivityDetailBinding
  30.     private val repository = Injection.provideCoinRepository()
  31.     private val factory = ViewModelFactory(repository)
  32.     private val viewModel: DetailViewModel by viewModels { factory }
  33.  
  34.     override fun onCreate(savedInstanceState: Bundle?) {
  35.         super.onCreate(savedInstanceState)
  36.         enableEdgeToEdge()
  37.         binding = ActivityDetailBinding.inflate(layoutInflater)
  38.         setContentView(binding.root)
  39.         ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.detail)) { v, insets ->
  40.             val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
  41.             v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
  42.             insets
  43.         }
  44. //        viewModel = ViewModelProvider(this, factory)[HomeViewModel::class.java]
  45.  
  46.         val dataCoins = intent.getStringExtra(EXTRA_ID)
  47.         if (dataCoins != null) {
  48.             viewModel.getDetailCoins(dataCoins)
  49.             observeViewModel()
  50.         }
  51.     }
  52.  
  53.     private fun observeViewModel() {
  54.         viewModel.detailCoins.observe(this) { result ->
  55.             when (result) {
  56.                 is Result.Loading -> showLoading(true)
  57.                 is Result.Success -> {
  58.                     showLoading(false)
  59.                     Glide.with(this)
  60.                         .load(result.data.image?.thumb)
  61.                         .error(R.drawable.baseline_broken_image_24)
  62.                         .into(binding.imgCoinLogo)
  63.                     with(binding) {
  64.                         tvCoinName.text = result.data.name
  65. //                        tvPrice.text = "$${result.data.marketData?.currentPrice?.usd ?: "N/A"}"
  66. //                        tvPriceChange.text = "${result.data.marketData?.priceChangePercentage24hInCurrency?.usd ?: "N/A"}%"
  67.                         tvPrice.text = PriceFormatter.formatUSD(result.data.marketData?.currentPrice?.usd ?: 0.0)
  68.                         tvPriceChange.text = getString(
  69.                             R.string.price_change_format,
  70.                             result.data.marketData?.priceChangePercentage24hInCurrency?.usd
  71.                                 ?: getString(R.string.not_available)
  72.                         )
  73.  
  74.                         val priceList = result.data.marketData?.sparkline?.price
  75.                         Log.d("SparklineCheck", "Price list size: ${priceList?.size}")
  76.                         if (!priceList.isNullOrEmpty()) {
  77.                             ChartFormatter.setupSparklineChart(
  78.                                 chartView,
  79.                                 priceList,
  80.                                 result.data.marketData.priceChangePercentage24h
  81.                             )
  82.                         } else {
  83.                             chartView.clear()
  84.                         }
  85.  
  86.                         tvMarketCap.text = getString(
  87.                             R.string.market_cap_format,
  88.                             result.data.marketData?.marketCap?.usd
  89.                                 ?: getString(R.string.not_available)
  90.                         )
  91.                         tvVolume.text = getString(
  92.                             R.string.volume_format,
  93.                             result.data.marketData?.totalVolume?.usd
  94.                                 ?: getString(R.string.not_available)
  95.                         )
  96.                         tvHighLow.text = getString(
  97.                             R.string.high_low_format,
  98.                             result.data.marketData?.high24h?.usd
  99.                                 ?: getString(R.string.not_available),
  100.                             result.data.marketData?.low24h?.usd
  101.                                 ?: getString(R.string.not_available)
  102.                         )
  103.                         tvSupply.text = getString(
  104.                             R.string.total_supply_format,
  105.                             result.data.marketData?.totalSupply
  106.                                 ?: getString(R.string.not_available),
  107.                             result.data.symbol?.uppercase()
  108.                         )
  109.  
  110. //                        tvMarketCap.text = "Market Cap: $${result.data.marketData?.marketCap?.usd ?: "N/A"}"
  111. //                        tvVolume.text = "24h Volume: $${result.data.marketData?.totalVolume?.usd ?: "N/A"}"
  112. //                        tvHighLow.text = "24h High / Low: $${result.data.marketData?.high24h?.usd ?: "N/A"} / $${result.data.marketData?.low24h?.usd ?: "N/A"}"
  113. //                        tvSupply.text = "Total Supply: ${result.data.marketData?.totalSupply ?: "N/A"} ${result.data.symbol?.uppercase()}"
  114.  
  115.                         val desc = result.data.description?.en
  116.                         if (desc != null && desc != "") {
  117.                             tvDescription.text = desc
  118.                         } else {
  119.                             tvDescription.text = getString(R.string.no_desc)
  120.                         }
  121.                     }
  122.  
  123.                 }
  124.  
  125.                 is Result.Error -> {
  126.                     showError(result.error)
  127.                 }
  128.             }
  129.         }
  130.     }
  131.  
  132.     private fun showLoading(isLoading: Boolean) {
  133.         binding.shimmerFrameDetail.visibility = if (isLoading) View.VISIBLE else View.GONE
  134.         binding.contentLayout.visibility = if (isLoading) View.GONE else View.VISIBLE
  135.     }
  136.  
  137.     private fun showError(isError: String) {
  138.         Toast.makeText(this, isError, Toast.LENGTH_SHORT).show()
  139.     }
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement