package com.way.weather;
import java.util.ArrayList;
import java.util.Locale;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.widget.ArrayAdapter;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.way.observablescrollview.ObservableListView;
import com.way.observablescrollview.ObservableScrollViewCallbacks;
import com.way.observablescrollview.ScrollState;
import com.way.observablescrollview.ScrollUtils;
import com.way.weather.plugin.bean.AQI;
import com.way.weather.plugin.bean.Alerts;
import com.way.weather.plugin.bean.Forecast;
import com.way.weather.plugin.bean.Index;
import com.way.weather.plugin.bean.RealTime;
import com.way.weather.plugin.spider.WeatherController;
public class MainActivity extends AppCompatActivity implements ObservableScrollViewCallbacks{
private static final String[] AUDIO_LIST = { "sunny_day.mp3",
"sunny_night.mp3", "cloudy_day.mp3", "mostly_cloudy_day.mp3",
"mostly_cloudy_night.mp3", "rain_heavy.mp3", "rain_small.mp3",
"snow.mp3", "dust_day.mp3", "fog_day.mp3", "thunder_day.mp3" };
private static final String[] VIDEO_LIST = new String[] {
"sunny_day_loop_1.mp4", "sunny_night_loop_1.mp4",
"cloudy_day_loop_1.mp4", "mostly_cloudy_day_loop_1.mp4",
"mostly_cloudy_night_loop_1.mp4", "rain_heavy_loop_1.mp4",
"rain_small_loop_1.mp4", "snow_loop_1.mp4", "dust_day_loop_1.mp4",
"fog_day_loop_1.mp4", "thunder_day_loop_1.mp4" };
//private MediaAnim mMediaAnim;
private TextureViewMediaAnim mMediaAnim;
private RequestQueue mVolley;
private static final String WEATHER_ALL = "http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=%s";
private View mHeaderView;
private View mToolbarView;
private ObservableListView mListView;
private int mBaseTranslationY;
public static ArrayList<String> getDummyData(int num) {
ArrayList<String> items = new ArrayList<>();
for (int i = 1; i <= num; i++) {
items.add("Item " + i);
}
return items;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
mHeaderView = findViewById(R.id.header);
ViewCompat.setElevation(mHeaderView, getResources().getDimension(R.dimen.toolbar_elevation));
mToolbarView = findViewById(R.id.toolbar);
mListView = (ObservableListView) findViewById(R.id.list);
mListView.setScrollViewCallbacks(this);
LayoutInflater inflater = LayoutInflater.from(this);
mListView.addHeaderView(inflater.inflate(R.layout.padding, mListView, false)); // toolbar
mListView.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getDummyData(100)));
mVolley = Volley.newRequestQueue(this);
// SurfaceView surfaceView = (SurfaceView) findViewById(R.id.weather_background);
// mMediaAnim = new MediaAnim(this, surfaceView);
TextureView textureView = (TextureView) findViewById(R.id.weather_background);
mMediaAnim = new TextureViewMediaAnim(this, textureView);
String data = "http://open.weather.com.cn/data/?areaid=101010100&type=forecast_v&date=201506190915&appid=ceaaa48d8046a956";
String key = "904c35_SmartWeatherAPI_7d8a542";
String baseKey = javademo.standardURLEncoder(data, key);
String baseUrl = "http://open.weather.com.cn/data/?areaid=101010100&type=forecast_v&date=201506190915&appid=ceaaa4";
//Log.i("way", "url = " + baseKey);
StringRequest sr = new StringRequest(baseUrl + "&key="+baseKey, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// TODO Auto-generated method stub
Log.i("way", "response = " + response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.i("way", "error = " + error);
}
});
//mVolley.add(sr);
final String postID = "101280601";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(String.format(WEATHER_ALL, postID),null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
// String language = getResources().getConfiguration().locale
// .toString();
String language = Locale.TAIWAN.toString();
Forecast forecast = WeatherController.convertToNewForecast(
response, language, postID);
//Log.i("way", "jsonObjectRequest forecast = " + forecast);
RealTime realTime = WeatherController.convertToNewRealTime(
response.getJSONObject("realtime"), language, postID);
//Log.i("way", "realTime = " + realTime);
Alerts alerts = WeatherController.convertToNewAlert(response.getJSONArray("alert"), postID);
//Log.i("way", "alerts = " + alerts);
Index index = WeatherController.convertToNewIndex(response,
language, postID);
//Log.i("way", "index = " + index);
AQI aqi = WeatherController.convertToNewAQI(response.getJSONObject("aqi"), language, postID);
Log.i("way", "aqi = " + aqi);
//Log.i("way", "/njsonObjectRequest realtime = " + response.getJSONObject("realtime"));
//Log.i("way", "/njsonObjectRequest alert = " + response.getJSONArray("alert"));
//Log.i("way", "/njsonObjectRequest aqi = " + response.getJSONObject("aqi"));
//Log.i("way", "jsonObjectRequest index = " + response.getJSONObject("index"));
//Log.i("way", "/njsonObjectRequest accu_cc = " + response.getJSONObject("accu_cc"));
//Log.i("way", "/njsonObjectRequest accu_f5 = " + response.getJSONObject("accu_f5"));
//Log.i("way", "/njsonObjectRequest today = " + response.getJSONObject("today"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Log.i("way", "jsonObjectRequest error = " + error);
}
});
mVolley.add(jsonObjectRequest);
}
@Override
protected void onResume() {
super.onResume();
if (mMediaAnim != null)
mMediaAnim.resume();
if (this.mMediaAnim != null) {
this.mMediaAnim.setVideoFileName(VIDEO_LIST[2]);
this.mMediaAnim.setAudioFileName(AUDIO_LIST[2]);
this.mMediaAnim.setEffectMute(1);
this.mMediaAnim.play();
}
}
@Override
protected void onPause() {
super.onPause();
if (mMediaAnim != null)
mMediaAnim.stop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMediaAnim.destroy();
mMediaAnim = null;
}
@Override
public void onScrollChanged(int scrollY, boolean firstScroll,
boolean dragging) {
if (dragging) {
int toolbarHeight = mToolbarView.getHeight();
if (firstScroll) {
float currentHeaderTranslationY = mHeaderView.getTranslationY();
if (-toolbarHeight < currentHeaderTranslationY) {
mBaseTranslationY = scrollY;
}
}
float headerTranslationY = ScrollUtils.getFloat(-(scrollY - mBaseTranslationY), -toolbarHeight, 0);
mHeaderView.animate().cancel();
mHeaderView.setTranslationY(headerTranslationY);
}
}
@Override
public void onDownMotionEvent() {
// TODO Auto-generated method stub
}
@Override
public void onUpOrCancelMotionEvent(ScrollState scrollState) {
mBaseTranslationY = 0;
if (scrollState == ScrollState.DOWN) {
showToolbar();
} else if (scrollState == ScrollState.UP) {
int toolbarHeight = mToolbarView.getHeight();
int scrollY = mListView.getCurrentScrollY();
if (toolbarHeight <= scrollY) {
hideToolbar();
} else {
showToolbar();
}
} else {
// Even if onScrollChanged occurs without scrollY changing, toolbar should be adjusted
if (!toolbarIsShown() && !toolbarIsHidden()) {
// Toolbar is moving but doesn't know which to move:
// you can change this to hideToolbar()
showToolbar();
}
}
}
private boolean toolbarIsShown() {
return mHeaderView.getTranslationY() == 0;
}
private boolean toolbarIsHidden() {
return mHeaderView.getTranslationY() == -mToolbarView.getHeight();
}
private void showToolbar() {
float headerTranslationY = mHeaderView.getTranslationY();
if (headerTranslationY != 0) {
mHeaderView.animate().cancel();
mHeaderView.animate().translationY(0).setDuration(200).start();
}
}
private void hideToolbar() {
float headerTranslationY = mHeaderView.getTranslationY();
int toolbarHeight = mToolbarView.getHeight();
if (headerTranslationY != -toolbarHeight) {
mHeaderView.animate().cancel();
mHeaderView.animate().translationY(-toolbarHeight).setDuration(200).start();
}
}
}