blob: 90fd41990a6e98b8193c9f2f9251df91fafeb547 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package it.niedermann.nextcloud.deck.ui;
import android.view.Menu;
import androidx.annotation.NonNull;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
import java.util.function.Consumer;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.model.Stack;
import it.niedermann.nextcloud.deck.ui.stack.StackAdapter;
public class StackChangeCallback extends ViewPager2.OnPageChangeCallback {
private final StackAdapter adapter;
private final ViewPager2 viewPager;
private final ExtendedFloatingActionButton fab;
private final SwipeRefreshLayout swipeRefreshLayout;
private final Menu menu;
private final Consumer<Stack> onStackSelected;
public StackChangeCallback(
@NonNull StackAdapter adapter,
@NonNull ViewPager2 viewPager,
@NonNull ExtendedFloatingActionButton fab,
@NonNull SwipeRefreshLayout swipeRefreshLayout,
@NonNull Menu menu,
@NonNull Consumer<Stack> onStackSelected
) {
this.adapter = adapter;
this.viewPager = viewPager;
this.fab = fab;
this.swipeRefreshLayout = swipeRefreshLayout;
this.menu = menu;
this.onStackSelected = onStackSelected;
}
@Override
public void onPageSelected(int position) {
this.updateMoveItemVisibility();
this.viewPager.post(() -> {
// stackAdapter size might differ from position when an account has been deleted
if (this.adapter.getItemCount() > position) {
this.onStackSelected.accept(this.adapter.getItem(position));
} else {
DeckLog.logError(new IllegalStateException("Tried to save current Stack which cannot be available (stackAdapter doesn't have this position)"));
}
});
this.fab.extend();
}
@Override
public void onPageScrollStateChanged(int state) {
if (!swipeRefreshLayout.isRefreshing()) {
swipeRefreshLayout.setEnabled(state == ViewPager2.SCROLL_STATE_IDLE);
}
}
public void updateMoveItemVisibility() {
final var currentBoardHasStacks = adapter.getItemCount() > 0;
final int currentViewPagerItem = viewPager.getCurrentItem();
menu.findItem(R.id.move_list_left).setVisible(currentBoardHasStacks && currentViewPagerItem > 0);
menu.findItem(R.id.move_list_right).setVisible(currentBoardHasStacks && currentViewPagerItem < adapter.getItemCount() - 1);
}
}
|