package pl.charmas.android.reactivelocation.observables.geofence; 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.GeofencingRequest; 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 AddGeofenceObservable extends BaseLocationObservable<Status> { private final GeofencingRequest request; private final PendingIntent geofenceTransitionPendingIntent; public static Observable<Status> createObservable(Context ctx, GeofencingRequest request, PendingIntent geofenceTransitionPendingIntent) { return Observable.create(new AddGeofenceObservable(ctx, request, geofenceTransitionPendingIntent)); } private AddGeofenceObservable(Context ctx, GeofencingRequest request, PendingIntent geofenceTransitionPendingIntent) { super(ctx); this.request = request; this.geofenceTransitionPendingIntent = geofenceTransitionPendingIntent; } @Override protected void onGoogleApiClientReady(GoogleApiClient apiClient, final Observer<? super Status> observer) { LocationServices.GeofencingApi.addGeofences(apiClient, request, geofenceTransitionPendingIntent) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { if (status.isSuccess()) { observer.onNext(status); observer.onCompleted(); } else { observer.onError(new StatusException(status)); } } }); } }