package com.kaixin.android.activity;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.ItemizedOverlay;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.OverlayItem;
import com.baidu.mapapi.utils.CoordinateConvert;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.activity.BaiduMapActivity.MyGeneralListener;
import com.kaixin.android.common.Constants;
import com.kaixin.android.result.LocationResult;
import com.kaixin.android.result.MessageResult;
import com.kaixin.android.result.PublicPageResult;
import com.kaixin.android.result.VoiceResult;
import com.kaixin.android.utils.CallService;
import com.kaixin.android.utils.MessageUtil;
import com.kaixin.android.utils.StringUtil;
import com.kaixin.android.utils.TextUtil;
import com.kaixin.android.view.MyDateTimePickerDialog;
import com.kaixin.android.view.MyDateTimePickerDialog.OnDateTimeSetListener;
/**
* 菜单好友类
*
* @author gyz
*
*/
public class SlaveInfoActivity extends KXActivity{
private Context mContext;
private Button mBack;
private ListView mDisplay;
private Button mVoice;
private Button mMessage;
private Button mLocation;
private TextUtil mTextUtil;
private VoiceAdapter mVoiceAdapter;
private MessageAdapter mMessageAdapter;
// 奴隶的录音数据
/*private List<VoiceResult> mSlaveVoiceResults = new ArrayList<VoiceResult>();
// 奴隶的短信数据
private List<MessageResult> mSlaveMessageResults = new ArrayList<MessageResult>();
// 奴隶的定位数据
private List<PublicPageResult> mMyPublicPageResults = new ArrayList<PublicPageResult>();*/
// 页签
private int mChoosePostition = 0;
private String mUid;
private String mEmail;
private AlertDialog alertDialog;
private MapView mMapDisplay;
private TextView mChooseDate;
MyItemizedOverlay mAddrOverlay = null;
private int mCurrentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
if (mBMapManager == null) {
initEngineManager(this.getApplicationContext());
}
setContentView(R.layout.slaveinfo_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mBack = (Button) findViewById(R.id.slaveinfo_back);
mVoice = (Button) findViewById(R.id.voice_page);
mMessage = (Button) findViewById(R.id.message_page);
mLocation = (Button) findViewById(R.id.location_page);
mDisplay = (ListView) findViewById(R.id.slaveinfo_display);
mMapDisplay = (MapView) findViewById(R.id.bmapView);
mChooseDate = (TextView) findViewById(R.id.choose_date);
}
private void setListener() {
mBack.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭当前界面
finish();
}
});
mVoice.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 如果显示的不是录音内容则显示录音内容数据
if (mChoosePostition != 0) {
mChoosePostition = 0;
mDisplay.setVisibility(View.VISIBLE);
mMapDisplay.setVisibility(View.GONE);
mChooseDate.setVisibility(View.GONE);
mVoice.setBackgroundResource(R.drawable.bottomtabbutton_leftred);
mMessage.setBackgroundResource(R.drawable.bottomtabbutton_white);
mLocation.setBackgroundResource(R.drawable.bottomtabbutton_rightwhite);
mVoiceAdapter = new VoiceAdapter();
mDisplay.setAdapter(mVoiceAdapter);
}
}
});
mMessage.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 如果显示的是好友内容则显示公共主页内容数据
if (mChoosePostition != 1) {
mChoosePostition = 1;
mDisplay.setVisibility(View.VISIBLE);
mMapDisplay.setVisibility(View.GONE);
mChooseDate.setVisibility(View.GONE);
mVoice.setBackgroundResource(R.drawable.bottomtabbutton_leftwhite);
mMessage.setBackgroundResource(R.drawable.bottomtabbutton_red);
mLocation.setBackgroundResource(R.drawable.bottomtabbutton_rightwhite);
mMessageAdapter = new MessageAdapter();
mDisplay.setAdapter(mMessageAdapter);
}
}
});
mLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 如果显示的是好友内容则显示公共主页内容数据
if (mChoosePostition != 2) {
mChoosePostition = 2;
mDisplay.setVisibility(View.GONE);
mMapDisplay.setVisibility(View.VISIBLE);
mChooseDate.setVisibility(View.VISIBLE);
mVoice.setBackgroundResource(R.drawable.bottomtabbutton_leftwhite);
mMessage.setBackgroundResource(R.drawable.bottomtabbutton_white);
mLocation.setBackgroundResource(R.drawable.bottomtabbutton_rightred);
if(!mKXApplication.mSlaveLocationResults.isEmpty()){
for(int i=0; i < mKXApplication.mSlaveLocationResults.size(); i++){
LocationResult location = mKXApplication.mSlaveLocationResults.get(i);
showMap(i, Double.parseDouble(location.getLatitude()),
Double.parseDouble(location.getLongitude()),
location.getLocation());
}
}else{
MessageUtil.showMsg(mContext, "未定位到用户位置!");
}
}
}
});
mDisplay.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
if(mChoosePostition == 0){
String json = CallService.authVoice(mKXApplication.mSlaveVoiceResults.get(position).getVid());
JSONObject object;
try {
object = new JSONObject(json);
boolean success = object.getBoolean("success");
if(!success){
MessageUtil.showImgMsg(mContext, object.getString("data"));
return;
}else{
MessageUtil.showImgMsg(mContext, object.getString("data"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Intent intent = new Intent();
intent.setClass(mContext, PlayVoiceActivity.class);
intent.putExtra("url", mKXApplication.mSlaveVoiceResults.get(position).getUrl());
// CallService.deleteVoice(mKXApplication.mSlaveVoiceResults.get(position).getVid());
mKXApplication.mSlaveVoiceResults.remove(position);
mVoiceAdapter.notifyDataSetChanged();
mContext.startActivity(intent);
}else{
String json = CallService.authMessage(mKXApplication.mSlaveMessageResults.get(position).getMid());
JSONObject object;
try {
object = new JSONObject(json);
boolean success = object.getBoolean("success");
if(!success){
MessageUtil.showImgMsg(mContext, object.getString("data"));
return;
}else{
MessageUtil.showImgMsg(mContext, object.getString("data"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mCurrentPosition = position;
alertDialog = new AlertDialog.Builder(mContext)
.setMessage(mKXApplication.mSlaveMessageResults.get(position).getContent())
.show();
mKXApplication.mSlaveMessageResults.remove(position);
mMessageAdapter.notifyDataSetChanged();
delayCloseController = new DelayCloseController(); // 新建一个任务
delayCloseController.setCloseFlags(CLOSE_ALERTDIALOG); //设置信息标志位
delayCloseController.timer.schedule(delayCloseController, 5000); //启动定时器
}
}
});
mChooseDate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Calendar mycalendar = Calendar.getInstance(Locale.CHINA);
if(!StringUtil.isNull(mChooseDate.getText().toString())){
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = fmt.parse(mChooseDate.getText().toString());
mycalendar.setTime(date);//为Calendar对象设置时间为生日时间
} catch (ParseException e) {
e.printStackTrace();
}
}else{
Date mydate = new Date(); // 获取当前日期Date对象
mycalendar.setTime(mydate);//为Calendar对象设置时间为当前日期
}
new MyDateTimePickerDialog(SlaveInfoActivity.this, mycalendar, new OnDateTimeSetListener() {
@Override
public void onDateTimeSet(int year, int monthOfYear,
int dayOfMonth) {
if(monthOfYear < 10){
mChooseDate.setText(year + "-0" + monthOfYear + "-"
+ dayOfMonth);
}else{
mChooseDate.setText(year + "-" + monthOfYear + "-"
+ dayOfMonth);
}
mMapDisplay.getOverlays().clear();
mMapDisplay.refresh();
getLocation(mChooseDate.getText().toString());
if(!mKXApplication.mSlaveLocationResults.isEmpty()){
for(int i=0; i < mKXApplication.mSlaveLocationResults.size(); i++){
LocationResult location = mKXApplication.mSlaveLocationResults.get(i);
showMap(i, Double.parseDouble(location.getLatitude()),
Double.parseDouble(location.getLongitude()),
location.getLocation());
}
}else{
MessageUtil.showMsg(mContext, "未定位到用户位置!");
}
}
}).show();
}
});
}
private final int CLOSE_ALERTDIALOG = 0; //定义关闭对话框的动作信号标志
private final int CLOSE_SAMPLE_VIEW = 1; //定义关闭SampleView的动作信号标志
private DelayCloseController delayCloseController = null;
private class DelayCloseController extends TimerTask {
private Timer timer = new Timer();
private int actionFlags = 0;//标志位参数
public void setCloseFlags(int flag)
{
actionFlags = flag;
}
@Override
public void run() {
Message messageFinish = new Message();
messageFinish.what = actionFlags ;
mainHandler.sendMessage(messageFinish);
}
}
private Handler mainHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case CLOSE_SAMPLE_VIEW:
if(alertDialog != null && alertDialog.isShowing())
{
alertDialog.dismiss();
}
break;
case CLOSE_ALERTDIALOG:
if(alertDialog != null && alertDialog.isShowing())
{
alertDialog.dismiss(); //关闭对话框
if (delayCloseController.timer != null){
delayCloseController.timer.cancel();
}
}
break;
default:
break;
}
}
};
private MapController mMapController;
private BMapManager mBMapManager;
private void init() {
initMap();
mEmail = getIntent().getStringExtra("email");
// 实例化文本工具
mTextUtil = new TextUtil(mKXApplication);
// 获取我的好友
getMySlaveInfo();
// 添加适配器
mVoiceAdapter = new VoiceAdapter();
mDisplay.setAdapter(mVoiceAdapter);
}
private void initMap() {
mMapDisplay.getController().setZoom(17);
mMapDisplay.getController().enableClick(true);
mMapDisplay.setBuiltInZoomControls(true);
mMapController = mMapDisplay.getController();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date mydate = new Date(); // 获取当前日期Date对象
mChooseDate.setText(sdf.format(mydate));
}
public void initEngineManager(Context context) {
if (mBMapManager == null) {
mBMapManager = new BMapManager(context);
}
if (!mBMapManager.init(Constants.BAIDU_MAP_KEY, new MyGeneralListener())) {
Toast.makeText(this.getApplicationContext(), "BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
}
}
class MyGeneralListener implements MKGeneralListener {
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(SlaveInfoActivity.this, "您的网络出错啦!", Toast.LENGTH_LONG).show();
} else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(SlaveInfoActivity.this, "输入正确的检索条件!", Toast.LENGTH_LONG).show();
}
// ...
}
@Override
public void onGetPermissionState(int iError) {
if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
// 授权Key错误:
Log.e("map", "permissio denied. check your app key");
}
}
}
private void showMap(int i, double latitude, double longtitude, String address) {
GeoPoint point1 = new GeoPoint((int) (latitude * 1e6), (int) (longtitude * 1e6));
point1 = CoordinateConvert.fromGcjToBaidu(point1);
mMapController.setCenter(point1);
Drawable marker = chooseOverlay(i);
// Drawable marker = this.getResources().getDrawable(R.drawable.icon_marka);
// 为maker定义位置和边界
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
mAddrOverlay = new MyItemizedOverlay(marker, mMapDisplay);
GeoPoint point = new GeoPoint((int) (latitude * 1e6), (int) (longtitude * 1e6));
point = CoordinateConvert.fromGcjToBaidu(point);
OverlayItem addrItem = new OverlayItem(point, "", address);
mAddrOverlay.addItem(addrItem);
mMapDisplay.getOverlays().add(mAddrOverlay);
mMapDisplay.refresh();
}
private Drawable chooseOverlay(int i) {
Drawable marker = null;
switch(i){
case 1:
marker = this.getResources().getDrawable(R.drawable.icon_marka);
break;
case 2:
marker = this.getResources().getDrawable(R.drawable.icon_markb);
break;
case 3:
marker = this.getResources().getDrawable(R.drawable.icon_markc);
break;
case 4:
marker = this.getResources().getDrawable(R.drawable.icon_markd);
break;
case 5:
marker = this.getResources().getDrawable(R.drawable.icon_marke);
break;
case 6:
marker = this.getResources().getDrawable(R.drawable.icon_markf);
break;
case 7:
marker = this.getResources().getDrawable(R.drawable.icon_markg);
break;
case 8:
marker = this.getResources().getDrawable(R.drawable.icon_markh);
break;
case 9:
marker = this.getResources().getDrawable(R.drawable.icon_marki);
break;
case 10:
marker = this.getResources().getDrawable(R.drawable.icon_markj);
break;
default:
marker = this.getResources().getDrawable(R.drawable.icon_markj);
break;
}
return marker;
}
/*
* 要处理overlay点击事件时需要继承ItemizedOverlay
* 不处理点击事件时可直接生成ItemizedOverlay.
*/
class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {
//用MapView构造ItemizedOverlay
public MyItemizedOverlay(Drawable mark,MapView mapView){
super(mark,mapView);
}
protected boolean onTap(int index) {
//在此处理item点击事件
// System.out.println("item onTap: "+index);
Toast.makeText(SlaveInfoActivity.this, "地址:"+mKXApplication.mSlaveLocationResults.get(index).getLocation()
+"\n时间:" + mKXApplication.mSlaveLocationResults.get(index).getTime(), Toast.LENGTH_SHORT).show();
return true;
}
public boolean onTap(GeoPoint pt, MapView mapView){
//在此处理MapView的点击事件,当返回 true时
super.onTap(pt,mapView);
return false;
}
}
/**
* 获取我的好友
*/
private void getMySlaveInfo() {
if (mKXApplication.mSlaveVoiceResults.isEmpty()) {
String json = CallService.getMySalveVoice(mEmail);
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
VoiceResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new VoiceResult();
result.setVid(array.getJSONObject(i).getString("vid"));
result.setName(array.getJSONObject(i).getString("name"));
result.setUrl(array.getJSONObject(i).getString("url"));
result.setTime(array.getJSONObject(i).getString("time"));
result.setInfo(array.getJSONObject(i).getString("info"));
mKXApplication.mSlaveVoiceResults.add(result);
}
}catch (Exception e) {
}
}
if (mKXApplication.mSlaveMessageResults.isEmpty()) {
String json = CallService.getMySalveMessage(mEmail);
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
MessageResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new MessageResult();
result.setMid(array.getJSONObject(i).getString("vid"));
result.setTitle(array.getJSONObject(i).getString("title"));
result.setContent(array.getJSONObject(i).getString("content"));
result.setTime(array.getJSONObject(i).getString("time"));
result.setInfo(array.getJSONObject(i).getString("info"));
mKXApplication.mSlaveMessageResults.add(result);
}
}catch (Exception e) {
}
}
Date mydate = new Date(); // 获取当前日期Date对象
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd");
getLocation(fmt.format(mydate));
}
private void getLocation(String date) {
String json = CallService.getMySalveLocation(mEmail, date);
try {
JSONObject object = new JSONObject(json);
JSONArray array = object.getJSONArray("data");
LocationResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new LocationResult();
result.setTime(array.getJSONObject(i).getString("time"));
result.setLocation(array.getJSONObject(i).getString("location"));
result.setLatitude(array.getJSONObject(i).getString("latitude"));
result.setLongitude(array.getJSONObject(i).getString("longitude"));
mKXApplication.mSlaveLocationResults.add(result);
}
}catch (Exception e) {
}
}
private class VoiceAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mSlaveVoiceResults.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.slaveinfo_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView
.findViewById(R.id.slaveinfo_item_name);
holder.info = (TextView) convertView
.findViewById(R.id.slaveinfo_item_info);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
VoiceResult result = mKXApplication.mSlaveVoiceResults.get(position);
holder.name.setText(result.getTime());
holder.info.setText(result.getInfo());
return convertView;
}
class ViewHolder {
TextView name;
TextView time;
TextView info;
}
}
private class MessageAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mSlaveMessageResults.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.slaveinfo_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView
.findViewById(R.id.slaveinfo_item_name);
holder.info = (TextView) convertView
.findViewById(R.id.slaveinfo_item_info);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
MessageResult result = mKXApplication.mSlaveMessageResults.get(position);
holder.name.setText("点开查看");
holder.info.setText(result.getInfo());
return convertView;
}
class ViewHolder {
TextView name;
TextView time;
TextView info;
}
}
}