package com.partynetwork.iparty.nearby;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.LocationManagerProxy;
import com.amap.api.location.LocationProviderProxy;
import com.baidu.mobstat.StatService;
import com.partynetwork.dataprovider.DataProvider.IJsonResultListener;
import com.partynetwork.dataprovider.json.NetworkEntity;
import com.partynetwork.dataprovider.json.struct.NearBy_nearbyMainRequest;
import com.partynetwork.dataprovider.json.struct.NearBy_nearbyMainResponse;
import com.partynetwork.dataprovider.util.AMapUtil;
import com.partynetwork.iparty.R;
import com.partynetwork.iparty.app.AppContext;
import com.partynetwork.iparty.discover.DiscoverPage;
import com.partynetwork.iparty.dom.OnFlipChangeViewListener;
import com.partynetwork.iparty.flipmenu.BaseSlidingPage;
import com.partynetwork.iparty.flipmenu.Main;
import com.partynetwork.iparty.helper.IntentHelper;
import com.partynetwork.iparty.info.NearbyItemInfo;
import com.partynetwork.myview.mytoast.MenuBottomPop;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.lidroid.xutils.util.LogUtils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* 附近
*
* @author DongCeMedia
*
*/
@SuppressLint("ValidFragment")
public class NearbyPage extends BaseSlidingPage implements
AMapLocationListener, Runnable, IJsonResultListener, OnClickListener,
OnItemClickListener {
/** 侧滑功能监听 */
private OnFlipChangeViewListener mOnChangeViewListener;
// 上下文
private Activity mActivity;
/**
* 其中的显示附近的人的listview
*/
private ListView mListView;
// listview适配器
public NearbyItemAdapter mNearbyItemAdapter;
// 清除确认框
private MenuBottomPop exitPopupWindow;
/**
* 底部的弹窗
*/
private MenuBottomPop menuBottonPop;
/*
* 更多功能列表
*/
private String moreArray[] = new String[] { "全部", "只看女生", "只看男生", "只看其他" };
private String exitArray[] = new String[] { "清除位置信息并退出" };
/** 定位使用 */
private LocationManagerProxy mAMapLocManager = null;
/** 用于判断定位超时 */
private AMapLocation aMapLocation;
private Handler handler = new Handler();
private Double geoLat, geoLng;
// 全部的数据
private List<NearbyItemInfo> mList = new ArrayList<NearbyItemInfo>();
private List<NearbyItemInfo> sList = new ArrayList<NearbyItemInfo>();
public NearbyPage(SlidingMenu menu) {
super(menu);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mActivity = getActivity();
initView();
}
/**
* 初始化数据
*/
private void initData() {
menuBottonPop = new MenuBottomPop(mActivity, moreArray, clickListener);
exitPopupWindow = new MenuBottomPop(mActivity, exitArray,
exitClickListener);
/******************** 定位功能 */
mAMapLocManager = LocationManagerProxy.getInstance(mActivity);
/*
* mAMapLocManager.setGpsEnable(false);//
* 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location
* API定位采用GPS和网络混合定位方式
* ,第一个参数是定位provider,第二个参数时间最短是5000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者
*/
mAMapLocManager.requestLocationUpdates(
LocationProviderProxy.AMapNetwork, 5000, 10, this);
handler.postDelayed(this, 12000);// 设置超过12秒还没有定位到就停止定位
}
private void initView() {
mListView = (ListView) mActivity.findViewById(R.id.nearby_list);
TextView emptyView = new TextView(mActivity);
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
emptyView.setText("定位中,请稍后……");
emptyView.setGravity(Gravity.CENTER);
((ViewGroup) mListView.getParent()).addView(emptyView);
mListView.setEmptyView(emptyView);
mListView.setOnItemClickListener(this);
mActivity.findViewById(R.id.menu_head_left).setOnClickListener(this);
mActivity.findViewById(R.id.menu_head_right).setOnClickListener(this);
}
/**
* 事件监听
*
* @param view
*/
public void onClick(View view) {
switch (view.getId()) {
case R.id.menu_head_left:
// 侧边菜单
/*
if (slidingMenu.isMenuShowing()) {
slidingMenu.showContent();
} else {
slidingMenu.showMenu();
}
*/
break;
case R.id.menu_head_right:
// 更多
menuBottonPop.showAtLocation(mListView);
break;
default:
break;
}
}
/**
*
* @param parent
* @param view
* @param position
* @param id
*/
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
IntentHelper.goPersonalCenterActivity(mActivity, sList.get(position)
.getUserId());
}
/**
* 弹出菜单的按钮事件监听
*
* @author Administrator
*
*/
private OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
if (v.getTag().equals(moreArray[0])) {
sieving(0);
} else if (v.getTag().equals(moreArray[1])) {
sieving(2);
} else if (v.getTag().equals(moreArray[2])) {
sieving(1);
} else if (v.getTag().equals(moreArray[3])) {
sieving(3);
} else if (v.getTag().equals(moreArray[4])) {
Intent intent = new Intent(mActivity,
NearbyCustomActivity.class);
mActivity.startActivity(intent);
} else if (v.getTag().equals(moreArray[5])) {
} else if (v.getTag().equals(moreArray[6])) {
exitPopupWindow.showAtLocation(mListView);
}
menuBottonPop.dismiss();
}
};
/**
* 弹出菜单的按钮事件监听
*
* @author Administrator
*
*/
private OnClickListener exitClickListener = new OnClickListener() {
public void onClick(View v) {
if (v.getTag().equals(exitArray[0])) {
if (mOnChangeViewListener != null) {
// 跳到主界面
mOnChangeViewListener.onChangeView(0);
}
}
exitPopupWindow.dismiss();
}
};
/**
* 筛选显示的数据内容
*/
private void sieving(int type) {
sList.removeAll(sList);
for (int i = 0; i < mList.size(); i++) {
switch (type) {
case 0:
sList.add(mList.get(i));
break;
case 1:
if (mList.get(i).getUserSex() == 0) {
sList.add(mList.get(i));
}
break;
case 2:
if (mList.get(i).getUserSex() == 1) {
sList.add(mList.get(i));
}
break;
case 3:
if (mList.get(i).getUserSex() == 2) {
sList.add(mList.get(i));
}
break;
default:
break;
}
}
mNearbyItemAdapter = new NearbyItemAdapter(mActivity, sList);
mNearbyItemAdapter.notifyDataSetChanged();
mListView.setAdapter(mNearbyItemAdapter);
}
/**
* 销毁定位
*/
private void stopLocation() {
if (mAMapLocManager != null) {
mAMapLocManager.removeUpdates(this);
mAMapLocManager.destory();
}
mAMapLocManager = null;
}
public void onLocationChanged(Location location) {
}
public void onStatusChanged(String provider, int status, Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
public void run() {
if (aMapLocation == null) {
Toast.makeText(mActivity, "12秒内还没有定位成功,停止定位", Toast.LENGTH_SHORT)
.show();
stopLocation();// 销毁掉定位
}
}
public void onLocationChanged(AMapLocation location) {
if (location != null) {
this.aMapLocation = location;// 判断超时机制
geoLat = location.getLatitude();
geoLng = location.getLongitude();
String cityCode = "";
String desc = "";
Bundle locBundle = location.getExtras();
if (locBundle != null) {
cityCode = locBundle.getString("citycode");
desc = locBundle.getString("desc");
}
String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
+ "\n精 度 :" + location.getAccuracy() + "米"
+ "\n定位方式:" + location.getProvider() + "\n定位时间:"
+ AMapUtil.convertToTime(location.getTime()) + "\n城市编码:"
+ cityCode + "\n位置描述:" + desc + "\n省:"
+ location.getProvince() + "\n市:" + location.getCity()
+ "\n区(县):" + location.getDistrict() + "\n区域编码:" + location
.getAdCode());
LogUtils.i(str);
// 停止定位
stopLocation();
sendRequest(geoLat, geoLng);
}
}
/**
* 设置侧滑监听
*
* @param onChangeViewListener
*/
public void setOnChangeViewListener(
OnFlipChangeViewListener onChangeViewListener) {
mOnChangeViewListener = onChangeViewListener;
}
/**
* 发送请求
*
* @param geoLat
* @param geoLat2
*/
private void sendRequest(Double geoLat, Double geoLng) {
NearBy_nearbyMainRequest request = new NearBy_nearbyMainRequest();
request.setLatitude(geoLat);
request.setLongitude(geoLng);
request.setUserId(AppContext.getInstance().getLoginUid());
AppContext.getInstance().getmDataProvider()
.getJsonFromNetwork(request, this);
}
public void onNetworkRequest() {
}
public void onResultSuccess(NetworkEntity entity) {
if (entity.getRequest().getAction()
.equals(new NearBy_nearbyMainRequest().getAction())) {
NearBy_nearbyMainResponse nResponse = (NearBy_nearbyMainResponse) entity
.getResponse();
NearbyItemInfo[] infoArray = nResponse.getDetails();
if (infoArray != null) {
mList = Arrays.asList(infoArray);
sieving(0);
}
}
}
public void onResultFail(String result) {
}
@Override
protected int initPage() {
return R.layout.nearby;
}
@Override
public void onResume() {
super.onResume();
initData();
StatService.onPageStart(mActivity, "NearbyPage");
}
@Override
public void onPause() {
super.onPause();
stopLocation();// 停止定位
StatService.onPageEnd(mActivity, "NearbyPage");
}
}