/**
*
*/
package com.d3.d3xmpp.fragments;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.d3.d3xmpp.R;
import com.d3.d3xmpp.activites.ChatActivity;
import com.d3.d3xmpp.constant.Constants;
import com.d3.d3xmpp.constant.MyApplication;
import com.d3.d3xmpp.d3View.D3Fragment;
import com.d3.d3xmpp.d3View.D3View;
import com.d3.d3xmpp.model.Friend;
import com.d3.d3xmpp.model.User;
import com.d3.d3xmpp.util.LoadThreadNoDialog;
import com.d3.d3xmpp.util.Tool;
import com.d3.d3xmpp.xmpp.XmppConnection;
/**
* @author MZH
*
*/
public class AdrFragment extends D3Fragment{
@D3View(click="onClick")Button resetBtn,searchSureBtn,searchBtn;
@D3View public LinearLayout searchView;
@D3View EditText searchText;
MapView mMapView = null;
BaiduMap mBaiduMap ;
public LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
BitmapDescriptor mCurrentMarker;
boolean isFirstLoc = true;
List<Overlay> markers = new ArrayList<Overlay>();
public Timer timer1 = new Timer();
public Timer timer2 = new Timer();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
SDKInitializer.initialize(getActivity().getApplicationContext());
View view = setContentView(inflater, R.layout.acti_adr);
mMapView = (MapView) view.findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
// ������λͼ��
mBaiduMap.setMyLocationEnabled(true);
// ��λ��ʼ��
mLocClient = new LocationClient(getActivity());
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// ��gps
option.setCoorType("bd09ll"); // ������������
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
initFriendAdr();
timer1.schedule(new TimerTask() { //1���ʼ��5����ˢ��һ��
@Override
public void run() {
initFriendAdr();
}
}, 1000,Constants.UPDATE_TIME);
timer2.schedule(new TimerTask() { //1���ʼ��5����ˢ��һ��
@Override
public void run() {
mLocClient.start();
}
}, 1000,Constants.ADR_UPDATE_TIME);
return view;
}
public void initFriendAdr(){
for (Overlay marker : markers) {
marker.remove();
}
for (final Friend friend : XmppConnection.getInstance().getFriendBothList()) {
Map<String, String> map = new HashMap<String, String>();
map.put("userId", friend.username);
new LoadThreadNoDialog(getActivity(),Constants.URL_GET_ADR,map) {
@Override
protected void refreshUI(String result) {
String[] latAndlon = result.split(",");
double lat = Double.valueOf(latAndlon[0]);
double lon = Double.valueOf(latAndlon[1]);
if (lat != 4.9E-324 && lon != 4.9E-324) {
LatLng point = new LatLng(lat, lon);
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_gcoding);
//����Markerͼ��
OverlayOptions option = new MarkerOptions()
.position(point)
.icon(bitmap)
.title(friend.username);
markers.add(mBaiduMap.addOverlay(option));
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(final Marker marker) {
new AlertDialog.Builder(getActivity())
.setTitle("��ʾ")
.setMessage("���Ǻ���"+marker.getTitle()+",Ҫ��Ta������")
.setPositiveButton("��", new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setClass(getActivity(), ChatActivity.class);
intent.putExtra("chatName", marker.getTitle());
startActivity(intent);
}
})
.setNegativeButton("��", null)
.show();
return false;
}
});
}
}
};
}
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.resetBtn:
isFirstLoc = true;
if (!mLocClient.isStarted()) {
mLocClient.start();
}
break;
case R.id.searchBtn:
searchView.setVisibility(View.VISIBLE);
break;
case R.id.searchSureBtn:
String searchString = searchText.getText().toString();
if (searchString.equals("")) {
searchView.setVisibility(View.GONE);
}
else {
if (XmppConnection.getInstance().getFriendBothList().contains(new Friend(searchString))) {
User user = new User(XmppConnection.getInstance().getUserInfo(searchString));
if (user.lat != 4.9E-324 && user.lon != 4.9E-324) {
Tool.initToast(getActivity().getApplicationContext(), "�ҵ����ѣ������Ƶ�TA��λ��..");
LatLng ll = new LatLng(user.lat,user.lon);
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
searchView.setVisibility(View.GONE);
}
else {
Tool.initToast(getActivity().getApplicationContext(), "���ߺ���û��������ֵ�Ŷ");
}
}
else {
Tool.initToast(getActivity().getApplicationContext(), "û���������Ŷ");
}
}
break;
default:
break;
}
}
/**
* ��λSDK��������
*/
class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view ���ٺ��ڴ����½��յ�λ��
if (location == null || mMapView == null)
return;
MyApplication.lat = location.getLatitude();
MyApplication.lon = location.getLongitude();
if (MyApplication.sharedPreferences.getBoolean("isShare", true)) {
MyApplication.getInstance().uploadAdr();
}
else {
mLocClient.stop();
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// �˴����ÿ�����ȡ���ķ�����Ϣ��˳ʱ��0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
mLocClient.stop();
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
@Override
public void onDestroy() {
mLocClient.stop();
super.onDestroy();
}
}