package cn.flightfeather.thirdapp.activity;
|
|
import android.app.AlertDialog;
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.graphics.Color;
|
import android.net.Uri;
|
import android.os.Bundle;
|
import android.os.Handler;
|
import android.os.Message;
|
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.widget.LinearLayoutManager;
|
import android.support.v7.widget.RecyclerView;
|
import android.util.Log;
|
import android.view.View;
|
import android.widget.AdapterView;
|
import android.widget.ArrayAdapter;
|
import android.widget.Spinner;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.amap.api.maps.AMap;
|
import com.amap.api.maps.CameraUpdateFactory;
|
import com.amap.api.maps.MapView;
|
import com.amap.api.maps.model.BitmapDescriptor;
|
import com.amap.api.maps.model.BitmapDescriptorFactory;
|
import com.amap.api.maps.model.CameraPosition;
|
import com.amap.api.maps.model.LatLng;
|
import com.amap.api.maps.model.Marker;
|
import com.amap.api.maps.model.MarkerOptions;
|
import com.amap.api.maps.model.PolylineOptions;
|
import com.amap.api.maps.model.TextOptions;
|
import com.amap.api.services.core.LatLonPoint;
|
import com.amap.api.services.district.DistrictItem;
|
import com.amap.api.services.district.DistrictResult;
|
import com.amap.api.services.district.DistrictSearch;
|
import com.amap.api.services.district.DistrictSearchQuery;
|
import com.ping.greendao.gen.DaoSession;
|
import com.ping.greendao.gen.ScenseDao;
|
|
import org.greenrobot.greendao.query.QueryBuilder;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.concurrent.Executors;
|
|
import cn.flightfeather.thirdapp.CommonApplication;
|
import cn.flightfeather.thirdapp.R;
|
import cn.flightfeather.thirdapp.adapter.RecyclerItemClickListener;
|
import cn.flightfeather.thirdapp.adapter.ScenseListAdapter;
|
import cn.flightfeather.thirdapp.bean.entity.City;
|
import cn.flightfeather.thirdapp.bean.entity.District;
|
import cn.flightfeather.thirdapp.bean.entity.Domainitem;
|
import cn.flightfeather.thirdapp.bean.entity.Province;
|
import cn.flightfeather.thirdapp.bean.entity.Scense;
|
import cn.flightfeather.thirdapp.bean.entity.Subtask;
|
import cn.flightfeather.thirdapp.bean.entity.Town;
|
import cn.flightfeather.thirdapp.module.MainActivity;
|
import cn.flightfeather.thirdapp.task.ObtainBoundaryRunnable;
|
import cn.flightfeather.thirdapp.util.Area;
|
import cn.flightfeather.thirdapp.util.CommonUtils;
|
import cn.flightfeather.thirdapp.util.Constant;
|
import cn.flightfeather.thirdapp.util.Domain;
|
import cn.flightfeather.thirdapp.util.NavigationHelper;
|
|
import static cn.flightfeather.thirdapp.util.CommonUtils.getDomainItemByCalalogGuid;
|
|
public class ScenseMapActivity extends AppCompatActivity implements View.OnClickListener,
|
RecyclerItemClickListener.OnItemClickListener, DistrictSearch.OnDistrictSearchListener
|
, AdapterView.OnItemSelectedListener {
|
|
private static final String TAG = "ScenseMapActivity";
|
private static final int SHOWMODE_SCENSE = 1;
|
private static final int SHOWMODE_TASK_SCENSE = 2;
|
private MapView mMapView;
|
private AMap aMap;
|
private float mCurrentScalePerPixel; //当前地图缩放的大小
|
private CommonApplication application;
|
private ScenseDao mScenseDao;
|
private Area curArea;
|
private ArrayList<Scense> mScenseList = new ArrayList<>();
|
private ArrayList<Scense> mShownScenseList = new ArrayList<>();
|
private ArrayList<Byte> mScenseTypeList = new ArrayList<>();
|
private ScenseListAdapter mAdapter;
|
private ArrayList<Marker> markerList = new ArrayList<>();
|
private BitmapDescriptor[] bitmapDescriptorArr;
|
private List<Domainitem> scenseTypeDomainItemList;
|
private int[] markerIDS = {R.drawable.icon_mark_red, R.drawable.icon_mark_green, R.drawable.icon_mark_orange
|
, R.drawable.icon_mark_purple, R.drawable.icon_mark_blue};
|
// private int[] markerIDS_sel = {R.drawable.icon_mark_red_sel, R.drawable.icon_mark_green_sel,
|
// R.drawable.icon_mark_orange_sel, R.drawable.icon_mark_purple_sel, R.drawable.icon_mark_blue_sel};
|
private int curPos;
|
// private HashMap<Integer, Integer> bdTypeMap = new HashMap<>(); //用于记录marker用的是哪一个颜色
|
private List<Province> mProvinceList;
|
private List<City> mCityList;
|
private List<District> mDistrictList;
|
private List<Town> mTownList;
|
private List<City> mShowCityList = new ArrayList<>();
|
private List<District> mShowDistrictList = new ArrayList<>();
|
private List<Town> mShowTownList = new ArrayList<>();
|
private RecyclerView mRecyclerView;
|
private View rl_scenseinfo;
|
private TextView tv_scenseName, tv_address, tv_lat, tv_lng, tv_contact, tv_tel;
|
private Scense mSelectedScense;
|
private int mLastPos = -1;
|
private BitmapDescriptor mLastBitmapDesc;
|
private BitmapDescriptor mSelectedBitmapDesc;
|
private int mScenseTypeChoice;
|
private ArrayList<Subtask> mSubTaskList;
|
private int mCurrentShowMode = SHOWMODE_SCENSE;
|
private View iBtn_data, iBtn_inspection;
|
private DistrictSearch mDistrictSearch;
|
private LatLonPoint mCenterLatLng;
|
private PolylineOptions mDistrictBoundary;
|
private Handler mHandler = new Handler() {
|
@Override
|
public void handleMessage(Message msg) {
|
if (18 == msg.what) {
|
mDistrictBoundary = (PolylineOptions) msg.obj;
|
aMap.addPolyline(mDistrictBoundary);
|
}
|
}
|
};
|
private View iBtn2;
|
private Spinner spinner_province;
|
private Spinner spinner_city;
|
private Spinner spinner_district;
|
private Spinner spinner_town;
|
private ArrayAdapter<String> mCityAdapter;
|
private ArrayAdapter<String> mDistrictAdapter;
|
private ArrayAdapter<String> mTownAdapter;
|
private ArrayList<String> mProvinceNameList = new ArrayList<>();
|
private ArrayList<String> mCityNameList = new ArrayList<>();
|
private ArrayList<String> mDistrictNameList = new ArrayList<>();
|
private ArrayList<String> mTownNameList = new ArrayList<>();
|
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
setContentView(R.layout.activity_scense_map);
|
initUI(savedInstanceState);
|
initData();
|
}
|
|
/**
|
* 初始化UI
|
*
|
* @param savedInstanceState bundle
|
*/
|
private void initUI(Bundle savedInstanceState) {
|
findViewById(R.id.img_right).setOnClickListener(this);
|
findViewById(R.id.spinner_topclass_task).setVisibility(View.GONE);
|
findViewById(R.id.iBtn1).setOnClickListener(this);
|
spinner_province = (Spinner)findViewById(R.id.spinner_province);
|
spinner_city = (Spinner)findViewById(R.id.spinner_city);
|
spinner_district = (Spinner)findViewById(R.id.spinner_district);
|
spinner_town = (Spinner)findViewById(R.id.spinner_town);
|
iBtn2 = findViewById(R.id.iBtn2);
|
iBtn2.setOnClickListener(this);
|
findViewById(R.id.iBtn3).setVisibility(View.GONE);
|
findViewById(R.id.iBtn4).setVisibility(View.GONE);
|
findViewById(R.id.iBtn5).setVisibility(View.GONE);
|
findViewById(R.id.tv_level).setVisibility(View.GONE);
|
findViewById(R.id.view_empty1).setOnClickListener(this);
|
findViewById(R.id.iBtn_navi).setOnClickListener(this);
|
findViewById(R.id.iBtn_call).setOnClickListener(this);
|
iBtn_data = findViewById(R.id.iBtn_data);
|
iBtn_inspection = findViewById(R.id.iBtn_inspection);
|
iBtn_data.setVisibility(View.GONE);
|
iBtn_inspection.setVisibility(View.GONE);
|
iBtn_data.setOnClickListener(this);
|
iBtn_inspection.setOnClickListener(this);
|
rl_scenseinfo = findViewById(R.id.rl_scenseinfo);
|
tv_scenseName = (TextView) findViewById(R.id.tv_scenseName);
|
tv_address = (TextView) findViewById(R.id.tv_address);
|
tv_lat = (TextView) findViewById(R.id.tv_lat);
|
tv_lng = (TextView) findViewById(R.id.tv_lng);
|
tv_contact = (TextView) findViewById(R.id.tv_contact);
|
tv_tel = (TextView) findViewById(R.id.tv_tel);
|
((TextView) findViewById(R.id.actionbar_title)).setText("场景地图");
|
findViewById(R.id.img_left).setOnClickListener(this);
|
mRecyclerView = (RecyclerView) findViewById(R.id.rv_scenselist);
|
LinearLayoutManager manager = new LinearLayoutManager(this);
|
mRecyclerView.setLayoutManager(manager);
|
mAdapter = new ScenseListAdapter(this, mShownScenseList);
|
mRecyclerView.setAdapter(mAdapter);
|
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, this));
|
initMap(savedInstanceState);
|
}
|
|
private void initMap(Bundle savedInstanceState) {
|
mMapView = (MapView) findViewById(R.id.map);
|
mMapView.onCreate(savedInstanceState);
|
aMap = mMapView.getMap();
|
//不合理,通过顶层任务所在区县初始化位置
|
aMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658)));
|
aMap.getUiSettings().setRotateGesturesEnabled(false);
|
aMap.getUiSettings().setScaleControlsEnabled(true);
|
mDistrictSearch = new DistrictSearch(this);
|
mDistrictSearch.setOnDistrictSearchListener(this);
|
aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
|
@Override
|
public void onCameraChange(CameraPosition cameraPosition) {
|
}
|
|
@Override
|
public void onCameraChangeFinish(CameraPosition cameraPosition) {
|
// tv_scenseDesc.setTitle(lngCurrent + "," + latCurrent);
|
float scalePerPixel = aMap.getScalePerPixel();
|
if (scalePerPixel - mCurrentScalePerPixel > 0) {
|
//缩小
|
if (mCurrentScalePerPixel / scalePerPixel < 0.85) {
|
mCurrentScalePerPixel = scalePerPixel;
|
Log.e(TAG, "onCameraChangeFinish()缩小");
|
invalidate();
|
}
|
} else {
|
//变大
|
if (scalePerPixel / mCurrentScalePerPixel < 0.75) {
|
mCurrentScalePerPixel = aMap.getScalePerPixel();
|
Log.e(TAG, "onCameraChangeFinish()变大");
|
invalidate();
|
}
|
}
|
}
|
});
|
mCurrentScalePerPixel = aMap.getScalePerPixel();
|
}
|
|
/**
|
* 获取数据
|
*/
|
private void initData() {
|
mSubTaskList = (ArrayList<Subtask>) getIntent().getSerializableExtra(Constant.KEY_INTENT_TODAY_TASKLIST);
|
application = (CommonApplication) getApplication();
|
DaoSession daoSession = application.getDaoSession();
|
mScenseDao = application.getDaoSession().getScenseDao();
|
initArea(daoSession);
|
initBitmapDescriptor();
|
getScenseLocal();
|
}
|
|
private void initBitmapDescriptor() {
|
//注:***没有值域就会出问题
|
DaoSession daoSession = application.getDaoSession();
|
scenseTypeDomainItemList = getDomainItemByCalalogGuid(daoSession, Domain.DOMAINGUID_SCENSETYPE);
|
bitmapDescriptorArr = new BitmapDescriptor[scenseTypeDomainItemList.size()];
|
// bitmapDescriptorArr_sel = new BitmapDescriptor[scenseTypeDomainItemList.size()];
|
for (int i = 0; i < scenseTypeDomainItemList.size(); i++) {
|
bitmapDescriptorArr[i] = BitmapDescriptorFactory.fromResource(markerIDS[i % markerIDS.length]);
|
// bitmapDescriptorArr_sel[i] = BitmapDescriptorFactory.fromResource(markerIDS_sel[i % markerIDS_sel.length]);
|
}
|
mSelectedBitmapDesc = BitmapDescriptorFactory.fromResource(R.drawable.icon_mark_blue);
|
}
|
|
private void initArea(DaoSession daoSession) {
|
curArea = new Area();
|
curArea.setLevel(Domain.LEVEL_CITY);
|
mProvinceList = daoSession.getProvinceDao().loadAll();
|
mProvinceNameList = new ArrayList<>();
|
for (Province p : mProvinceList) {
|
mProvinceNameList.add(p.getProvincename());
|
}
|
mCityList = daoSession.getCityDao().loadAll();
|
mCityNameList = new ArrayList<>();
|
if (!CommonUtils.isMDUCG(mProvinceNameList.get(0))) {
|
mCityNameList.add(Constant.EMPTY_STRING);
|
}
|
for (City c : mCityList) {
|
mCityNameList.add(c.getCityname());
|
}
|
mDistrictList = daoSession.getDistrictDao().loadAll();
|
mDistrictNameList = new ArrayList<>();
|
mDistrictNameList.add(Constant.EMPTY_STRING);
|
for (District d : mDistrictList) {
|
if (d.getCityid().equals(mCityList.get(0).getCityId())) {
|
mDistrictNameList.add(d.getDistrictname());
|
}
|
}
|
mTownList = daoSession.getTownDao().loadAll();
|
mTownNameList = new ArrayList<>();
|
mTownNameList.add(Constant.EMPTY_STRING);
|
curArea.setProvinceCode(mProvinceList.get(0).getProvincecode());
|
curArea.setProvinceName(mProvinceList.get(0).getProvincename());
|
curArea.setCityCode(mCityList.get(0).getCitycode());
|
curArea.setCityName(mCityList.get(0).getCityname());
|
curArea.setDistrictCode(Constant.EMPTY_STRING);
|
curArea.setDistrictName(Constant.EMPTY_STRING);
|
curArea.setTownCode(Constant.EMPTY_STRING);
|
curArea.setTownName(Constant.EMPTY_STRING);
|
ArrayAdapter<String> mProvinceAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mProvinceNameList);
|
spinner_province.setAdapter(mProvinceAdapter);
|
mCityAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mCityNameList);
|
spinner_city.setAdapter(mCityAdapter);
|
mDistrictAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mDistrictNameList);
|
spinner_district.setAdapter(mDistrictAdapter);
|
mTownAdapter = new ArrayAdapter<>(this, R.layout.item_spinner_area, mTownNameList);
|
spinner_town.setAdapter(mTownAdapter);
|
spinner_province.setOnItemSelectedListener(this);
|
spinner_city.setOnItemSelectedListener(this);
|
spinner_district.setOnItemSelectedListener(this);
|
spinner_town.setOnItemSelectedListener(this);
|
}
|
|
private void getScenseLocal() {
|
mLastPos = -1;
|
aMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658)));
|
QueryBuilder<Scense> qb;
|
Log.d(TAG, "getScenseLocal()" + curArea.getLevel() + "Province:" + curArea.getProvinceCode() + curArea.getProvinceName()
|
+ ";city:" + curArea.getCityCode() + curArea.getCityName() + ";district:" + curArea.getDistrictCode() + curArea.getDistrictName()
|
+ ";town:" + curArea.getTownCode() + curArea.getTownName());
|
switch (curArea.getLevel()) {
|
case Domain.LEVEL_PROVINCE:
|
qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()))
|
.orderAsc(ScenseDao.Properties.Typeid);
|
break;
|
case Domain.LEVEL_CITY:
|
qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()),
|
ScenseDao.Properties.Citycode.eq(curArea.getCityCode()))
|
.orderAsc(ScenseDao.Properties.Typeid);
|
break;
|
case Domain.LEVEL_DISTRICT:
|
qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()),
|
ScenseDao.Properties.Citycode.eq(curArea.getCityCode()),
|
ScenseDao.Properties.Districtcode.eq(curArea.getDistrictCode()))
|
.orderAsc(ScenseDao.Properties.Typeid);
|
break;
|
case Domain.LEVEL_TOWN:
|
qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()),
|
ScenseDao.Properties.Citycode.eq(curArea.getCityCode()),
|
ScenseDao.Properties.Districtcode.eq(curArea.getDistrictCode()),
|
ScenseDao.Properties.Towncode.eq(curArea.getTownCode()))
|
.orderAsc(ScenseDao.Properties.Typeid);
|
break;
|
default:
|
qb = mScenseDao.queryBuilder().where(ScenseDao.Properties.Provincecode.eq(curArea.getProvinceCode()))
|
.orderAsc(ScenseDao.Properties.Typeid);
|
break;
|
}
|
List<Scense> list = qb.where(ScenseDao.Properties.Extension1.notEq(Domain.SCENSE_DISABLE))
|
.orderAsc(ScenseDao.Properties.Districtcode, ScenseDao.Properties.Index).list();
|
mScenseList.clear();
|
mShownScenseList.clear();
|
mScenseTypeList.clear();
|
mScenseTypeList.add(Domain.SCENSETYPE_ALL);
|
for (Scense scense : list) {
|
if (!mScenseTypeList.contains(scense.getTypeid())) {
|
mScenseTypeList.add(scense.getTypeid());
|
}
|
mScenseList.add(scense);
|
mShownScenseList.add(scense);
|
}
|
Log.e(TAG, "size:"+mScenseList.size());
|
if (mScenseTypeList.size() <= 2) {
|
iBtn2.setVisibility(View.GONE);
|
} else {
|
iBtn2.setVisibility(View.VISIBLE);
|
}
|
invalidate();
|
}
|
|
/**
|
*
|
*/
|
private void invalidate() {
|
mAdapter.notifyDataSetChanged();
|
aMap.clear();
|
markerList.clear();
|
if (mDistrictBoundary != null) {
|
aMap.addPolyline(mDistrictBoundary);
|
}
|
int length = mShownScenseList.size();
|
for (int i = 0; i < length; i++) {
|
Scense info = mShownScenseList.get(i);
|
LatLng ll;
|
if (info.getLatitude() == null || info.getLongitude() == null) {
|
ll = new LatLng(31.230378, 121.473658);
|
info.setLatitude(31.230378);
|
info.setLongitude(121.473658);
|
} else {
|
ll = new LatLng(info.getLatitude(), info.getLongitude());
|
}
|
int j;
|
BitmapDescriptor bitmapDescriptor = bitmapDescriptorArr[0];
|
for (j = 0; j < scenseTypeDomainItemList.size(); j++) {
|
Domainitem domainitem = scenseTypeDomainItemList.get(j);
|
if (info.getTypeid() == Integer.parseInt(domainitem.getValue())) {
|
bitmapDescriptor = bitmapDescriptorArr[j];
|
break;
|
}
|
}
|
Marker marker = aMap.addMarker(new MarkerOptions().icon(bitmapDescriptor).position(ll));
|
markerList.add(marker);
|
//添加序号
|
String displayId = String.valueOf(info.getIndex());
|
aMap.addText(new TextOptions().zIndex(marker.getZIndex()).text(displayId)
|
.backgroundColor(Color.TRANSPARENT).fontColor(Color.WHITE)
|
.fontSize(33)
|
.position(new LatLng(getLat(aMap.getScalePerPixel(), ll.latitude), ll.longitude)));
|
}
|
// 初始化搜索模块,注册事件监听
|
aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
|
public boolean onMarkerClick(final Marker marker) {
|
// Log.e("Location", "markerList.size:" + markerList.size());
|
curPos = markerList.indexOf(marker);
|
selectScense(marker);
|
return true;
|
}
|
});
|
}
|
|
private double getLat(float scalePerPixel, double lat) {
|
return 0.0004 * scalePerPixel + lat;
|
}
|
|
private void selectScense(Marker marker) {
|
mSelectedScense = mShownScenseList.get(curPos);
|
if (mLastPos != -1) {
|
markerList.get(mLastPos).setIcon(mLastBitmapDesc);
|
}
|
mLastBitmapDesc = marker.getIcons().get(0);
|
marker.setIcon(mSelectedBitmapDesc);
|
moveToSelectedScense();
|
if (mRecyclerView.isShown()) {
|
mRecyclerView.setVisibility(View.GONE);
|
}
|
showScenseInfo();
|
mLastPos = curPos;
|
}
|
|
private void moveToSelectedScense() {
|
aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(mSelectedScense.getLatitude(), mSelectedScense.getLongitude()), 15));
|
}
|
|
// /**
|
// * 获取场景:首次加载获取服务端全部场景数据,存入本地数据库;
|
// * 当程序不退出,则获取本地数据即可。
|
// */
|
// private void getScense() {
|
// ScenseService scenseService = application.getRetrofit().create(ScenseService.class);
|
// Call<ArrayList<Scense>> call = scenseService.getAllScenses();
|
// call.enqueue(new Callback<ArrayList<Scense>>() {
|
// @Override
|
// public void onResponse(Call<ArrayList<Scense>> call, Response<ArrayList<Scense>> response) {
|
// if (response.body() != null) {
|
//
|
// } else if (response.errorBody() != null) {
|
//
|
// }
|
// }
|
//
|
// @Override
|
// public void onFailure(Call<ArrayList<Scense>> call, Throwable t) {
|
//
|
// }
|
// });
|
// }
|
|
private void searchArea(String area) {
|
DistrictSearchQuery query = new DistrictSearchQuery();
|
query.setKeywords(area);//传入关键字
|
query.setShowBoundary(true);//是否返回边界值
|
mDistrictSearch.setQuery(query);
|
mDistrictSearch.searchDistrictAsyn();
|
}
|
|
@Override
|
protected void onResume() {
|
super.onResume();
|
mMapView.onResume();
|
}
|
|
@Override
|
protected void onPause() {
|
super.onPause();
|
mMapView.onPause();
|
}
|
|
@Override
|
protected void onDestroy() {
|
super.onDestroy();
|
mMapView.onDestroy();
|
}
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.img_left:
|
this.finish();
|
break;
|
case R.id.img_right:
|
toggleView(mRecyclerView);
|
break;
|
case R.id.iBtn2:
|
showScenseTypeDialog();
|
break;
|
case R.id.iBtn1:
|
//今日任务地图
|
if (mCurrentShowMode == SHOWMODE_SCENSE) {
|
mCurrentShowMode = SHOWMODE_TASK_SCENSE;
|
getSubTaskScense();
|
iBtn_data.setVisibility(View.VISIBLE);
|
iBtn_inspection.setVisibility(View.VISIBLE);
|
} else {
|
mCurrentShowMode = SHOWMODE_SCENSE;
|
getScenseLocal();
|
iBtn_data.setVisibility(View.GONE);
|
iBtn_inspection.setVisibility(View.GONE);
|
}
|
break;
|
case R.id.view_empty1:
|
toggleView(rl_scenseinfo);
|
if (mCurrentShowMode == SHOWMODE_SCENSE && mScenseTypeList.size() > 2) {
|
iBtn2.setVisibility(View.VISIBLE);
|
}
|
break;
|
case R.id.iBtn_call:
|
String tel = mSelectedScense.getContactst();
|
if (tel != null && CommonUtils.checkCellphone(tel)) {
|
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + mSelectedScense.getContactst()));
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
startActivity(intent);
|
} else {
|
Toast.makeText(this, "当前号码不可用,请重新确认号码。", Toast.LENGTH_SHORT).show();
|
}
|
break;
|
case R.id.iBtn_navi:
|
if (NavigationHelper.haveGaodeMap(getApplicationContext())) {
|
NavigationHelper.openGaodeMapToGuide(this, mSelectedScense.getLatitude(), mSelectedScense.getLongitude(), mSelectedScense.getLocation());
|
} else if (NavigationHelper.haveBaiduMap(getApplicationContext())) {
|
NavigationHelper.openBaiduMapToGuide(this, mSelectedScense.getLocation(), mSelectedScense.getLatitude(), mSelectedScense.getLongitude());
|
} else {
|
NavigationHelper.openBrowserToGuide(this, mSelectedScense.getLocation(), mSelectedScense.getLatitude(), mSelectedScense.getLongitude());
|
}
|
break;
|
case R.id.iBtn_data:
|
Intent detailIntent = new Intent(this, TaskDetailActivity.class);
|
detailIntent.putExtra(Constant.KEY_INTENT_SUBTASK, mSubTaskList.get(curPos));
|
startActivity(detailIntent);
|
break;
|
case R.id.iBtn_inspection:
|
Intent inspectionIntent = new Intent(this, MainActivity.class);
|
inspectionIntent.putExtra(Constant.KEY_INTENT_SUBTASK, mSubTaskList.get(curPos));
|
setResult(RESULT_OK, inspectionIntent);
|
this.finish();
|
break;
|
}
|
}
|
|
private void getSubTaskScense() {
|
mLastPos = -1;
|
aMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(31.230378, 121.473658)));
|
mShownScenseList.clear();
|
for (Subtask subtask : mSubTaskList) {
|
Scense scense = mScenseDao.queryBuilder().where(ScenseDao.Properties.Guid.eq(subtask.getScenseid())).unique();
|
if (scense != null) {
|
mShownScenseList.add(scense);
|
}
|
}
|
if (mShownScenseList.size() == 0) {
|
Toast.makeText(this, "您今日暂无任务。", Toast.LENGTH_SHORT).show();
|
} else {
|
invalidate();
|
}
|
if (iBtn2.isShown()) {
|
iBtn2.setVisibility(View.GONE);
|
}
|
}
|
|
private void showScenseTypeDialog() {
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
final String[] items = new String[mScenseTypeList.size()];
|
for (int i = 0; i < mScenseTypeList.size(); i++) {
|
for (Domainitem domainitem : scenseTypeDomainItemList) {
|
if (i == 0) {
|
items[i] = "所有类型";
|
break;
|
} else {
|
if (domainitem.getValue().equals(String.valueOf(mScenseTypeList.get(i)))) {
|
items[i] = domainitem.getText();
|
break;
|
}
|
}
|
}
|
}
|
builder.setSingleChoiceItems(items, mScenseTypeChoice,
|
new DialogInterface.OnClickListener() {
|
@Override
|
public void onClick(DialogInterface dialog, int which) {
|
mScenseTypeChoice = which;
|
dialog.dismiss();
|
switchScenseType();
|
}
|
});
|
builder.create().show();
|
}
|
|
private void switchScenseType() {
|
int curScenseType = mScenseTypeList.get(mScenseTypeChoice);
|
mShownScenseList.clear();
|
if (curScenseType == Domain.SCENSETYPE_ALL) {
|
mShownScenseList.addAll(mScenseList);
|
} else {
|
for (Scense scense : mScenseList) {
|
if (scense.getTypeid() == curScenseType) {
|
mShownScenseList.add(scense);
|
}
|
}
|
}
|
invalidate();
|
}
|
|
private void updateShowText(int level, int valueIndex, boolean isMDUCG) {
|
long areaId;
|
switch (level) {
|
case Domain.LEVEL_PROVINCE:
|
break;
|
case Domain.LEVEL_CITY:
|
mCityNameList.clear();
|
mShowCityList.clear();
|
areaId = mProvinceList.get(valueIndex).getProvinceid();
|
if (!isMDUCG) {
|
mCityNameList.add(Constant.EMPTY_STRING);
|
}
|
for (City city : mCityList) {
|
if (city.getPronvinceid() == areaId) {
|
mCityNameList.add(city.getCityname());
|
mShowCityList.add(city);
|
}
|
}
|
mCityAdapter.notifyDataSetChanged();
|
break;
|
case Domain.LEVEL_DISTRICT:
|
mDistrictNameList.clear();
|
mShowDistrictList.clear();
|
mDistrictNameList.add(Constant.EMPTY_STRING);
|
areaId = mCityList.get(valueIndex).getCityId();
|
for (District district : mDistrictList) {
|
if (district.getCityid() == areaId) {
|
mDistrictNameList.add(district.getDistrictname());
|
mShowDistrictList.add(district);
|
}
|
}
|
mDistrictAdapter.notifyDataSetChanged();
|
break;
|
case Domain.LEVEL_TOWN:
|
mTownNameList.clear();
|
mShowTownList.clear();
|
mTownNameList.add(Constant.EMPTY_STRING);
|
if (valueIndex > 0) {
|
areaId = mDistrictList.get(valueIndex - 1).getDistrictid();
|
for (Town town : mTownList) {
|
if (town.getDistrictid() == areaId) {
|
mTownNameList.add(town.getTownname());
|
mShowTownList.add(town);
|
}
|
}
|
}
|
mTownAdapter.notifyDataSetChanged();
|
break;
|
}
|
}
|
|
private String getLocationName() {
|
String area = curArea.getCityName();
|
switch (curArea.getLevel()) {
|
case Domain.LEVEL_PROVINCE:
|
area = curArea.getProvinceName();
|
break;
|
case Domain.LEVEL_CITY:
|
area = curArea.getCityName();
|
break;
|
case Domain.LEVEL_DISTRICT:
|
area = curArea.getDistrictName();
|
break;
|
}
|
return area;
|
}
|
|
private void toggleView(View view) {
|
if (view.isShown()) {
|
view.setVisibility(View.GONE);
|
} else {
|
view.setVisibility(View.VISIBLE);
|
}
|
}
|
|
@Override
|
public void onItemClick(View view, int position) {
|
curPos = position;
|
selectScense(markerList.get(curPos));
|
toggleView(mRecyclerView);
|
}
|
|
private void showScenseInfo() {
|
iBtn2.setVisibility(View.GONE);
|
rl_scenseinfo.setVisibility(View.VISIBLE);
|
String scenseName = mSelectedScense.getName();
|
if (scenseName == null) {
|
scenseName = Constant.EMPTY_STRING;
|
}
|
tv_scenseName.setText(scenseName);
|
String address = mSelectedScense.getLocation();
|
if (address == null) {
|
address = Constant.EMPTY_STRING;
|
}
|
tv_address.setText(address);
|
tv_lat.setText(String.valueOf(mSelectedScense.getLatitude()));
|
tv_lng.setText(String.valueOf(mSelectedScense.getLongitude()));
|
String contact = mSelectedScense.getContacts();
|
if (contact == null) {
|
contact = Constant.EMPTY_STRING;
|
}
|
tv_contact.setText(contact);
|
String tel = mSelectedScense.getContactst();
|
if (tel == null) {
|
tel = Constant.EMPTY_STRING;
|
}
|
tv_tel.setText(tel);
|
}
|
|
@Override
|
public void onItemLongClick(View view, int position) {
|
// Intent intent = new Intent(this, ScneseDetailActivity.class);
|
// intent.putExtra(ScenseDao.Properties.Guid.name, mScenseList.get(position).getAdGuid());
|
// startActivity(intent);
|
}
|
|
@Override
|
public void onDistrictSearched(DistrictResult districtResult) {
|
if (districtResult == null || districtResult.getDistrict() == null) {
|
return;
|
}
|
final DistrictItem item = districtResult.getDistrict().get(0);
|
if (item == null) {
|
return;
|
}
|
mCenterLatLng = item.getCenter();//得到行政中心点坐标
|
if (mCenterLatLng != null) { //地图加载时就显示行政区域
|
int zoom = 9;
|
if (curArea.getLevel() == Domain.LEVEL_PROVINCE) {
|
zoom = 8;
|
} else if (curArea.getLevel() == Domain.LEVEL_CITY) {
|
zoom = 9;
|
} else if (curArea.getLevel() == Domain.LEVEL_DISTRICT) {
|
zoom = 10;
|
}
|
aMap.animateCamera(
|
CameraUpdateFactory.newLatLngZoom(new LatLng(mCenterLatLng.getLatitude(), mCenterLatLng.getLongitude()), zoom));//13为缩放级别
|
//创建划线子线程
|
ObtainBoundaryRunnable fromRunnable = new ObtainBoundaryRunnable(item, mHandler);
|
//线程池执行
|
Executors.newSingleThreadExecutor().execute(fromRunnable);
|
}
|
}
|
|
@Override
|
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
boolean isMDUCG;
|
switch (parent.getId()) {
|
case R.id.spinner_province:
|
curArea.setProvincePosition(position);
|
isMDUCG = CommonUtils.isMDUCG(mProvinceNameList.get(position));
|
if (isMDUCG) {
|
curArea.setLevel(Domain.LEVEL_CITY);
|
} else {
|
curArea.setLevel(Domain.LEVEL_PROVINCE);
|
}
|
curArea.setProvinceCode(mProvinceList.get(position).getProvincecode());
|
curArea.setProvinceName(mProvinceList.get(position).getProvincename());
|
updateShowText(Domain.LEVEL_CITY, position, isMDUCG);
|
break;
|
case R.id.spinner_city:
|
curArea.setCityPosition(position);
|
isMDUCG = CommonUtils.isMDUCG(mProvinceNameList.get(position));
|
if (position != 0 || (position == 0 && isMDUCG)) {
|
curArea.setLevel(Domain.LEVEL_CITY);
|
if (!isMDUCG) {
|
position -= 1;
|
}
|
curArea.setCityCode(mShowCityList.get(position).getCitycode());
|
curArea.setCityName(mShowCityList.get(position).getCityname());
|
} else {
|
curArea.setLevel(Domain.LEVEL_PROVINCE);
|
curArea.setCityCode(Constant.EMPTY_STRING);
|
curArea.setCityName(Constant.EMPTY_STRING);
|
}
|
updateShowText(Domain.LEVEL_DISTRICT, position, isMDUCG);
|
break;
|
case R.id.spinner_district:
|
curArea.setDistrictPosition(position);
|
if (position != 0) {
|
curArea.setLevel(Domain.LEVEL_DISTRICT);
|
curArea.setDistrictCode(mShowDistrictList.get(position-1).getDistrictcode());
|
curArea.setDistrictName(mShowDistrictList.get(position-1).getDistrictname());
|
} else {
|
curArea.setLevel(Domain.LEVEL_CITY);
|
curArea.setDistrictCode(Constant.EMPTY_STRING);
|
curArea.setDistrictName(Constant.EMPTY_STRING);
|
}
|
updateShowText(Domain.LEVEL_TOWN, position, false);
|
break;
|
case R.id.spinner_town:
|
curArea.setLevel(position);
|
if (position != 0) {
|
curArea.setLevel(Domain.LEVEL_TOWN);
|
curArea.setTownCode(mShowTownList.get(position-1).getTowncode());
|
curArea.setTownName(mShowTownList.get(position-1).getTownname());
|
} else {
|
curArea.setLevel(Domain.LEVEL_DISTRICT);
|
curArea.setTownCode(Constant.EMPTY_STRING);
|
curArea.setTownName(Constant.EMPTY_STRING);
|
}
|
break;
|
}
|
if (curArea.getTownName() != null && !curArea.getTownName().equals(Constant.EMPTY_STRING)) {
|
curArea.setLevel(Domain.LEVEL_TOWN);
|
} else if (curArea.getDistrictName() != null && !curArea.getDistrictName().equals(Constant.EMPTY_STRING)) {
|
curArea.setLevel(Domain.LEVEL_DISTRICT);
|
} else if (curArea.getCityName() != null && !curArea.getCityName().equals(Constant.EMPTY_STRING)) {
|
curArea.setLevel(Domain.LEVEL_CITY);
|
} else {
|
curArea.setLevel(Domain.LEVEL_PROVINCE);
|
}
|
if (curArea.getDistrictName() == null || curArea.getDistrictName().equals(Constant.EMPTY_STRING)) {
|
searchArea(curArea.getCityName());
|
} else {
|
searchArea(curArea.getDistrictName());
|
}
|
getScenseLocal();
|
}
|
|
@Override
|
public void onNothingSelected(AdapterView<?> parent) {
|
|
}
|
}
|