package com.silencedut.knowweather.citys.adapter;
import android.app.Activity;
import android.support.v4.util.Pair;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.TextView;
import com.silencedut.knowweather.ModelManager;
import com.silencedut.knowweather.R;
import com.silencedut.knowweather.common.Constants;
import com.silencedut.knowweather.common.adapter.BaseAdapterData;
import com.silencedut.knowweather.common.adapter.BaseRecyclerAdapter;
import com.silencedut.knowweather.common.adapter.BaseViewHolder;
import com.silencedut.knowweather.model.CityModel;
import com.silencedut.knowweather.model.WeatherModel;
import com.silencedut.knowweather.model.callbacks.ModelCallback;
import com.silencedut.knowweather.utils.Check;
import com.silencedut.router.Router;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
/**
* Created by SilenceDut on 16/10/29.
*/
public class HeaderHolder extends BaseViewHolder<HeaderData> implements ModelCallback.LocationResult {
@BindView(R.id.tv_located_city)
TextView mTvLocatedCity;
@BindView(R.id.recyclerView)
RecyclerView mRecyclerView;
private boolean mLocationSucceeded;
private CityModel mCityModel;
private WeatherModel mWeatherModel;
private BaseRecyclerAdapter mHotCityAdapter;
@Override
public void initBeforeView() {
super.initBeforeView();
mCityModel = ModelManager.getModel(CityModel.class);
mWeatherModel = ModelManager.getModel(WeatherModel.class);
}
public HeaderHolder(View itemView, BaseRecyclerAdapter baseRecyclerAdapter) {
super(itemView, baseRecyclerAdapter);
Router.instance().register(this);
}
@Override
public void updateItem(HeaderData data, int position) {
if (Check.isNull(data)) {
return;
}
mHotCityAdapter.clear();
List<HotCity> hotCities = new ArrayList<>();
for (Pair<String, String> city : data.getCities()) {
hotCities.add(new HotCity(city.first, city.second));
}
mHotCityAdapter.registerHolder(HotCityHolder.class, hotCities);
}
@Override
public int getContentViewId() {
return R.layout.item_city_select_header;
}
@Override
public void initViews() {
mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
mHotCityAdapter = new BaseRecyclerAdapter(getContext());
mRecyclerView.setAdapter(mHotCityAdapter);
String locationName = mCityModel.locationCityName();
showLocation(!locationName.equals(Constants.DEFAULT_STR));
}
@Override
public void onLocationComplete(String cityId, boolean success) {
showLocation(success);
}
private void showLocation(boolean locationSuccess) {
mLocationSucceeded = locationSuccess;
if (locationSuccess) {
mTvLocatedCity.setText(mCityModel.locationCityName());
} else {
mTvLocatedCity.setText(R.string.located_failed);
}
}
@OnClick(R.id.location_layout)
void locate() {
if (mLocationSucceeded) {
mWeatherModel.updateWeather(mCityModel.getLocationCityId());
if (getContext() instanceof Activity) {
((Activity) getContext()).finish();
}
} else {
mCityModel.startLocation();
mTvLocatedCity.setText(R.string.locating);
}
}
static final class HotCity implements BaseAdapterData {
String mCityName;
String mCityId;
HotCity(String cityName, String cityId) {
mCityName = cityName;
mCityId = cityId;
}
@Override
public int getItemViewType() {
return R.layout.item_hot_city;
}
}
public static final class HotCityHolder extends BaseViewHolder<HotCity> {
@BindView(R.id.tv_hot_city_name)
TextView mTvHotCityName;
HotCity mHotCity;
public HotCityHolder(View itemView, BaseRecyclerAdapter baseRecyclerAdapter) {
super(itemView, baseRecyclerAdapter);
}
@Override
public void updateItem(HotCity data, int position) {
mTvHotCityName.setText(data.mCityName);
mHotCity = data;
}
@Override
public int getContentViewId() {
return R.layout.item_hot_city;
}
@OnClick(R.id.tv_hot_city_name)
void navigationWeather() {
ModelManager.getModel(WeatherModel.class).updateWeather(mHotCity.mCityId);
if (getContext() instanceof Activity) {
((Activity) getContext()).finish();
}
}
}
}