void moveFirstCardToStack() { //replace views CardDraggableView firstCard = draggableViews.removeFirst(); draggableViews.addLast(firstCard); //reorganize views Z order removeAllViews(); int numberOfCards = shuffleSettings.getNumberOfDisplayedCards(); for (int i = numberOfCards - 1; i >= 0; i--) { addView(draggableViews.get(i)); } adapterPosition++; updateAdapter(); dispatchAdapterPositionToListeners(); checkScrollFinished(); }
protected void onViewInflated() { int numberOfCards = shuffleSettings.getNumberOfDisplayedCards(); for (int i = numberOfCards - 1; i >= 0; i--) { CardDraggableView draggableView = generateDraggableView(); draggableView.setDraggable(false); updateDraggableView(draggableView); draggableViews.addFirst(draggableView); addView(draggableView); } notifyDataSetChanged(); }
@Override protected void onFinishInflate() { super.onFinishInflate(); onViewInflated(); }
void notifyDataSetChanged() { updateAdapter(); setFirstCardDraggable(); }
@Test public void testOnViewInflated() throws Exception { //Given given(shuffleSettings.getNumberOfDisplayedCards()).willReturn(3); //When shuffle.onViewInflated(); //Then assertThat(shuffle.draggableViews).hasSize(3); verify(shuffle, times(3)).updateDraggableView(any(CardDraggableView.class)); verify(shuffle, times(3)).addView(any(View.class)); verify(shuffle, times(1)).updateAdapter(); verify(shuffle, times(1)).setFirstCardDraggable(); }
@Before public void setUp() throws Exception { shuffle = spy(new Shuffle(context)); shuffle.viewAnimator = viewAnimator; shuffle.shuffleSettings = shuffleSettings; doReturn(parent).when(shuffle).getViewParent(); doReturn(mock(CardDraggableView.class)).when(shuffle).generateDraggableView(); doNothing().when(shuffle).addView(any(View.class)); doNothing().when(shuffle).removeAllViews(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_horizontal_inline_behind); ButterKnife.bind(this); shuffle.setShuffleAdapter(new TestAdapter()); shuffle.setViewAnimator(new ShuffleViewAnimatorOnSecondCard()); }
void moveLastCardToTop() { //replace views CardDraggableView lastCard = draggableViews.removeLast(); draggableViews.addFirst(lastCard); //reorganize views Z order removeAllViews(); int numberOfCards = shuffleSettings.getNumberOfDisplayedCards(); for (int i = numberOfCards - 1; i >= 0; i--) { addView(draggableViews.get(i)); } checkScrollFinished(); }
@Test public void testMoveFirstCardToStack() throws Exception { //Give final List<View> viewsList = new ArrayList<>(); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { viewsList.add((View) invocation.getArguments()[0]); return null; } }).when(shuffle).addView(any(View.class)); shuffle.adapterPosition = 4; given(shuffleSettings.getNumberOfDisplayedCards()).willReturn(3); CardDraggableView draggableView1 = mockDraggableView(); CardDraggableView draggableView2 = mockDraggableView(); CardDraggableView draggableView3 = mockDraggableView(); shuffle.draggableViews.addAll(Arrays.asList(draggableView1, draggableView2, draggableView3)); //When shuffle.moveFirstCardToStack(); //Then assertThat(shuffle.draggableViews.get(0)).isEqualTo(draggableView2); assertThat(shuffle.draggableViews.get(1)).isEqualTo(draggableView3); assertThat(shuffle.draggableViews.get(2)).isEqualTo(draggableView1); verify(shuffle).removeAllViews(); assertThat(viewsList.get(0)).isEqualTo(draggableView1); assertThat(viewsList.get(1)).isEqualTo(draggableView3); assertThat(viewsList.get(2)).isEqualTo(draggableView2); assertThat(shuffle.adapterPosition).isEqualTo(5); }
setContentView(R.layout.activity_horizontal_inline); ButterKnife.bind(this); shuffle.setViewAnimator(new ShuffleViewAnimator() .setPushLeftAnimateViewStackScaleUp(false) .setPushRightAnimateViewStackScaleUp(false) ); shuffle.addListener(new Shuffle.Listener() { @Override public void onViewChanged(int position) { shuffle.setShuffleAdapter(new TestAdapter());
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_enable_disable); ButterKnife.bind(this); shuffle.setShuffleAdapter(new TestAdapter()); }
@VisibleForTesting void updateAdapter() { checkScrollStarted(); if (shuffleAdapter != null) { boolean infinite = shuffleSettings.isInfinite(); int type = shuffleAdapter.getItemViewType(position); List<ViewHolder> viewHolderList = getViewHolderListForType(type); ViewHolder viewHolder = getNextUnusedViewHolder(viewHolderList, position);
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_horizontal_inline_wrap_content); ButterKnife.bind(this); shuffle.addListener(new Shuffle.Listener() { @Override public void onViewChanged(int position) { Log.d("TAG", "onViewChanged" + position); } @Override public void onScrollStarted() { Log.d("TAG", "onScrollStarted"); } @Override public void onScrollFinished() { Log.d("TAG", "onScrollFinished"); } @Override public void onViewExited(DraggableView draggableView, Direction direction) { } @Override public void onViewScrolled(DraggableView draggableView, float percentX, float percent) { } }); shuffle.setShuffleAdapter(new TestWrapContentAdapter()); }
@OnClick(R.id.left) public void onClickLeft() { shuffle.swipeLeft(1000); }
@Override public void animationEnd() { try { setFirstCardDraggable(); } catch (Exception e) { e.printStackTrace(); } } });
@Test public void testGetNextUnusedViewHolder() throws Exception { //Given List<Shuffle.ViewHolder> viewHolderList = Arrays.asList( mockShuffleViewHolder(1), mockShuffleViewHolder(-1), mockShuffleViewHolder(2) ); //When Shuffle.ViewHolder returnedHolder = Shuffle.getNextUnusedViewHolder(viewHolderList, 0); //Then assertThat(returnedHolder.position).isEqualTo(-1); }
@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); }
private void initialize(Context context, AttributeSet attrs) { this.shuffleSettings = new ShuffleSettings(); this.shuffleSettings.handleAttributes(context, attrs); setViewAnimator(new ShuffleViewAnimator()); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_horizontal_inline_without_rotation); ButterKnife.bind(this); shuffle.setShuffleAdapter(new TestAdapter()); shuffle.setViewAnimator(new ShuffleViewAnimator() .setPushLeftAnimateViewStackScaleUp(true) .setPushRightAnimateViewStackScaleUp(true) ); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_horizontal); ButterKnife.bind(this); shuffle.setShuffleAdapter(new TestAdapter()); }