MainActivity.kt 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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.LinearLayoutManager
  5. import android.support.v7.widget.Toolbar
  6. import com.ted.weather.R
  7. import com.ted.weather.domain.commands.RequestForecastCommand
  8. import com.ted.weather.domain.model.ForecastList
  9. import com.ted.weather.extensions.DelegatesExt
  10. import com.ted.weather.ui.adapter.ForecastListAdapter
  11. import kotlinx.android.synthetic.main.activity_main.*
  12. import kotlinx.coroutines.experimental.android.UI
  13. import kotlinx.coroutines.experimental.async
  14. import org.jetbrains.anko.coroutines.experimental.bg
  15. import org.jetbrains.anko.find
  16. import org.jetbrains.anko.startActivity
  17. class MainActivity : AppCompatActivity(), ToolbarManager {
  18. val zipCode: Long by DelegatesExt.preference(this, SettingsActivity.ZIP_CODE,
  19. SettingsActivity.DEFAULT_ZIP)
  20. override val toolbar by lazy { find<Toolbar>(R.id.toolbar) }
  21. override fun onCreate(savedInstanceState: Bundle?) {
  22. super.onCreate(savedInstanceState)
  23. setContentView(R.layout.activity_main)
  24. initToolbar()
  25. forecastList.layoutManager = LinearLayoutManager(this)
  26. attachToScroll(forecastList)
  27. }
  28. override fun onResume() {
  29. super.onResume()
  30. loadForecast()
  31. }
  32. private fun loadForecast() = async(UI) {
  33. val result = bg { RequestForecastCommand(zipCode).execute() }
  34. updateUI(result.await())
  35. }
  36. private fun updateUI(weekForecast: ForecastList) {
  37. val adapter = ForecastListAdapter(weekForecast) {
  38. startActivity<DetailActivity>(DetailActivity.ID to it.id,
  39. DetailActivity.CITY_NAME to weekForecast.city)
  40. }
  41. forecastList.adapter = adapter
  42. toolbarTitle = "${weekForecast.city} (${weekForecast.country})"
  43. }
  44. }