package com.withiter.quhao.activity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewParent;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.withiter.quhao.QHClientApplication;
import com.withiter.quhao.R;
import com.withiter.quhao.adapter.ActivityAdapter;
import com.withiter.quhao.adapter.MyPagerAdapter;
import com.withiter.quhao.task.GetActivitiesTask;
import com.withiter.quhao.task.GetChooseHardMerchantTask;
import com.withiter.quhao.task.JsonPack;
import com.withiter.quhao.task.TopMerchantsTask;
import com.withiter.quhao.util.ActivityUtil;
import com.withiter.quhao.util.QuhaoLog;
import com.withiter.quhao.util.StringUtils;
import com.withiter.quhao.util.tool.ParseJson;
import com.withiter.quhao.util.tool.QuhaoConstant;
import com.withiter.quhao.view.viewpager.AutoScrollViewPager;
import com.withiter.quhao.vo.ActivityVO;
import com.withiter.quhao.vo.Category;
import com.withiter.quhao.vo.Merchant;
import com.withiter.quhao.vo.TopMerchant;
public class HomeFragment extends Fragment implements OnClickListener {
private static final int UNLOCK_CLICK = 1000;
private String LOGTAG = HomeFragment.class.getName();
private Button searchTextView;
private TextView cityBtn;
private List<TopMerchant> topMerchants;
private List<Category> categorys = null;
private boolean isClick;
private TextView homeAdTitle; // 广告简单介绍
private AutoScrollViewPager mViewPager;
private LinearLayout adBottomLayout;
private List<ImageView> mPoints;
private int mPosition; // pager的位置,就是当前图片的索引号
private MyPagerAdapter mPagerAdapter;
private float xDistance, yDistance;
/** 记录按下的X坐标 **/
private float mLastMotionX, mLastMotionY;
/** 是否是左右滑动 **/
private boolean mIsBeingDragged = true;
private View contentView;
private ImageView myAttentions;
private ImageView noSequenceMerchants;
private ImageView merchantChatView;
private ImageView getNumberView;
private ImageView chooseHardView;
private ListView activityListView;
private List<ActivityVO> activityList;
private ActivityAdapter activityAdapter;
private List<ImageView> views;
private LinearLayout activityLayout;
@Override
public void onAttach(Activity activity) {
Log.e("wjzwjz", "HomeFragment onAttach");
super.onAttach(activity);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.e("wjzwjz", "HomeFragment onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
Log.e("wjzwjz", "HomeFragment onViewStateRestored");
super.onViewStateRestored(savedInstanceState);
}
@Override
public void onStart() {
Log.e("wjzwjz", "HomeFragment onStart");
super.onStart();
}
@Override
public void onPause() {
Log.e("wjzwjz", "HomeFragment onPause");
if (mViewPager!= null && null != views && !views.isEmpty() && mPagerAdapter != null) {
mViewPager.stopAutoScroll();
}
super.onPause();
}
@Override
public void onStop() {
Log.e("wjzwjz", "HomeFragment onStop");
if (mViewPager!= null && null != views && !views.isEmpty() && mPagerAdapter != null) {
mViewPager.stopAutoScroll();
}
super.onStop();
}
@Override
public void onDestroyView() {
Log.e("wjzwjz", "HomeFragment onDestroyView");
getActivity().unregisterReceiver(cityChangeReceiver);
super.onDestroyView();
}
@Override
public void onDestroy() {
Log.e("wjzwjz", "HomeFragment onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
Log.e("wjzwjz", "HomeFragment onDetach");
super.onDetach();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 检查网络
if (!ActivityUtil.isNetWorkAvailable(getActivity())) {
Toast.makeText(getActivity(), R.string.network_error_info, Toast.LENGTH_SHORT).show();
}
if(contentView != null) {
ViewGroup vg = (ViewGroup) contentView.getParent();
vg.removeView(contentView);
getActivity().registerReceiver(cityChangeReceiver, new IntentFilter(QuhaoConstant.ACTION_CITY_CHANGED));
activityListView.setVisibility(View.VISIBLE);
getTopMerchantsFromServerAndDisplay();
getActivities();
return contentView;
}
// 主页面layout
contentView = inflater.inflate(R.layout.main_fragment_layout, container, false);
activityLayout = (LinearLayout) contentView.findViewById(R.id.activity_layout);
searchTextView = (Button) contentView.findViewById(R.id.edit_search);
searchTextView.setOnClickListener(this);
myAttentions = (ImageView) contentView.findViewById(R.id.my_attention);
noSequenceMerchants = (ImageView) contentView.findViewById(R.id.no_sequence_merchants);
merchantChatView = (ImageView) contentView.findViewById(R.id.btn_chat_room);
getNumberView = (ImageView) contentView.findViewById(R.id.btn_get_number);
chooseHardView = (ImageView) contentView.findViewById(R.id.btn_choose_hard);
myAttentions.setOnClickListener(this);
noSequenceMerchants.setOnClickListener(this);
merchantChatView.setOnClickListener(this);
getNumberView.setOnClickListener(this);
chooseHardView.setOnClickListener(this);
mViewPager = (AutoScrollViewPager) contentView.findViewById(R.id.home_view_pager);
mViewPager.setInterval(3000);
homeAdTitle = (TextView) contentView.findViewById(R.id.home_ad_title);
adBottomLayout = (LinearLayout) contentView.findViewById(R.id.home_ad_bottom_layout);
mPoints = new ArrayList<ImageView>();
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(searchTextView.getWindowToken(), 0);
// top merchant function
topMerchants = new ArrayList<TopMerchant>();
activityListView = (ListView) contentView.findViewById(R.id.activity_list_view);
// 城市选择按钮
cityBtn = (TextView) contentView.findViewById(R.id.city);
cityBtn.setOnClickListener(this);
cityBtn.setText(QHClientApplication.getInstance().defaultCity.cityName);
activityListView.setVisibility(View.VISIBLE);
getActivity().registerReceiver(cityChangeReceiver, new IntentFilter(QuhaoConstant.ACTION_CITY_CHANGED));
getTopMerchantsFromServerAndDisplay();
getActivities();
return contentView;
}
private BroadcastReceiver cityChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(QuhaoConstant.ACTION_CITY_CHANGED.equals(action))
{
cityBtn.setText(QHClientApplication.getInstance().defaultCity.cityName);
getTopMerchantsFromServerAndDisplay();
getActivities();
}
}
};
private void buildPager() {
// 广告下方的view
adBottomLayout.setGravity(Gravity.CENTER_VERTICAL);
if (null != mPoints && !mPoints.isEmpty()) {
for (int i = 0; i < mPoints.size(); i++) {
adBottomLayout.removeView(mPoints.get(i));
}
}
mPoints = new ArrayList<ImageView>();
adBottomLayout.getChildAt(0);
if (null != views && !views.isEmpty()) {
for (int i = 0; i < views.size(); i++) {
if (views.get(i).getParent() != null) {
ViewGroup vg = (ViewGroup) views.get(i).getParent();
vg.removeView(views.get(i));
}
}
}
views = new ArrayList<ImageView>();
ImageView image;
if (topMerchants != null) {
for (int num = 0; num < topMerchants.size(); num++) {
image = new ImageView(getActivity());
// 图片缩放
image.setScaleType(ScaleType.FIT_XY);
views.add(image);
if (StringUtils.isNotNull(topMerchants.get(num).merchantImage)) {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.no_logo)
.showImageForEmptyUri(R.drawable.no_logo)
.showImageOnFail(R.drawable.no_logo)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(20))
.build();
ImageLoader.getInstance().displayImage(topMerchants.get(num).merchantImage, image, options, new AnimateFirstDisplayListener());
// AsynImageLoader.getInstance().showImageAsyn(image, 0, topMerchants.get(num).merchantImage, R.drawable.no_logo);
} else {
image.setImageResource(R.drawable.no_logo);
}
// 广告下方的原于圆点view
ImageView point = new ImageView(getActivity());
point.setAdjustViewBounds(true);
if (num == 0) {
homeAdTitle.setText(topMerchants.get(num).name);
point.setBackgroundResource(R.drawable.point_white);
} else {
point.setBackgroundResource(R.drawable.point_deep);
}
point.setLayoutParams(new LayoutParams(10, 10));
mPoints.add(point);
// LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
// LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// lp.setMargins(10, 0, 10, 0);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (topMerchants.get(mPosition) != null) {
String mid = topMerchants.get(mPosition).mid;
// QuhaoLog.d(TAG, "mid:" + mid);
if (StringUtils.isNull(mid)) {
Builder dialog = new AlertDialog.Builder(getActivity());
dialog.setTitle("温馨提示").setMessage("推荐商家虚席以待").setPositiveButton("确定", null);
dialog.show();
return;
}
Intent intent = new Intent();
intent.putExtra("merchantId", mid);
intent.setClass(getActivity(), MerchantDetailActivity.class);
startActivity(intent);
}
}
});
if (point.getParent() != null) {
ViewGroup vg = (ViewGroup) point.getParent();
vg.removeView(point);
}
adBottomLayout.addView(point);
}
if (null == mPagerAdapter) {
mPagerAdapter = new MyPagerAdapter(getActivity(), views, topMerchants);
}
else
{
mPagerAdapter.mViews = views;
mPagerAdapter.mDatas = topMerchants;
}
mViewPager.setAdapter(mPagerAdapter);
mViewPager.startAutoScroll();
mViewPager.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mViewPager.getGestureDetector().onTouchEvent(event);
final float x = event.getRawX();
final float y = event.getRawY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mViewPager.stopAutoScroll();
xDistance = yDistance = 0f;
mLastMotionX = x;
mLastMotionY = y;
case MotionEvent.ACTION_MOVE:
final float xDiff = Math.abs(x - mLastMotionX);
final float yDiff = Math.abs(y - mLastMotionY);
xDistance += xDiff;
yDistance += yDiff;
float dx = xDistance - yDistance;
// 左右滑动避免和下拉刷新冲突
if (xDistance > yDistance || Math.abs(xDistance - yDistance) < 0.00001f) {
mIsBeingDragged = true;
mLastMotionX = x;
mLastMotionY = y;
((ViewParent) v.getParent()).requestDisallowInterceptTouchEvent(true);
} else {
mIsBeingDragged = false;
((ViewParent) v.getParent()).requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
mViewPager.startAutoScroll(3000);
break;
case MotionEvent.ACTION_CANCEL:
if (mIsBeingDragged) {
((ViewParent) v.getParent()).requestDisallowInterceptTouchEvent(false);
}
break;
default:
break;
}
return false;
}
});
if (topMerchants.size() > 1) {
adBottomLayout.setVisibility(View.VISIBLE);
} else {
adBottomLayout.setVisibility(View.GONE);
}
mViewPager.setOnPageChangeListener(new MyListener());
} else {
image = new ImageView(getActivity());
image.setAdjustViewBounds(true);
views.add(image);
mViewPager.setAdapter(new MyPagerAdapter(views, getActivity()));
}
}
// 广告滑动监听
class MyListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
// 当选状态
@Override
public void onPageSelected(int arg0) {
// System.out.println("广告" + arg0);
// currentItem = arg0;
homeAdTitle.setText(topMerchants.get(arg0).name);
mPosition = arg0;
int i = 0;
for (i = 0; i < mPoints.size(); i++) {
mPoints.get(i).setBackgroundResource(R.drawable.point_deep);
if (arg0 == i) {
mPoints.get(i).setBackgroundResource(R.drawable.point_white);
}
}
// if (i == 3) {
// System.out.println("动画设计和计划的话手机号");
// onPageSelected(0);
// }
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
if (mViewPager!= null && null != views && !views.isEmpty() && mPagerAdapter != null) {
mViewPager.startAutoScroll();
}
super.onResume();
QuhaoLog.i(LOGTAG, LOGTAG + " onResume");
}
protected Handler unlockHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == UNLOCK_CLICK) {
isClick = false;
}
}
};
/**
* get top merchants from server side and display
*/
public void getTopMerchantsFromServerAndDisplay() {
// progressTopMerchant = new ProgressDialogUtil(getActivity(),
// R.string.empty, R.string.querying, false);
// progressTopMerchant.showProgress();
final TopMerchantsTask task = new TopMerchantsTask(0, getActivity(), "getTopMerchants?x=6&cityCode=" + QHClientApplication.getInstance().defaultCity.cityCode);
task.execute(new Runnable() {
@Override
public void run() {
JsonPack result = task.jsonPack;
if (null == topMerchants) {
topMerchants = new ArrayList<TopMerchant>();
}
topMerchants.clear();
topMerchants.addAll(ParseJson.getTopMerchants(result.getObj()));
// check the numbers of top merchant
int topMerchantCount = topMerchants.size();
if (topMerchantCount < 6) {
for (int i = 0; i < 6 - topMerchantCount; i++) {
TopMerchant topMerchant = new TopMerchant();
topMerchants.add(topMerchant);
}
}
// 改变top Merchant的显示方式为滑动形式的。
buildPager();
}
}, new Runnable() {
@Override
public void run() {
JsonPack result = task.jsonPack;
if (null == topMerchants) {
topMerchants = new ArrayList<TopMerchant>();
}
topMerchants.clear();
topMerchants.addAll(ParseJson.getTopMerchants(result.getObj()));
// check the numbers of top merchant
int topMerchantCount = topMerchants.size();
if (topMerchantCount < 6) {
for (int i = 0; i < 6 - topMerchantCount; i++) {
TopMerchant topMerchant = new TopMerchant();
topMerchants.add(topMerchant);
}
}
//改变top Merchant的显示方式为滑动形式的。
buildPager();
}
});
}
private Handler activitiesUpdateHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 200) {
super.handleMessage(msg);
if (null == activityAdapter) {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.no_logo)
.showImageForEmptyUri(R.drawable.no_logo)
.showImageOnFail(R.drawable.no_logo)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(20))
.build();
activityAdapter = new ActivityAdapter(getActivity(),activityListView,activityList,options,new AnimateFirstDisplayListener());
activityListView.setAdapter(activityAdapter);
}
else
{
activityAdapter.Activities = activityList;
}
activityAdapter.notifyDataSetChanged();
if(null != activityList && !activityList.isEmpty()) {
activityLayout.setVisibility(View.VISIBLE);
activityListView.setVisibility(View.VISIBLE);
int totalHeight = 0;
for (int i = 0, len = activityAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
View listItem = activityAdapter.getView(i, null, activityListView);
listItem.measure(0, 0); //计算子项View 的宽高
totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
}
android.view.ViewGroup.LayoutParams params = activityListView.getLayoutParams();
params.height = totalHeight + (activityListView.getDividerHeight() * (activityListView.getCount() - 1));
activityListView.setLayoutParams(params);
}
else {
activityLayout.setVisibility(View.GONE);
activityListView.setVisibility(View.GONE);
}
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
}
}
};
/**
* get all categories from server and display them
*/
public void getActivities() {
final GetActivitiesTask task = new GetActivitiesTask(0, getActivity(), "app/activity?cityCode=" + QHClientApplication.getInstance().defaultCity.cityCode);
task.execute(new Runnable() {
@Override
public void run() {
JsonPack result = task.jsonPack;
if (null == activityList) {
activityList = new ArrayList<ActivityVO>();
}
activityList.clear();
activityList.addAll(ParseJson.getActivities(result.getObj()));
activitiesUpdateHandler.obtainMessage(200, activityList).sendToTarget();
}
}, new Runnable() {
@Override
public void run() {
if (null == activityList) {
activityList = new ArrayList<ActivityVO>();
}
activityList.clear();
activitiesUpdateHandler.obtainMessage(200, activityList).sendToTarget();
}
});
}
@Override
public void onClick(View v) {
if (isClick) {
return;
}
isClick = true;
switch (v.getId()) {
// 我的关注事件按钮
case R.id.my_attention:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
if (QHClientApplication.getInstance().isLogined) {
Intent attention = new Intent();
// attention.setClass(getActivity(), MyAttentionListActivity.class);
attention.setClass(getActivity(), ShareListActivity.class);
startActivity(attention);
} else {
Intent login1 = new Intent(getActivity(), LoginActivity.class);
login1.putExtra("activityName", this.getClass().getName());
login1.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(login1);
}
break;
// 马上就吃按钮事件
case R.id.no_sequence_merchants:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
Intent login1 = new Intent(getActivity(), NoQueueMerchantListActivity.class);
login1.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(login1);
break;
// 取号排队按钮事件
case R.id.btn_get_number:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
// getCategoriesFromServerAndDisplay();
Intent intent3 = new Intent();
intent3.setClass(getActivity(), MerchantListActivity.class);
startActivity(intent3);
break;
// 聊聊天吧按钮事件
case R.id.btn_chat_room:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
if (QHClientApplication.getInstance().isLogined) {
Intent attention = new Intent();
attention.setClass(getActivity(), MerchantChatRoomsActivity.class);
startActivity(attention);
} else {
Intent login2 = new Intent(getActivity(), LoginActivity.class);
login2.putExtra("activityName", this.getClass().getName());
login2.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(login2);
}
break;
// 选择困难症按钮事件
case R.id.btn_choose_hard:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
String url = "app/tuijian?cityCode=" + QHClientApplication.getInstance().defaultCity.cityCode;
AMapLocation location = QHClientApplication.getInstance().location;
if (location != null) {
url = url + "&userX=" + location.getLongitude() + "&userY=" + location.getLatitude();
}
final GetChooseHardMerchantTask task = new GetChooseHardMerchantTask(R.string.waitting, getActivity(), url);
task.execute(new Runnable() {
@Override
public void run() {
JsonPack jsonPack = task.jsonPack;
Merchant merchant = ParseJson.getMerchant(jsonPack.getObj());
if (null != merchant && StringUtils.isNotNull(merchant.id)) {
Intent chooseHardIntent = new Intent();
chooseHardIntent.putExtra("merchantId", merchant.id);
chooseHardIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
chooseHardIntent.setClass(getActivity(), MerchantDetailActivity.class);
startActivity(chooseHardIntent);
}
else {
Toast.makeText(getActivity(), "亲,该城市暂未开通,请选择其他城市!", Toast.LENGTH_SHORT).show();
return;
}
}
}, new Runnable() {
@Override
public void run() {
Toast.makeText(getActivity(), "亲,该城市暂未开通,请选择其他城市!", Toast.LENGTH_SHORT).show();
return;
}
});
break;
case R.id.city:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
Intent intent = new Intent();
intent.setClass(getActivity(), CitySelectActivity.class);
startActivity(intent);
break;
case R.id.edit_search:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
Intent intent2 = new Intent(getActivity(), MerchantsSearchActivity.class);
startActivity(intent2);
break;
default:
unlockHandler.sendEmptyMessageDelayed(UNLOCK_CLICK, 1000);
break;
}
}
private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {
static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView = (ImageView) view;
boolean firstDisplay = !displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView, 500);
displayedImages.add(imageUri);
}
}
}
}
}