package org.mtransit.android.task;
import java.util.ArrayList;
import org.mtransit.android.commons.LocationUtils;
import org.mtransit.android.commons.provider.GTFSProviderContract;
import org.mtransit.android.commons.provider.POIProviderContract;
import org.mtransit.android.commons.task.MTCallable;
import org.mtransit.android.data.DataSourceManager;
import org.mtransit.android.data.POIManager;
import android.content.Context;
public class FindNearbyAgencyPOIsTask extends MTCallable<ArrayList<POIManager>> {
private static final String TAG = FindNearbyAgencyPOIsTask.class.getSimpleName();
@Override
public String getLogTag() {
return TAG;
}
private Context context;
private String authority;
private double lat;
private double lng;
private double aroundDiff;
private boolean hideDescentOnly;
private boolean avoidLoading;
private int maxSize;
private float minCoverageInMeters;
public FindNearbyAgencyPOIsTask(Context context, String authority, double lat, double lng, double aroundDiff, boolean hideDescentOnly,
boolean avoidLoading, float minCoverageInMeters, int maxSize) {
this.context = context;
this.authority = authority;
this.lat = lat;
this.lng = lng;
this.aroundDiff = aroundDiff;
this.hideDescentOnly = hideDescentOnly;
this.avoidLoading = avoidLoading;
this.minCoverageInMeters = minCoverageInMeters;
this.maxSize = maxSize;
}
@Override
public ArrayList<POIManager> callMT() throws Exception {
POIProviderContract.Filter poiFilter = POIProviderContract.Filter.getNewAroundFilter(this.lat, this.lng, this.aroundDiff);
if (this.hideDescentOnly) {
poiFilter.addExtra(GTFSProviderContract.POI_FILTER_EXTRA_DESCENT_ONLY, true);
}
if (this.avoidLoading) {
poiFilter.addExtra(POIProviderContract.POI_FILTER_EXTRA_AVOID_LOADING, true);
}
ArrayList<POIManager> pois = DataSourceManager.findPOIs(this.context, this.authority, poiFilter);
LocationUtils.updateDistance(pois, this.lat, this.lng);
float maxDistance = LocationUtils.getAroundCoveredDistanceInMeters(this.lat, this.lng, this.aroundDiff);
LocationUtils.removeTooFar(pois, maxDistance);
LocationUtils.removeTooMuchWhenNotInCoverage(pois, this.minCoverageInMeters, this.maxSize);
return pois;
}
}