Skip to content

Commit

Permalink
Adds lazy creation of gesture subjects.
Browse files Browse the repository at this point in the history
  • Loading branch information
rharter committed Sep 9, 2015
1 parent ab17425 commit 40840ad
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,52 +4,107 @@
import android.view.MotionEvent;
import android.view.View;

import rx.Observable;
import rx.subjects.PublishSubject;

final class ObservableGestureListener implements GestureDetector.OnGestureListener {

final View view;

PublishSubject<ViewGestureEvent> downGestureObservable = PublishSubject.create();
PublishSubject<ViewGestureEvent> showPressGestureObservable = PublishSubject.create();
PublishSubject<ViewGestureEvent> singleTapUpGestureObservable = PublishSubject.create();
PublishSubject<ViewGestureScrollEvent> scrollGestureObservable = PublishSubject.create();
PublishSubject<ViewGestureEvent> longPressGestureObservable = PublishSubject.create();
PublishSubject<ViewGestureFlingEvent> flingGestureObservable = PublishSubject.create();
private PublishSubject<ViewGestureEvent> downGestureObservable;
private PublishSubject<ViewGestureEvent> showPressGestureObservable;
private PublishSubject<ViewGestureEvent> singleTapUpGestureObservable;
private PublishSubject<ViewGestureScrollEvent> scrollGestureObservable;
private PublishSubject<ViewGestureEvent> longPressGestureObservable;
private PublishSubject<ViewGestureFlingEvent> flingGestureObservable;

ObservableGestureListener(View view) {
this.view = view;
}

public Observable<ViewGestureEvent> downObservable() {
if (downGestureObservable == null) {
downGestureObservable = PublishSubject.create();
}
return downGestureObservable;
}

public Observable<ViewGestureEvent> showPressObservable() {
if (showPressGestureObservable == null) {
showPressGestureObservable = PublishSubject.create();
}
return showPressGestureObservable;
}

public Observable<ViewGestureEvent> singleTapUpObservable() {
if (singleTapUpGestureObservable == null) {
singleTapUpGestureObservable = PublishSubject.create();
}
return singleTapUpGestureObservable;
}

public Observable<ViewGestureScrollEvent> scrollObservable() {
if (scrollGestureObservable == null) {
scrollGestureObservable = PublishSubject.create();
}
return scrollGestureObservable;
}

public Observable<ViewGestureEvent> longPressObservable() {
if (longPressGestureObservable == null) {
longPressGestureObservable = PublishSubject.create();
}
return longPressGestureObservable;
}

public Observable<ViewGestureFlingEvent> flingObservable() {
if (flingGestureObservable == null) {
flingGestureObservable = PublishSubject.create();
}
return flingGestureObservable;
}

@Override public boolean onDown(MotionEvent e) {
downGestureObservable.onNext(ViewGestureEvent.create(view, e));
if (downGestureObservable != null) {
downGestureObservable.onNext(ViewGestureEvent.create(view, e));
}
return false;
}

@Override public void onShowPress(MotionEvent e) {
showPressGestureObservable.onNext(ViewGestureEvent.create(view, e));
if (showPressGestureObservable != null) {
showPressGestureObservable.onNext(ViewGestureEvent.create(view, e));
}
}

@Override public boolean onSingleTapUp(MotionEvent e) {
singleTapUpGestureObservable.onNext(ViewGestureEvent.create(view, e));
if (singleTapUpGestureObservable != null) {
singleTapUpGestureObservable.onNext(ViewGestureEvent.create(view, e));
}
return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
scrollGestureObservable.onNext(
ViewGestureScrollEvent.create(view, e1, e2, distanceX, distanceY));
if (scrollGestureObservable != null) {
scrollGestureObservable.onNext(
ViewGestureScrollEvent.create(view, e1, e2, distanceX, distanceY));
}
return false;
}

@Override public void onLongPress(MotionEvent e) {
longPressGestureObservable.onNext(ViewGestureEvent.create(view, e));
if (longPressGestureObservable != null) {
longPressGestureObservable.onNext(ViewGestureEvent.create(view, e));
}
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
flingGestureObservable.onNext(
ViewGestureFlingEvent.create(view, e1, e2, velocityX, velocityY));
if (flingGestureObservable != null) {
flingGestureObservable.onNext(
ViewGestureFlingEvent.create(view, e1, e2, velocityX, velocityY));
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,42 +69,42 @@ private RxGestures(View view, Observable<MotionEvent> motionEventObservable) {
* Create an observable of down gestures.
*/
public Observable<ViewGestureEvent> down() {
return gestureListener.downGestureObservable;
return gestureListener.downObservable();
}

/**
* Create an observable of show press gestures.
*/
public Observable<ViewGestureEvent> showPress() {
return gestureListener.showPressGestureObservable;
return gestureListener.showPressObservable();
}

/**
* Create an observable of single tap up gestures.
*/
public Observable<ViewGestureEvent> singleTapUp() {
return gestureListener.singleTapUpGestureObservable;
return gestureListener.singleTapUpObservable();
}

/**
* Create an observable of scroll gestures.
*/
public Observable<ViewGestureScrollEvent> scroll() {
return gestureListener.scrollGestureObservable;
return gestureListener.scrollObservable();
}

/**
* Create an observable of long press gestures.
*/
public Observable<ViewGestureEvent> longPress() {
return gestureListener.longPressGestureObservable;
return gestureListener.longPressObservable();
}

/**
* Create an observable of fling gestures.
*/
public Observable<ViewGestureFlingEvent> fling() {
return gestureListener.flingGestureObservable;
return gestureListener.flingObservable();
}

}

0 comments on commit 40840ad

Please sign in to comment.