/*
* HostDetailActivity.java
* Open Mobile Hub
*
* Created by Gareth Johnson
* Copyright (c) 2014 Beckersweet. All rights reserved.
*/
package com.beckersweet.opmub;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.Display;
import android.view.WindowManager;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMarkerClickListener;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.LatLngBounds;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
@SuppressWarnings("deprecation")
public class MapActivity extends FragmentActivity
implements OnMarkerClickListener{
private static String MARKER = "com.beckersweet.mqttclient.MARKER";
private static String MARKERS = "com.beckersweet.mqttclient.MARKERS";
HostMarker[] hostMarkers;
MarkerOptions[] markerOptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
// Get host markers from previous activity.
Intent intent = getIntent();
Parcelable[] extra = intent.getParcelableArrayExtra(MARKERS);
markerOptions = new MarkerOptions[extra.length];
hostMarkers = new HostMarker[extra.length];
for (int i = 0; i < extra.length; i++) {
hostMarkers[i] = (HostMarker) extra[i];
markerOptions[i] = hostMarkers[i].getOptions();
}
// Get map.
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentById(R.id.map);
SupportMapFragment mapFragment = (SupportMapFragment) fragment;
GoogleMap map = mapFragment.getMap();
// Set map's initial bounds.
CameraUpdate cameraUpdate = null;
if (markerOptions.length == 1) {
MarkerOptions marker = markerOptions[0];
LatLng markerPosition = marker.getPosition();
float zoom = 14;
cameraUpdate = CameraUpdateFactory.newLatLngZoom(markerPosition,
zoom);
} else if (markerOptions.length > 1) {
LatLngBounds.Builder boundBuilder = new LatLngBounds.Builder();
for (int i = 0; i < markerOptions.length; i++) {
MarkerOptions marker = markerOptions[i];
LatLng markerPosition = marker.getPosition();
boundBuilder.include(markerPosition);
}
LatLngBounds bounds = boundBuilder.build();
WindowManager windowManager = getWindowManager();
Display screen = windowManager.getDefaultDisplay();
int boundWidth = screen.getWidth(); // pixels
int boundHeight = screen.getHeight(); // pixels
int boundPadding = 200; // pixels
cameraUpdate = CameraUpdateFactory.newLatLngBounds(bounds,
boundWidth, boundHeight, boundPadding);
}
if (cameraUpdate != null) {
try {
map.moveCamera(cameraUpdate);
} catch (Exception e) {
e.printStackTrace();
}
}
// Add markers an marker click listener.
if (map != null) {
for (int i = 0; i < markerOptions.length; i++) {
MarkerOptions marker = markerOptions[i];
map.addMarker(marker);
}
map.setOnMarkerClickListener(this);
}
}
@Override
public boolean onMarkerClick(Marker clickedMarker) {
HostMarker hostMarker = null;
for (int i = 0; i < hostMarkers.length; i++) {
if (clickedMarker.getTitle().equals(hostMarkers[i].name)) {
hostMarker = hostMarkers[i];
}
}
if (hostMarker == null)
return false;
Intent intent = new Intent(this, HostDetailActivity.class);
intent.putExtra(MARKER, hostMarker);
startActivity(intent);
return true;
}
}