123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- package com.rthoni.stssaguenay.ui.fragments;
-
- import android.Manifest;
- import android.app.ProgressDialog;
- import android.content.Context;
- import android.content.pm.PackageManager;
- import android.os.Bundle;
- import android.support.annotation.NonNull;
- import android.support.annotation.Nullable;
- import android.support.v4.app.ActivityCompat;
- import android.support.v4.app.Fragment;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Toast;
-
- import com.google.android.gms.maps.CameraUpdateFactory;
- import com.google.android.gms.maps.GoogleMap;
- import com.google.android.gms.maps.MapView;
- import com.google.android.gms.maps.OnMapReadyCallback;
- import com.google.android.gms.maps.model.LatLng;
- import com.google.android.gms.maps.model.Marker;
- import com.google.android.gms.maps.model.MarkerOptions;
- import com.google.maps.android.clustering.ClusterItem;
- import com.google.maps.android.clustering.ClusterManager;
- import com.google.maps.android.clustering.view.DefaultClusterRenderer;
- import com.luticate.utils.business.LuConsumer;
- import com.luticate.utils.business.LuPromise;
- import com.luticate.utils.dbo.LuPromiseError;
- import com.rthoni.stssaguenay.R;
- import com.rthoni.stssaguenay.business.STSBusiness;
- import com.rthoni.stssaguenay.business.StopsBusiness;
- import com.rthoni.stssaguenay.dbo.StopsDbo;
-
- import java.util.HashMap;
- import java.util.List;
-
- import butterknife.BindView;
- import butterknife.ButterKnife;
-
- /**
- * Created by robin on 9/29/16.
- */
- public class StopMapPickerFragment extends Fragment {
-
- public static class StopDboMapItem implements ClusterItem {
- private LatLng _latLng;
-
- private StopsDbo _stopsDbo;
-
- StopDboMapItem(StopsDbo stopsDbo) {
- _stopsDbo = stopsDbo;
- _latLng = new LatLng(_stopsDbo.getPosY(), _stopsDbo.getPosX());
- }
-
- @Override
- public LatLng getPosition() {
- return _latLng;
- }
-
- public StopsDbo getStopsDbo() {
- return _stopsDbo;
- }
- }
-
- public static class StopDboMapRenderer extends DefaultClusterRenderer<StopDboMapItem> {
-
- private HashMap<String, StopDboMapItem> _items = new HashMap<>();
-
- public StopDboMapRenderer(Context context, GoogleMap map, ClusterManager<StopDboMapItem> clusterManager) {
- super(context, map, clusterManager);
- }
-
- @Override
- protected void onBeforeClusterItemRendered(StopDboMapItem item, MarkerOptions markerOptions) {
- markerOptions.title(item.getStopsDbo().getFullName());
- super.onBeforeClusterItemRendered(item, markerOptions);
- }
-
- @Override
- protected void onClusterItemRendered(StopDboMapItem clusterItem, Marker marker) {
- _items.put(marker.getId(), clusterItem);
- super.onClusterItemRendered(clusterItem, marker);
- }
-
- public StopDboMapItem getStopItem(String id)
- {
- return _items.get(id);
- }
- }
-
- @BindView(R.id.mapView)
- MapView _mapView;
-
- private LuConsumer<StopsDbo> _onStopSelectedConsumer;
-
- private GoogleMap _map;
-
- private List<StopsDbo> _stopsDbos;
-
- private StopDboMapRenderer _renderer;
-
- @Override
- public void onStart() {
- _mapView.onStart();
- super.onStart();
- }
-
- @Override
- public void onResume() {
- _mapView.onResume();
- super.onResume();
- }
-
- @Override
- public void onPause() {
- _mapView.onPause();
- super.onPause();
- }
-
- @Override
- public void onStop() {
- _mapView.onStop();
- super.onStop();
- }
-
- @Override
- public void onDestroy() {
- _mapView.onDestroy();
- super.onDestroy();
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- _mapView.onSaveInstanceState(outState);
- super.onSaveInstanceState(outState);
- }
-
- @Override
- public void onLowMemory() {
- _mapView.onLowMemory();
- super.onLowMemory();
- }
-
- @Nullable
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.fragment_stop_picker_map, container, false);
- ButterKnife.bind(this, v);
-
- _mapView.onCreate(savedInstanceState);
- _mapView.getMapAsync(new OnMapReadyCallback() {
- @Override
- public void onMapReady(GoogleMap googleMap) {
- _map = googleMap;
- setupMap();
- }
- });
-
- loadStops();
-
- return v;
- }
-
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
- ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
- _map.setMyLocationEnabled(true);
- }
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- }
-
- public void setupMap()
- {
- _map.getUiSettings().setMyLocationButtonEnabled(true);
- _map.getUiSettings().setCompassEnabled(true);
- _map.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(48.3786565, -71.3354953), 9));
- _map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
- @Override
- public void onInfoWindowClick(Marker marker) {
- onStopSelected(_renderer.getStopItem(marker.getId()).getStopsDbo());
- }
- });
- if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
- ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
- _map.setMyLocationEnabled(true);
- }
- else {
- requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
- }
- if (_stopsDbos != null) {
- addStops();
- }
- }
-
- public void loadStops()
- {
- final ProgressDialog progressDialog = new ProgressDialog(getContext());
- progressDialog.setIndeterminate(true);
- progressDialog.setCancelable(false);
- progressDialog.show();
- progressDialog.setTitle(R.string.loading);
- progressDialog.setMessage(getString(R.string.loading_stops));
-
- StopsBusiness.getAll(STSBusiness.getConfig(getContext()))
- .then(new LuConsumer<List<StopsDbo>>() {
- @Override
- public void execute(List<StopsDbo> data) {
- progressDialog.dismiss();
- _stopsDbos = data;
- if (_map != null) {
- addStops();
- }
- }
- }, new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError data) {
- progressDialog.dismiss();
- _stopsDbos = null;
- Toast.makeText(getContext(), data.getError(), Toast.LENGTH_LONG).show();
- }
- });
- }
-
- public void addStops()
- {
- ClusterManager<StopDboMapItem> clusterManager = new ClusterManager<>(getContext(), _map);
- _renderer = new StopDboMapRenderer(getContext(), _map, clusterManager);
- clusterManager.setRenderer(_renderer);
- for (StopsDbo stopsDbo : _stopsDbos) {
- clusterManager.addItem(new StopDboMapItem(stopsDbo));
- }
- _map.setOnCameraIdleListener(clusterManager);
- }
-
- public void onStopSelected(StopsDbo stopsDbo)
- {
- if (_onStopSelectedConsumer != null) {
- _onStopSelectedConsumer.execute(stopsDbo);
- }
- }
-
- public void setOnStopSelectedConsumer(LuConsumer<StopsDbo> onStopSelectedConsumer) {
- _onStopSelectedConsumer = onStopSelectedConsumer;
- }
- }
|