package pl.charmas.android.reactivelocation.observables.location; import android.app.PendingIntent; import android.content.Context; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import pl.charmas.android.reactivelocation.observables.BaseLocationObservable; import pl.charmas.android.reactivelocation.observables.StatusException; import rx.Observable; import rx.Observer; public class AddLocationIntentUpdatesObservable extends BaseLocationObservable<Status> { private final LocationRequest locationRequest; private final PendingIntent intent; public static Observable<Status> createObservable(Context ctx, LocationRequest locationRequest, PendingIntent intent) { return Observable.create(new AddLocationIntentUpdatesObservable(ctx, locationRequest, intent)); } private AddLocationIntentUpdatesObservable(Context ctx, LocationRequest locationRequest, PendingIntent intent) { super(ctx); this.locationRequest = locationRequest; this.intent = intent; } @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, final Observer<? super Status> observer) { LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, intent) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { if (!status.isSuccess()) { observer.onError(new StatusException(status)); } else { observer.onNext(status); observer.onCompleted(); } } }); } }