package com.kaixin.android.menu;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import com.kaixin.android.KXApplication;
import com.kaixin.android.R;
import com.kaixin.android.activity.BaiduMapActivity;
import com.kaixin.android.activity.FriendInfoActivity;
import com.kaixin.android.common.Constants;
import com.kaixin.android.result.NearbyPeopleResult;
import com.kaixin.android.result.NearbyPhotoDetailResult;
import com.kaixin.android.result.NearbyPhotoResult;
import com.kaixin.android.ui.base.FlipperLayout.OnOpenListener;
import com.kaixin.android.ui.base.MyListView;
import com.kaixin.android.ui.base.NearbyPhotoLayout;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.CommonUtils;
import com.kaixin.android.utils.ImageUtil;
import com.kaixin.android.utils.StorageUtil;
import com.nostra13.universalimageloader.core.ImageLoader;
/**
* 菜单附近类
*
* @author gyz
*
*/
public class Lbs {
private Context mContext;
private KXApplication mKXApplication;
private View mLbs;
private Button mMenu;
private Button mGoLbs;
private ScrollView mDisplayLayout;
private MyListView mDisplay;
private TextView mNoDisplay;
// private Button mCheckIn;
private Button mNearbyPeople;
private Button mNearbyPhoto;
private OnOpenListener mOnOpenListener;
private int mChoosePostition = 0;
private NearbyPeopleAdapter mNearbyPeopleAdapter;
private NearbyPhotoAdapter mNearbyPhotoAdapter;
public Lbs(Context context, KXApplication application) {
mContext = context;
mKXApplication = application;
mLbs = LayoutInflater.from(context).inflate(R.layout.lbs, null);
findViewById();
setListener();
init();
}
private void findViewById() {
mMenu = (Button) mLbs.findViewById(R.id.lbs_menu);
mGoLbs = (Button) mLbs.findViewById(R.id.lbs_golbs);
mDisplayLayout = (ScrollView) mLbs
.findViewById(R.id.lbs_display_layout);
mDisplay = (MyListView) mLbs.findViewById(R.id.lbs_display);
mNoDisplay = (TextView) mLbs.findViewById(R.id.lbs_nodisplay);
// mCheckIn = (Button) mLbs.findViewById(R.id.lbs_checkin);
mNearbyPeople = (Button) mLbs.findViewById(R.id.lbs_nearby_people);
mNearbyPhoto = (Button) mLbs.findViewById(R.id.lbs_nearby_photo);
if(!CommonUtils.isNetWorkConnected(mKXApplication)){
mLbs.findViewById(R.id.warnning_layout).setVisibility(View.VISIBLE);
}else{
mLbs.findViewById(R.id.warnning_layout).setVisibility(View.GONE);
}
}
private void setListener() {
mMenu.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mOnOpenListener != null) {
mOnOpenListener.open();
}
}
});
mGoLbs.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(mContext, BaiduMapActivity.class);
mContext.startActivity(intent);
}
});
mDisplay.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
/*NearbyPeopleResult people = mKXApplication.mMyNearByPeopleResults.get(position);
Intent intent = new Intent();
intent.setClass(mContext, FriendInfoActivity.class);
intent.putExtra("email", people.getEmail());
intent.putExtra("uid", people.getUid());
intent.putExtra("name", people.getName());
intent.putExtra("avatar", people.getAvatar());
mContext.startActivity(intent);*/
Intent intent = new Intent(mContext, BaiduMapActivity.class);
intent.putExtra("latitude", Double.parseDouble(mKXApplication.mMyNearByPeopleResults.get(position).getLatitude()));
intent.putExtra("longitude", Double.parseDouble(mKXApplication.mMyNearByPeopleResults.get(position).getLongitude()));
intent.putExtra("address", mKXApplication.mMyNearByPeopleResults.get(position).getLocation());
mContext.startActivity(intent);
}
});
/*mCheckIn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mChoosePostition != 0) {
mChoosePostition = 0;
mDisplayLayout.setVisibility(View.GONE);
mNoDisplay.setVisibility(View.VISIBLE);
mCheckIn.setBackgroundResource(R.drawable.bottomtabbutton_leftred);
mNearbyPeople
.setBackgroundResource(R.drawable.bottomtabbutton_white);
mNearbyPhoto
.setBackgroundResource(R.drawable.bottomtabbutton_rightwhite);
}
}
});*/
mNearbyPeople.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mChoosePostition != 1) {
mChoosePostition = 1;
mDisplayLayout.setVisibility(View.VISIBLE);
mNoDisplay.setVisibility(View.GONE);
mDisplay.setDivider(new ColorDrawable(Color
.parseColor("#aaaaaa")));
mDisplay.setDividerHeight(1);
mDisplay.setBackgroundColor(Color.parseColor("#00000000"));
// mCheckIn.setBackgroundResource(R.drawable.bottomtabbutton_leftwhite);
mNearbyPeople
.setBackgroundResource(R.drawable.bottomtabbutton_red);
mNearbyPhoto
.setBackgroundResource(R.drawable.bottomtabbutton_rightwhite);
mDisplay.setAdapter(mNearbyPeopleAdapter);
mDisplay.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
Intent intent = new Intent(mContext, BaiduMapActivity.class);
intent.putExtra("latitude", Double.parseDouble(mKXApplication.mMyNearByPeopleResults.get(position).getLatitude()));
intent.putExtra("longitude", Double.parseDouble(mKXApplication.mMyNearByPeopleResults.get(position).getLongitude()));
intent.putExtra("address", mKXApplication.mMyNearByPeopleResults.get(position).getLocation());
mContext.startActivity(intent);
}
});
}
}
});
mNearbyPhoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (mChoosePostition != 2) {
mChoosePostition = 2;
mDisplayLayout.setVisibility(View.VISIBLE);
mNoDisplay.setVisibility(View.GONE);
mDisplay.setDivider(null);
mDisplay.setDividerHeight(0);
mDisplay.setBackgroundResource(R.drawable.listbox);
// mCheckIn.setBackgroundResource(R.drawable.bottomtabbutton_leftwhite);
mNearbyPeople
.setBackgroundResource(R.drawable.bottomtabbutton_white);
mNearbyPhoto
.setBackgroundResource(R.drawable.bottomtabbutton_rightred);
mDisplay.setAdapter(mNearbyPhotoAdapter);
mDisplay.setOnItemClickListener(null);
}
}
});
}
private void init() {
// 获取附近的人的数据
getNearbyPeople();
// 获取附近的照片数据
getNearbyPhoto();
// 初始化适配器
mNearbyPeopleAdapter = new NearbyPeopleAdapter();
mNearbyPhotoAdapter = new NearbyPhotoAdapter();
mDisplay.setAdapter(mNearbyPeopleAdapter);
mDisplayLayout.setVisibility(View.VISIBLE);
mNoDisplay.setVisibility(View.GONE);
}
/**
* 获取附近的人的数据
*/
private void getNearbyPeople() {
if (mKXApplication.mMyNearByPeopleResults.isEmpty()) {
String json = CallService.getNearByPeople(
StorageUtil.getString(mContext, "longitude"),
StorageUtil.getString(mContext, "latitude"));
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
NearbyPeopleResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new NearbyPeopleResult();
result.setUid(array.getJSONObject(i).getString("uid"));
result.setName(array.getJSONObject(i).getString("name"));
result.setAvatar(array.getJSONObject(i).getString("avatar"));
result.setEmail(array.getJSONObject(i).getString("email"));
result.setDistance(array.getJSONObject(i).getString(
"distance"));
result.setLocation(array.getJSONObject(i).getString(
"location"));
result.setLongitude(array.getJSONObject(i).getString(
"longitude"));
result.setLatitude(array.getJSONObject(i).getString(
"latitude"));
mKXApplication.mMyNearByPeopleResults.add(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 获取附近的照片的数据
*/
private void getNearbyPhoto() {
if (mKXApplication.mMyNearbyPhotoResults.isEmpty()) {
String json = CallService.getNearByPhoto(
StorageUtil.getString(mContext, "longitude"),
StorageUtil.getString(mContext, "latitude"));
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
NearbyPhotoResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new NearbyPhotoResult();
result.setPid(array.getJSONObject(i).getString("pid"));
result.setImage(array.getJSONObject(i).getString("image"));
result.setTitle(array.getJSONObject(i).getString("title"));
result.setCount(array.getJSONObject(i).getInt("count"));
result.setLocation(array.getJSONObject(i).getString(
"location"));
result.setDistance(array.getJSONObject(i).getString(
"distance"));
JSONArray imagesArray = array.getJSONObject(i)
.getJSONArray("images");
List<NearbyPhotoDetailResult> images = new ArrayList<NearbyPhotoDetailResult>();
for (int j = 0; j < imagesArray.length(); j++) {
NearbyPhotoDetailResult nearbyPhotoDetailResult = new NearbyPhotoDetailResult();
nearbyPhotoDetailResult.setImage(imagesArray
.getJSONObject(j).getString("image"));
nearbyPhotoDetailResult.setOwners_uid(imagesArray
.getJSONObject(j).getString("owners_uid"));
nearbyPhotoDetailResult.setOwners_name(imagesArray
.getJSONObject(j).getString("owners_name"));
nearbyPhotoDetailResult.setOwners_avatar(imagesArray
.getJSONObject(j).getString("owners_avatar"));
nearbyPhotoDetailResult.setDescription(imagesArray
.getJSONObject(j).getString("description"));
nearbyPhotoDetailResult.setComment_count(imagesArray
.getJSONObject(j).getInt("comment_count"));
nearbyPhotoDetailResult.setLike_count(imagesArray
.getJSONObject(j).getInt("like_count"));
/*JSONArray commentsArray = imagesArray.getJSONObject(j)
.getJSONArray("comments");
List<Map<String, Object>> comments = new ArrayList<Map<String, Object>>();
for (int k = 0; k < commentsArray.length(); k++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("uid", commentsArray.getJSONObject(k)
.getString("uid"));
map.put("avatar", commentsArray.getJSONObject(k)
.getString("avatar"));
map.put("name", commentsArray.getJSONObject(k)
.getString("name"));
map.put("time", commentsArray.getJSONObject(k)
.getString("time"));
map.put("content", commentsArray.getJSONObject(k)
.getString("content"));
if (commentsArray.getJSONObject(k).has("replys")) {
JSONArray replysArray = commentsArray
.getJSONObject(k)
.getJSONArray("replys");
List<Map<String, String>> replysResults = new ArrayList<Map<String, String>>();
for (int l = 0; l < replysArray.length(); l++) {
Map<String, String> replyMap = new HashMap<String, String>();
replyMap.put("uid", replysArray
.getJSONObject(l).getString("uid"));
replyMap.put("avatar",
replysArray.getJSONObject(l)
.getString("avatar"));
replyMap.put("name", replysArray
.getJSONObject(l).getString("name"));
replyMap.put("time", replysArray
.getJSONObject(l).getString("time"));
replyMap.put("content",
replysArray.getJSONObject(l)
.getString("content"));
replysResults.add(replyMap);
}
map.put("replys", replysResults);
}
comments.add(map);
}
nearbyPhotoDetailResult.setComments(comments);*/
images.add(nearbyPhotoDetailResult);
}
result.setImages(images);
mKXApplication.mMyNearbyPhotoResults.add(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private class NearbyPeopleAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mMyNearByPeopleResults.size();
}
public Object getItem(int position) {
return mKXApplication.mMyNearByPeopleResults.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.lbs_nearby_people_item, null);
holder = new ViewHolder();
holder.avatar = (ImageView) convertView
.findViewById(R.id.lbs_nearby_people_item_avatar);
holder.name = (TextView) convertView
.findViewById(R.id.lbs_nearby_people_item_name);
holder.location = (TextView) convertView
.findViewById(R.id.lbs_nearby_people_item_location);
holder.time = (TextView) convertView
.findViewById(R.id.lbs_nearby_people_item_time);
holder.picture = (ImageView) convertView
.findViewById(R.id.lbs_nearby_people_item_picture);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NearbyPeopleResult result = mKXApplication.mMyNearByPeopleResults
.get(position);
ImageLoader.getInstance().displayImage(Constants.getImageUrl() + result
.getAvatar(), holder.avatar, ImageUtil.getOption());
// holder.avatar.setImageBitmap(mKXApplication.getDefaultAvatar(result
// .getAvatar()));
holder.name.setText(result.getName());
holder.location.setText(result.getLocation());
holder.time.setText("距离我:" + result.getDistance().substring(0, result.getDistance().indexOf(".")) + "米");
if (result.isPicture()) {
holder.picture.setVisibility(View.VISIBLE);
} else {
holder.picture.setVisibility(View.GONE);
}
if (position == 0) {
convertView.setBackgroundResource(R.drawable.lbs_photo_head_bg);
} else if (position == getCount() - 1) {
convertView.setBackgroundResource(R.drawable.lbs_photo_more_bg);
} else {
convertView
.setBackgroundResource(R.drawable.lbs_photo_middle_bg);
}
return convertView;
}
class ViewHolder {
ImageView avatar;
TextView name;
TextView location;
TextView time;
ImageView picture;
}
}
private class NearbyPhotoAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mMyNearbyPhotoResults.size();
}
public Object getItem(int position) {
return mKXApplication.mMyNearbyPhotoResults.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.lbs_nearby_photo_item, null);
holder = new ViewHolder();
holder.location = (TextView) convertView
.findViewById(R.id.lbs_nearby_photo_item_location);
holder.distance = (TextView) convertView
.findViewById(R.id.lbs_nearby_photo_item_distance);
holder.display = (LinearLayout) convertView
.findViewById(R.id.lbs_nearby_photo_item_display);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
NearbyPhotoResult result = mKXApplication.mMyNearbyPhotoResults
.get(position);
holder.location.setText(result.getLocation());
holder.distance.setText(result.getDistance().substring(0, result.getDistance().indexOf(".")) + "米");
if (result.getCount() > 0) {
holder.display.setVisibility(View.VISIBLE);
holder.display.removeAllViews();
for (int i = 0; i < result.getCount(); i++) {
NearbyPhotoDetailResult nearbyPhotoDetailResult = result
.getImages().get(i);
NearbyPhotoLayout layout = new NearbyPhotoLayout(mContext,
mKXApplication);
holder.display.addView(layout.getLayout());
holder.display.invalidate();
layout.setPhoto(nearbyPhotoDetailResult.getImage());
layout.getLayout().setTag(nearbyPhotoDetailResult);
layout.getLayout().setOnClickListener(
new OnClickListener() {
public void onClick(View v) {
NearbyPhotoDetailResult result = (NearbyPhotoDetailResult) v
.getTag();
System.out.println(result.getDescription());
}
});
}
} else {
holder.display.setVisibility(View.GONE);
}
return convertView;
}
class ViewHolder {
TextView location;
TextView distance;
LinearLayout display;
}
}
public View getView() {
return mLbs;
}
public void fresh(){
mKXApplication.mMyNearbyPhotoResults.clear();
mKXApplication.mMyNearByPeopleResults.clear();
// 获取附近的人的数据
getNearbyPeople();
mNearbyPeopleAdapter.notifyDataSetChanged();
// 获取附近的照片数据
getNearbyPhoto();
mNearbyPhotoAdapter.notifyDataSetChanged();
}
public void setOnOpenListener(OnOpenListener onOpenListener) {
mOnOpenListener = onOpenListener;
}
}