Shuffle extends FrameLayout { void setFirstCardDraggable() { if (!draggableViews.isEmpty()) { currentDraggableView = draggableViews.getFirst(); currentDraggableView.setDraggable(true); currentDraggableView.reset(); currentDraggableView.setDragListener(new DraggableView.DraggableViewListener() { @Override public void onDrag(DraggableView draggableView, float percentX, float percentY) { viewAnimator.updateViewsPositions(percentX, percentY); dispatchViewScrolledToListeners(draggableView, percentX, percentY); } @Override public void onDraggedStarted(DraggableView draggableView, Direction direction) { } @Override public void onDraggedEnded(final DraggableView draggableView, final Direction direction) { draggableView.setDraggable(false); moveFirstCardToStack(); viewAnimator.animateViewStackFrom(new ViewAnimator.Listener() { @Override public void animationStarted() { } @Override public void animationEnd() { dispatchExitedToListeners(draggableView, direction); setFirstCardDraggable(); } }, direction); } @Override public void onDragCancelled(DraggableView draggableView) { } }); viewAnimator.updateViewsPositions(0, 0); } } Shuffle(Context context);  Shuffle(Context context, AttributeSet attrs);  Shuffle(Context context, AttributeSet attrs, int defStyleAttr); ShuffleSettings getShuffleSettings(); @Nullable Adapter getShuffleAdapter(); void setShuffleAdapter(@Nullable Adapter shuffleAdapter); void addListener(Listener listener); void removeListener(Listener listener); ShuffleViewAnimator getViewAnimator(); void setViewAnimator(ShuffleViewAnimator viewAnimator); void swipeRight(int duration); void swipeLeft(int duration); int getCurrentAdapterPosition(); CardDraggableView getDraggableView(int position); CardDraggableView getLastDraggableView(); CardDraggableView getFirstDraggableView(); void enable(boolean enable); void restartShuffling(); void revert(int duration);  }
@Test public void testSetFirstCardDraggable() throws Exception { CardDraggableView draggableView1 = mockDraggableView(); CardDraggableView draggableView2 = mockDraggableView(); CardDraggableView draggableView3 = mockDraggableView(); shuffle.draggableViews.addAll(Arrays.asList(draggableView1, draggableView2, draggableView3)); shuffle.setFirstCardDraggable(); verify(draggableView1).setDraggable(eq(true)); verify(draggableView1).reset(); verify(draggableView1).setDragListener(any(DraggableView.DraggableViewListener.class)); verify(viewAnimator).updateViewsPositions(eq(0.0f), eq(0.0f)); }