package com.ted.weather.ui.activity import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.Toolbar import com.ted.weather.R import com.ted.weather.domain.commands.RequestForecastCommand import com.ted.weather.domain.model.ForecastList import com.ted.weather.extensions.DelegatesExt import com.ted.weather.ui.adapter.ForecastListAdapter import kotlinx.android.synthetic.main.activity_main.* import kotlinx.coroutines.experimental.android.UI import kotlinx.coroutines.experimental.async import org.jetbrains.anko.coroutines.experimental.bg import org.jetbrains.anko.find import org.jetbrains.anko.startActivity class MainActivity : AppCompatActivity(), ToolbarManager { val zipCode: Long by DelegatesExt.preference(this, SettingsActivity.ZIP_CODE, SettingsActivity.DEFAULT_ZIP) override val toolbar by lazy { find(R.id.toolbar) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initToolbar() forecastList.layoutManager = LinearLayoutManager(this) attachToScroll(forecastList) } override fun onResume() { super.onResume() loadForecast() } private fun loadForecast() = async(UI) { val result = bg { RequestForecastCommand(zipCode).execute() } updateUI(result.await()) } private fun updateUI(weekForecast: ForecastList) { val adapter = ForecastListAdapter(weekForecast) { startActivity(DetailActivity.ID to it.id, DetailActivity.CITY_NAME to weekForecast.city) } forecastList.adapter = adapter toolbarTitle = "${weekForecast.city} (${weekForecast.country})" } }