/*
* Copyright (c) 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.samples.apps.iosched.map;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.model.Marker;
import com.google.samples.apps.iosched.map.util.MarkerModel;
import android.app.Activity;
/**
* Extension of {@link MapFragment} that contains an option to make all markers
* draggable and log some additional details through a callback interface.
*/
public class EditorMapFragment extends MapFragment {
public interface Callbacks extends MapFragment.Callbacks {
void onLogMessage(String message);
}
private static Callbacks sDummyCallbacks = new Callbacks() {
@Override
public void onLogMessage(String message) {
}
@Override
public void onInfoHide() {
}
@Override
public void onInfoShowVenue() {
}
@Override
public void onInfoShowTitle(String label, int roomType) {
}
@Override
public void onInfoShowSessionlist(String roomId, String roomTitle, int roomType) {
}
@Override
public void onInfoShowFirstSessionTitle(String roomId, String roomTitle, int roomType) {
}
};
private Callbacks mCallbacks = sDummyCallbacks;
public static EditorMapFragment newInstance() {
return new EditorMapFragment();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (!(activity instanceof Callbacks)) {
throw new ClassCastException(
"Activity must implement fragment's callbacks.");
}
mCallbacks = (Callbacks) getActivity();
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = sDummyCallbacks;
}
@Override
public void onMapReady(GoogleMap googleMap) {
super.onMapReady(googleMap);
googleMap.setOnMarkerDragListener(mMarkerDragListener);
}
/**
* Sets all markers on the map as draggable.
*/
public void setElementsDraggable(boolean isDraggable) {
//Set all markers as draggable
for (MarkerModel markerModel : mMarkers.values()) {
markerModel.marker.setDraggable(isDraggable);
}
}
private GoogleMap.OnMarkerDragListener mMarkerDragListener
= new GoogleMap.OnMarkerDragListener() {
@Override
public void onMarkerDragStart(Marker marker) {
}
@Override
public void onMarkerDrag(Marker marker) {
mCallbacks.onLogMessage("" + marker.getTitle() + ": " + marker.getPosition());
}
@Override
public void onMarkerDragEnd(Marker marker) {
mCallbacks
.onLogMessage("" + marker.getTitle() + " dropped at: " + marker.getPosition());
}
};
}