package com.survivingwithandroid.weather.lib.demo15.fragment;
import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.survivingwithandroid.weather.lib.WeatherClient;
import com.survivingwithandroid.weather.lib.WeatherConfig;
import com.survivingwithandroid.weather.lib.demo15.R;
import com.survivingwithandroid.weather.lib.exception.WeatherLibException;
import com.survivingwithandroid.weather.lib.exception.WeatherProviderInstantiationException;
import com.survivingwithandroid.weather.lib.model.HistoricalHourWeather;
import com.survivingwithandroid.weather.lib.model.HistoricalWeather;
import com.survivingwithandroid.weather.lib.provider.openweathermap.OpenweathermapProviderType;
import com.survivingwithandroid.weather.lib.request.WeatherRequest;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
public class HistoricalWeatherFragment extends Fragment {
private RecyclerView rv;
private WeatherClient client;
private RecyclerWeatherAdapter rwa;
public HistoricalWeatherFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WeatherClient.ClientBuilder builder = new WeatherClient.ClientBuilder();
WeatherConfig config = new WeatherConfig();
try {
client = builder.attach(getActivity())
.provider(new OpenweathermapProviderType())
.httpClient(com.survivingwithandroid.weather.lib.client.volley.WeatherClientDefault.class)
.config(config)
.build();
} catch (WeatherProviderInstantiationException wpie) {
wpie.printStackTrace();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_historical_weather, container, false);
rv = (RecyclerView) v.findViewById(R.id.weather_recycler_view);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
rwa = new RecyclerWeatherAdapter(null);
rv.setAdapter(rwa);
return v;
}
@Override
public void onStart() {
super.onStart();
Calendar c1 = Calendar.getInstance();
c1.clear();
//c1.set(2014,Calendar.JANUARY,1,0,0,0);
c1.set(2014, Calendar.JULY, 6,0,0,0);
Date d1 = c1.getTime();
Calendar c2 = Calendar.getInstance();
c2.clear();
// c2.set(2014,Calendar.JANUARY, 2,0,0,0);
c2.set(2014, Calendar.JULY, 7,0,0,0);
Date d2 = c2.getTime();
//client.getHistoricalWeather(new WeatherRequest("2885679"), d1, d2, new WeatherClient.HistoricalWeatherEventListener() {
client.getHistoricalWeather(new WeatherRequest(56.0499F, 12.7067F), d1, d2, new WeatherClient.HistoricalWeatherEventListener() {
@Override
public void onWeatherRetrieved(HistoricalWeather histWeather) {
List<HistoricalHourWeather> histData = histWeather.getHoistoricalData();
Log.d("Hist", "Data ["+histData+"] - Size ["+histData.size()+"]");
rwa.setData(histData);
rwa.notifyDataSetChanged();
rv.setAdapter(rwa);
}
@Override
public void onWeatherError(WeatherLibException wle) {
Toast.makeText(getActivity(), "Error parsing the response", Toast.LENGTH_SHORT).show();
wle.printStackTrace();
}
@Override
public void onConnectionError(Throwable t) {
Toast.makeText(getActivity(), "Connection error", Toast.LENGTH_SHORT).show();
}
});
}
public static class RecyclerWeatherAdapter extends RecyclerView.Adapter<RecyclerWeatherAdapter.WeatherViewHolder> {
private List<HistoricalHourWeather> histData;
private SimpleDateFormat sdf = new SimpleDateFormat("EEE dd/MM/yyyy HH:mm");
public RecyclerWeatherAdapter(List<HistoricalHourWeather> histData) {
this.histData = histData;
}
@Override
public void onBindViewHolder(WeatherViewHolder weatherViewHolder, int i) {
HistoricalHourWeather hhw = histData.get(i);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(hhw.timestamp);
String d = sdf.format(c.getTime());
weatherViewHolder.tvDate.setText(d);
weatherViewHolder.tvMinTemp.setText(String.valueOf(hhw.weather.temperature.getMinTemp()));
weatherViewHolder.tvMaxTemp.setText(String.valueOf(hhw.weather.temperature.getMaxTemp()));
}
@Override
public WeatherViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.hist_row, null);
WeatherViewHolder wvh = new WeatherViewHolder(v);
return wvh;
}
public static class WeatherViewHolder extends RecyclerView.ViewHolder {
protected TextView tvDate;
protected TextView tvMinTemp;
protected TextView tvMaxTemp;
public WeatherViewHolder(View v) {
super(v);
this.tvDate = (TextView) v.findViewById(R.id.hist_date);
this.tvMinTemp = (TextView) v.findViewById(R.id.hist_min_temp);
this.tvMaxTemp = (TextView) v.findViewById(R.id.hist_max_temp);
}
}
@Override
public int getItemCount() {
return histData == null ? 0 : histData.size();
}
@Override
public long getItemId(int position) {
return histData == null ? 0 : histData.get(position).hashCode();
}
public void setData(List<HistoricalHourWeather> histData) {
this.histData = histData;
}
}
}