/
WeatherDetailsFragment.kt
68 lines (55 loc) · 2.45 KB
/
WeatherDetailsFragment.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.example.weather_details.presentation.city_weather.view
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.example.weather_details.R
import com.example.weather_details.WeatherDetailsComponentHolder
import com.example.weather_details.presentation.city_weather.WeatherListItemData
import com.example.weather_details.presentation.city_weather.presenter.WeatherDetailsPresenter
import com.example.weather_details.presentation.city_weather.view.recycler_view.WeatherListAdapter
import kotlinx.android.synthetic.main.weather_fragment.*
import moxy.MvpAppCompatFragment
import moxy.presenter.InjectPresenter
import moxy.presenter.ProvidePresenter
class WeatherDetailsFragment : MvpAppCompatFragment(), WeatherView {
@InjectPresenter
internal lateinit var presenter: WeatherDetailsPresenter
@ProvidePresenter
internal fun providePresenter(): WeatherDetailsPresenter =
WeatherDetailsComponentHolder.getComponent().weatherDetailsPresenterFactory.create(arguments.getCityName())
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.weather_fragment, container, false)
}
override fun showCityHeader(name: String) {
city_weather_header.text = name
}
override fun showCityPicture(pictureUrl: String) {
Glide.with(city_weather_city_picture.context)
.load(Uri.parse(pictureUrl))
.placeholder(R.drawable.ic_city_picture_stub)
.error(R.drawable.ic_city_picture_stub)
.into(city_weather_city_picture)
}
override fun showWeatherList(cityWeather: List<WeatherListItemData>) {
val adapter = WeatherListAdapter(cityWeather)
city_weather_recycler_temperature.adapter = adapter
adapter.notifyDataSetChanged()
}
companion object {
const val FRAGMENT_TAG = "WeatherFragment"
private const val KEY_CITY_NAME = "KeyCityName"
fun newInstance(cityName: String) = WeatherDetailsFragment().apply {
if (arguments == null) arguments = Bundle()
arguments?.putString(KEY_CITY_NAME, cityName)
}
private fun Bundle?.getCityName() =
this?.getString(KEY_CITY_NAME) ?: throw IllegalStateException("Argument $KEY_CITY_NAME is mandatory")
}
}