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(); } }; } }