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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package it.niedermann.nextcloud.deck.ui.stack;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import it.niedermann.nextcloud.deck.DeckLog;
import it.niedermann.nextcloud.deck.R;
import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.model.Account;
import it.niedermann.nextcloud.deck.model.full.FullCard;
import it.niedermann.nextcloud.deck.model.full.FullStack;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
import it.niedermann.nextcloud.deck.ui.card.CardAdapter;
import it.niedermann.nextcloud.deck.ui.card.CardItemTouchHelper;
public class StackFragment extends Fragment {
private static final String KEY_BOARD_ID = "boardId";
private static final String KEY_STACK_ID = "stackId";
private static final String KEY_ACCOUNT = "account";
private CardAdapter adapter = null;
private SyncManager syncManager;
private long stackId;
private Account account;
@BindView(R.id.swipe_refresh_layout)
SwipeRefreshLayout swipeRefreshLayout;
@BindView(R.id.recycler_view)
RecyclerView recyclerView;
/**
* @param boardId of the current stack
* @return new fragment instance
* @see <a href="https://gunhansancar.com/best-practice-to-instantiate-fragments-with-arguments-in-android/">Best Practice to Instantiate Fragments with Arguments in Android</a>
*/
public static StackFragment newInstance(long boardId, long stackId, Account account) {
Bundle bundle = new Bundle();
bundle.putLong(KEY_BOARD_ID, boardId);
bundle.putLong(KEY_STACK_ID, stackId);
bundle.putSerializable(KEY_ACCOUNT, account);
StackFragment fragment = new StackFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_stack, container, false);
ButterKnife.bind(this, view);
initRecyclerView();
if (getArguments() == null) {
throw new IllegalArgumentException("account and localStackId are required arguments.");
}
stackId = getArguments().getLong(KEY_STACK_ID);
account = (Account) getArguments().getSerializable(KEY_ACCOUNT);
if (getActivity() != null) {
syncManager = new SyncManager(getActivity().getApplicationContext(), getActivity());
swipeRefreshLayout.setOnRefreshListener(() -> {
syncManager.synchronize(new IResponseCallback<Boolean>(account) {
@Override
public void onResponse(Boolean response) {
refreshView();
}
@Override
public void onError(Throwable throwable) {
DeckLog.log("exception! " + throwable.getMessage());
}
});
});
refreshView();
}
return view;
}
private void refreshView() {
syncManager.getStack(account.getId(), stackId).observe(StackFragment.this, (FullStack stack) -> {
if (stack != null) {
syncManager.getFullCardsForStack(account.getId(), stack.getLocalId()).observe(StackFragment.this, (List<FullCard> cards) -> {
if (cards != null) {
adapter.setCardList(cards);
}
});
}
});
}
private void initRecyclerView() {
adapter = new CardAdapter();
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
ItemTouchHelper touchHelper = new CardItemTouchHelper(adapter);
touchHelper.attachToRecyclerView(recyclerView);
}
}
|