package pl.charmas.android.reactivelocation.observables.location;
import android.content.Context;
import android.location.Location;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import pl.charmas.android.reactivelocation.observables.BaseLocationObservable;
import rx.Observable;
import rx.Observer;
public class LocationUpdatesObservable extends BaseLocationObservable<Location> {
private static final String TAG = LocationUpdatesObservable.class.getSimpleName();
public static Observable<Location> createObservable(Context ctx, LocationRequest locationRequest) {
return Observable.create(new LocationUpdatesObservable(ctx, locationRequest));
}
private final LocationRequest locationRequest;
private LocationListener listener;
private LocationUpdatesObservable(Context ctx, LocationRequest locationRequest) {
super(ctx);
this.locationRequest = locationRequest;
}
@Override
protected void onGoogleApiClientReady(GoogleApiClient apiClient, final Observer<? super Location> observer) {
listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
observer.onNext(location);
}
};
LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, listener);
}
@Override
protected void onUnsubscribed(GoogleApiClient locationClient) {
if (locationClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(locationClient, listener);
}
}
}