package hu.supercluster.overpasser.app.activity.container;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLngBounds;
import org.androidannotations.annotations.AfterInject;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.InstanceState;
import hu.supercluster.overpasser.app.view.TouchableWrapper;
@EFragment
public class MapFragment extends SupportMapFragment implements OnMapReadyCallback, TouchableWrapper.Callbacks {
public static final int TOUCH_TIMEOUT = 400;
private GoogleMap googleMap;
private CountDownTimer touchTimeoutTimer;
@InstanceState
float zoomLevel = 15;
@Bean
MapUiHandler uiHandler;
@Bean
MapPoiHandler poiHandler;
public GoogleMap getGoogleMap() {
return googleMap;
}
@AfterInject
void init() {
uiHandler.setFragment(this);
poiHandler.setFragment(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getMapAsync(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, parent, savedInstanceState);
TouchableWrapper touchableWrapper = new TouchableWrapper(getActivity(), this);
touchableWrapper.addView(view);
return touchableWrapper;
}
@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
uiHandler.setMapParams();
uiHandler.moveMapToCurrentPosition();
searchPois();
}
private void searchPois() {
poiHandler.fetchPois(getLatLngBounds());
}
LatLngBounds getLatLngBounds() {
return googleMap.getProjection().getVisibleRegion().latLngBounds;
}
@Override
public void onWrapperTouchStart() {
if (touchTimeoutTimer != null) {
touchTimeoutTimer.cancel();
}
}
@Override
public void onWrapperTouchReleased() {
touchTimeoutTimer = getTouchTimeoutCountDownTimer();
touchTimeoutTimer.start();
}
@NonNull
private CountDownTimer getTouchTimeoutCountDownTimer() {
return new CountDownTimer(TOUCH_TIMEOUT, TOUCH_TIMEOUT) {
@Override
public void onTick(long millisUntilFinished) {}
@Override
public void onFinish() {
searchPois();
}
};
}
}