diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/ISlideErrorHandler.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/ISlideErrorHandler.java new file mode 100644 index 0000000..43e45cc --- /dev/null +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/ISlideErrorHandler.java @@ -0,0 +1,5 @@ +package agency.tango.materialintroscreen; + +public interface ISlideErrorHandler { + void handleError(); +} diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java index 063ec6a..595844f 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/MaterialIntroActivity.java @@ -330,6 +330,13 @@ public void onFinish() { } }); + viewPager.registerSlideErrorHandler(new ISlideErrorHandler() { + @Override + public void handleError() { + errorOccurred(adapter.getItem(viewPager.getCurrentItem())); + } + }); + viewPager.addOnPageChangeListener(new ViewBehavioursOnPageChangeListener(adapter) .registerViewTranslationWrapper(nextButtonTranslationWrapper) .registerViewTranslationWrapper(backButtonTranslationWrapper) diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/SwipeableViewPager.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/SwipeableViewPager.java index 7f5c33a..13fa04d 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/SwipeableViewPager.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/SwipeableViewPager.java @@ -7,6 +7,7 @@ import android.view.KeyEvent; import android.view.MotionEvent; +import agency.tango.materialintroscreen.ISlideErrorHandler; import agency.tango.materialintroscreen.adapter.SlidesAdapter; @SuppressWarnings("PMD.SingularField") @@ -16,6 +17,7 @@ public class SwipeableViewPager extends CustomViewPager { private int currentIt; private boolean swipingAllowed; private boolean alphaExitTransitionEnabled = false; + private ISlideErrorHandler errorHandler; public SwipeableViewPager(Context context, AttributeSet attrs) { super(context, attrs); @@ -55,13 +57,15 @@ public boolean onTouchEvent(final MotionEvent event) { resolveSwipingRightAllowed(); return super.onTouchEvent(event); case (MotionEvent.ACTION_MOVE): - if (!swipingAllowed && startPos - event.getX() > 16) { + if (isSwipingNotAllowed(event)) { + errorHandler.handleError(); return true; } return super.onTouchEvent(event); case (MotionEvent.ACTION_UP): - if (!swipingAllowed && startPos - event.getX() > 16) { + if (isSwipingNotAllowed(event)) { smoothScrollTo(getWidth() * currentIt, 0); + errorHandler.handleError(); return true; } startPos = 0; @@ -81,6 +85,10 @@ public boolean executeKeyEvent(KeyEvent event) { return false; } + public void registerSlideErrorHandler(ISlideErrorHandler handler) { + errorHandler = handler; + } + public void moveToNextPage() { setCurrentItem(getCurrentItem() + 1, true); } @@ -105,6 +113,10 @@ public boolean alphaExitTransitionEnabled() { return alphaExitTransitionEnabled && swipingAllowed; } + private boolean isSwipingNotAllowed(MotionEvent event) { + return !swipingAllowed && startPos - event.getX() > 16; + } + private void resolveSwipingRightAllowed() { if (getAdapter().shouldLockSlide(getCurrentItem())) { setSwipingRightAllowed(false);