I would try following:
a) create own mapview like following: https://gist.github.com/nutiteq/b546aaac8cdcfa6a7f09 . It just reuses normal touch handlers.
b) use MyMapView instead of MapView in layout xml and code.
c) in your LocationListener:
@Override
public void onLocationChanged(Location location) {
if(!mapView.isTouched())
mapView.setFocusPoint(mapView.getLayers().getBaseProjection().fromWgs84(location.getLongitude(), location.getLatitude()));
}
d) When you turn on "GPS follow" reset touch state with mapView.setTouched(false);
But it is possible I miss some case here. I know it can be tricky to get it right.