package pl.charmas.android.reactivelocation.observables.geocode;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import com.google.android.gms.maps.model.LatLngBounds;
import java.io.IOException;
import java.util.List;
import rx.Observable;
import rx.Subscriber;
public class GeocodeObservable implements Observable.OnSubscribe<List<Address>> {
private final Context ctx;
private final String locationName;
private final int maxResults;
private final LatLngBounds bounds;
public static Observable<List<Address>> createObservable(Context ctx, String locationName, int maxResults, LatLngBounds bounds) {
return Observable.create(new GeocodeObservable(ctx, locationName, maxResults, bounds));
}
private GeocodeObservable(Context ctx, String locationName, int maxResults, LatLngBounds bounds) {
this.ctx = ctx;
this.locationName = locationName;
this.maxResults = maxResults;
this.bounds = bounds;
}
@Override
public void call(Subscriber<? super List<Address>> subscriber) {
Geocoder geocoder = new Geocoder(ctx);
List<Address> result;
try {
if (bounds != null) {
result = geocoder.getFromLocationName(locationName, maxResults, bounds.southwest.latitude, bounds.southwest.longitude, bounds.northeast.latitude, bounds.northeast.longitude);
} else {
result = geocoder.getFromLocationName(locationName, maxResults);
}
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(result);
subscriber.onCompleted();
}
} catch (IOException e) {
if (!subscriber.isUnsubscribed()) {
subscriber.onError(e);
}
}
}
}