package com.jone.app.ui.fragment.joneMain;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Loader;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Paint;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.ViewSwitcher;
import com.jone.app.Constants;
import com.jone.app.R;
import com.jone.app.asyncTaskLoader.CustomListAsyncTaskLoader;
import com.jone.app.callbacks.CommonListener;
import com.jone.app.entities.WeatherInfo;
import com.jone.app.logic.ControlLogic;
import com.jone.app.ui.JoneMainActivity;
import com.jone.app.ui.adpater.ControlBeanAdapter;
import com.jone.app.ui.fragment.JoneBaseFragment;
import com.jone.app.utils.Utils;
import com.jone.app.utils.WeatherUtil;
import com.jone.demo.Demo;
import com.jone.demo.IDemo;
import com.jone.demo.JoneInvocationHandler;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
/**
* Created by jone_admin on 14-2-18.
*/
public class JoneMainFragment extends JoneBaseFragment {
private static final String TAG = JoneMainFragment.class.getSimpleName();
public static final int loaderId = 001001;
private TextSwitcher textSwitcherNews;
private GridView gridViewCenter;
private ControlBeanAdapter adapter;
private ControlLogic controlLogic;
private LoaderManager loaderManager;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0://更新天气
updateWeatherUI((WeatherInfo) msg.obj);
break;
}
}
};
private Runnable showNewsRunnable;
private int currentNewsIndex = 0;
private String news[] = new String[]{
"你若想得到这世界最好的东西,先提供这世界最好的你。",
"如果你没有梦想,那么你只能为别人的梦想打工。",
"你的父母仍在为你打拼,这就是你今天坚强的理由。",
"什么是坚持?就是每天告诉自己,再坚持一天。",
"祝新的一年里马到成功!",
};
private BroadcastReceiver networkChangeBroadcastReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
controlLogic = new ControlLogic(getActivity());
loaderManager = getLoaderManager();
currentNewsIndex = (int)(Math.random()*news.length);
IDemo demo = (IDemo) JoneInvocationHandler.newInstance(new Demo());
demo.getResult(22222);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_jone_main, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initViews(view);
bindBroadcast();
// System.out.println("getWeatherURLByCityName: " + WeatherUtil.getWeatherURLByCityName(getActivity(), "北京"));
}
private TextView txtLocation;
private TextView txtWeather;
private TextView txtChangeCity;
private ImageView imWeatherIcon;
int width,height;
private PopupWindow popupWindow;
private JoneMainUtil joneMainUtil;
private void initViews(final View rootView){
txtLocation = (TextView) rootView.findViewById(R.id.txtLocation);
txtWeather = (TextView) rootView.findViewById(R.id.txtWeather);
imWeatherIcon = (ImageView) rootView.findViewById(R.id.imWeatherIcon);
joneMainUtil = new JoneMainUtil();
popupWindow = new PopupWindow(getActivity());
// 获取屏幕的高度和宽度
Display display = getActivity().getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
txtChangeCity = (TextView) rootView.findViewById(R.id.txtChangeCity);
txtChangeCity.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线
txtChangeCity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 显示 popupWindow
joneMainUtil.makePopupWindow(popupWindow, getActivity(), width, height , new CommonListener() {
@Override
public Object onExecute(Object o) {
setWeatherInfoByCity((String) o);
return null;
}
});
int[] xy = new int[2];
rootView.getLocationOnScreen(xy);
popupWindow.showAtLocation(rootView,Gravity.CENTER|Gravity.BOTTOM, 0, -height);
}
});
textSwitcherNews = (TextSwitcher) rootView.findViewById(R.id.textSwitcherNews);
initTextSwitcherNews();
gridViewCenter = (GridView) rootView.findViewById(R.id.gridViewCenter);
adapter = new ControlBeanAdapter(getActivity(), R.layout.item_control_gridview);
gridViewCenter.setAdapter(adapter);
loaderManager.initLoader(loaderId, null, callbacks);
}
private void setWeatherInfo(){
if(Utils.isNetworkAlive()){
imWeatherIcon.setVisibility(View.INVISIBLE);
txtLocation.setText("loading...");
WeatherUtil.getLocationCityWeatherInfo(new WeatherUtil.WeatherInfoListener() {
@Override
public void onResponse(WeatherInfo weatherInfo) {
Message message = new Message();
message.what = 0;
message.obj = weatherInfo;
handler.sendMessage(message);
}
});
}else {
txtLocation.setText("当前城市: 未知");
txtWeather.setText("天气获取失败");
}
}
private void setWeatherInfoByCity(String city){
if(Utils.isNetworkAlive()){
imWeatherIcon.setVisibility(View.INVISIBLE);
txtChangeCity.setVisibility(View.INVISIBLE);
txtLocation.setText("loading...");
WeatherUtil.getWeatherInfoByCity(city, new WeatherUtil.WeatherInfoListener() {
@Override
public void onResponse(WeatherInfo weatherInfo) {
Message message = new Message();
message.what = 0;
message.obj = weatherInfo;
handler.sendMessage(message);
}
});
}else {
txtWeather.setText("天气获取失败");
}
}
private void updateWeatherUI(WeatherInfo weatherInfo){
imWeatherIcon.setVisibility(View.VISIBLE);
txtChangeCity.setVisibility(View.VISIBLE);
if(weatherInfo != null){
txtChangeCity.setVisibility(View.VISIBLE);
txtLocation.setText("当前城市: " + weatherInfo.getCity());
txtWeather.setText("温度: " + weatherInfo.getTemp1() + "-" + weatherInfo.getTemp2() + "\n"
+ "天气: " + weatherInfo.getWeather() + "\n"
+ "发布时间: " + weatherInfo.getPtime());
imWeatherIcon.setImageResource(WeatherUtil.getWeatherIconByWeather(weatherInfo.getWeather()));
}else {
txtLocation.setText("当前城市: 未知");
txtChangeCity.setVisibility(View.INVISIBLE);
txtWeather.setText("天气获取失败");
imWeatherIcon.setVisibility(View.INVISIBLE);
}
}
private void bindBroadcast(){
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); //网络状态变化
networkChangeBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Log.d(TAG, "网络状态变化");
setWeatherInfo();
}
};
getActivity().registerReceiver(networkChangeBroadcastReceiver, intentFilter);
}
private void unBindBroadcast(){
if(networkChangeBroadcastReceiver != null){
getActivity().unregisterReceiver(networkChangeBroadcastReceiver);
}
}
private void initTextSwitcherNews(){
textSwitcherNews.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView tv = new TextView(getActivity());
tv.setTextSize(16);
tv.setTextColor(getResources().getColor(android.R.color.darker_gray));
tv.setGravity(Gravity.CENTER);
return tv;
}
});
// 设置淡入淡出的动画效果
Animation in = AnimationUtils.loadAnimation(getActivity(),
android.R.anim.slide_in_left);
Animation out = AnimationUtils.loadAnimation(getActivity(),
android.R.anim.slide_out_right);
textSwitcherNews.setInAnimation(in);
textSwitcherNews.setOutAnimation(out);
showNewsRunnable = new Runnable() {
@Override
public void run() {
if (currentNewsIndex > news.length - 1) {
currentNewsIndex = 0;
}
textSwitcherNews.setText(news[currentNewsIndex]);
currentNewsIndex++;
handler.postDelayed(this, 5000);
}
};
handler.postDelayed(showNewsRunnable, 500);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((JoneMainActivity) activity).onSectionAttached(0);
}
@Override
public void onShow() {
super.onShow();
((JoneMainActivity) getActivity()).onSectionAttached(0);
}
private LoaderManager.LoaderCallbacks<List> callbacks = new LoaderManager.LoaderCallbacks<List>() {
@Override
public Loader<List> onCreateLoader(int i, Bundle bundle) {
return new CustomListAsyncTaskLoader(new CommonListener() {
@Override
public Object onExecute(Object o) {
return controlLogic.getControlBeans();
}
});
}
@Override
public void onLoadFinished(Loader<List> listLoader, List list) {
adapter.setData(list);
}
@Override
public void onLoaderReset(Loader<List> listLoader) {
adapter.clear();
}
};
@Override
public void onDestroy() {
super.onDestroy();
if(loaderManager.getLoader(loaderId) != null){
loaderManager.destroyLoader(loaderId);
}
if(showNewsRunnable != null){
handler.removeCallbacks(showNewsRunnable);
}
unBindBroadcast();
}
}