package com.nilhcem.bblfr.ui.baggers.cities;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
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.nilhcem.bblfr.BBLApplication;
import com.nilhcem.bblfr.R;
import com.nilhcem.bblfr.core.map.MapUtils;
import com.nilhcem.bblfr.core.utils.AppUtils;
import com.nilhcem.bblfr.core.utils.NetworkUtils;
import com.nilhcem.bblfr.jobs.baggers.BaggersService;
import com.nilhcem.bblfr.model.baggers.City;
import com.nilhcem.bblfr.ui.BaseMapActivity;
import com.nilhcem.bblfr.ui.baggers.cities.fallback.CitiesFallbackActivity;
import com.nilhcem.bblfr.ui.baggers.list.BaggersListActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import timber.log.Timber;
public class CitiesMapActivity extends BaseMapActivity {
private static final float DEFAULT_ZOOM = 10f;
@Inject BaggersService mBaggersService;
public static Intent createLaunchIntent(@NonNull Context context, boolean withNavigationDrawer) {
Intent intent = new Intent(context, NetworkUtils.isNetworkAvailable(context) &&
AppUtils.hasGooglePlayServices(context) && AppUtils.isGeolocAllowed(context)
? CitiesMapActivity.class : CitiesFallbackActivity.class);
intent.putExtra(EXTRA_DISABLE_DRAWER, !withNavigationDrawer);
return intent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BBLApplication.get(this).component().inject(this);
getSupportActionBar().setTitle(R.string.baggers_map_toolbar_title);
}
@Override
protected void loadMap() {
mSubscription = mBaggersService.getBaggersCities()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(cities ->
mMapFragment.getMapAsync(googleMap -> onCitiesLoaded(cities, googleMap))
);
}
private void onCitiesLoaded(List<City> cities, GoogleMap map) {
Timber.d("BBL Cities loaded from DB");
onMapFinishedLoading();
// Set the locations in the map.
List<Marker> markers = new ArrayList<>();
Map<Marker, City> markerCities = new HashMap<>();
for (City city : cities) {
Marker marker = map.addMarker(new MarkerOptions()
.position(new LatLng(city.lat, city.lng))
.title(city.name)
.icon(BitmapDescriptorFactory.defaultMarker(MapUtils.HUE_DEFAULT))
);
markers.add(marker);
markerCities.put(marker, city);
}
map.setOnMarkerClickListener(marker -> {
Timber.d("City selected");
City city = markerCities.get(marker);
mPrefs.setFavoriteCity(city);
startActivity(BaggersListActivity.createLaunchIntent(this, city));
return true;
});
// Zoom the map indicator to user's current position
MapUtils.moveToCurrentLocation(map, markers, mLocationProvider.getLastKnownLocation(), DEFAULT_ZOOM);
}
}