DetailActivity.kt 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.ted.weather.ui.activity
  2. import android.os.Bundle
  3. import android.support.v7.app.AppCompatActivity
  4. import android.support.v7.widget.Toolbar
  5. import android.widget.TextView
  6. import com.squareup.picasso.Picasso
  7. import com.ted.weather.R
  8. import com.ted.weather.domain.commands.RequestDayForecastCommand
  9. import com.ted.weather.domain.model.Forecast
  10. import com.ted.weather.extensions.color
  11. import com.ted.weather.extensions.textColor
  12. import com.ted.weather.extensions.toDateString
  13. import kotlinx.android.synthetic.main.activity_detail.*
  14. import kotlinx.coroutines.experimental.android.UI
  15. import kotlinx.coroutines.experimental.async
  16. import org.jetbrains.anko.coroutines.experimental.bg
  17. import org.jetbrains.anko.ctx
  18. import org.jetbrains.anko.find
  19. import java.text.DateFormat
  20. class DetailActivity : AppCompatActivity(), ToolbarManager {
  21. override val toolbar by lazy { find<Toolbar>(R.id.toolbar) }
  22. companion object {
  23. val ID = "DetailActivity:id"
  24. val CITY_NAME = "DetailActivity:cityName"
  25. }
  26. override fun onCreate(savedInstanceState: Bundle?) {
  27. super.onCreate(savedInstanceState)
  28. setContentView(R.layout.activity_detail)
  29. initToolbar()
  30. toolbarTitle = intent.getStringExtra(CITY_NAME)
  31. enableHomeAsUp { onBackPressed() }
  32. async(UI) {
  33. val result = bg { RequestDayForecastCommand(intent.getLongExtra(ID, -1)).execute() }
  34. bindForecast(result.await())
  35. }
  36. }
  37. private fun bindForecast(forecast: Forecast) = with(forecast) {
  38. Picasso.with(ctx).load(iconUrl).into(icon)
  39. toolbar.subtitle = date.toDateString(DateFormat.FULL)
  40. weatherDescription.text = description
  41. bindWeather(high to maxTemperature, low to minTemperature)
  42. }
  43. private fun bindWeather(vararg views: Pair<Int, TextView>) = views.forEach {
  44. it.second.text = "${it.first}º"
  45. it.second.textColor = color(when (it.first) {
  46. in -50..0 -> android.R.color.holo_red_dark
  47. in 0..15 -> android.R.color.holo_orange_dark
  48. else -> android.R.color.holo_green_dark
  49. })
  50. }
  51. }