Commit 6f6736df authored by Varun Patil's avatar Varun Patil

Implement infinite scrolling in ComplaintsHomeFragment

parent 8307b37c
...@@ -122,7 +122,7 @@ public interface RetrofitInterface { ...@@ -122,7 +122,7 @@ public interface RetrofitInterface {
Call<ExploreResponse> search(@Header("Cookie") String sessionID, @Query("query") String query); Call<ExploreResponse> search(@Header("Cookie") String sessionID, @Query("query") String query);
@GET("venter/complaints") @GET("venter/complaints")
Call<List<Venter.Complaint>> getAllComplaints(@Header("Cookie") String sessionId); Call<List<Venter.Complaint>> getAllComplaints(@Header("Cookie") String sessionId, @Query("from") int from, @Query("num") int num);
@GET("venter/complaints?filter=me") @GET("venter/complaints?filter=me")
Call<List<Venter.Complaint>> getUserComplaints(@Header("Cookie") String sessionId); Call<List<Venter.Complaint>> getUserComplaints(@Header("Cookie") String sessionId);
......
...@@ -27,10 +27,13 @@ public class ComplaintsHomeFragment extends Fragment { ...@@ -27,10 +27,13 @@ public class ComplaintsHomeFragment extends Fragment {
private ComplaintsAdapter homeListAdapter; private ComplaintsAdapter homeListAdapter;
private SwipeRefreshLayout swipeContainer; private SwipeRefreshLayout swipeContainer;
private static String TAG = ComplaintsHomeFragment.class.getSimpleName(); public static String TAG = ComplaintsHomeFragment.class.getSimpleName();
private boolean isCalled = false; private boolean isCalled = false;
private TextView error_message_home; private TextView error_message_home;
private static String uID, uProfileUrl; private static String uID, uProfileUrl;
private boolean networkBusy = false;
private int currentIndex = 0;
private List<Venter.Complaint> complaints;
public static ComplaintsHomeFragment getInstance(String userID, String userProfileUrl) { public static ComplaintsHomeFragment getInstance(String userID, String userProfileUrl) {
uID = userID; uID = userID;
...@@ -44,8 +47,12 @@ public class ComplaintsHomeFragment extends Fragment { ...@@ -44,8 +47,12 @@ public class ComplaintsHomeFragment extends Fragment {
swipeContainer.post(new Runnable() { swipeContainer.post(new Runnable() {
@Override @Override
public void run() { public void run() {
swipeContainer.setRefreshing(true); if (complaints == null) {
callServerToGetNearbyComplaints(); callServerToGetNearbyComplaints();
swipeContainer.setRefreshing(true);
} else {
initialiseRecyclerView(complaints);
}
} }
}); });
} }
...@@ -62,9 +69,46 @@ public class ComplaintsHomeFragment extends Fragment { ...@@ -62,9 +69,46 @@ public class ComplaintsHomeFragment extends Fragment {
LinearLayoutManager llm = new LinearLayoutManager(getActivity()); LinearLayoutManager llm = new LinearLayoutManager(getActivity());
recyclerViewHome.setLayoutManager(llm); recyclerViewHome.setLayoutManager(llm);
recyclerViewHome.setHasFixedSize(true); recyclerViewHome.setHasFixedSize(true);
recyclerViewHome.setAdapter(homeListAdapter); recyclerViewHome.setAdapter(homeListAdapter);
recyclerViewHome.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (networkBusy || currentIndex == -1) return;
if (!recyclerView.canScrollVertically(1)) {
networkBusy = true;
swipeContainer.setRefreshing(true);
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
retrofitInterface.getAllComplaints(Utils.getSessionIDHeader(), currentIndex, 5).enqueue(new Callback<List<Venter.Complaint>>() {
@Override
public void onResponse(Call<List<Venter.Complaint>> call, Response<List<Venter.Complaint>> response) {
if (response.isSuccessful()) {
if (response.body() != null && !response.body().isEmpty()) {
complaints.addAll(response.body());
initialiseRecyclerView(complaints);
currentIndex += 5;
} else {
currentIndex = -1;
}
}
networkBusy = false;
swipeContainer.setRefreshing(false);
}
@Override
public void onFailure(Call<List<Venter.Complaint>> call, Throwable t) {
networkBusy = false;
swipeContainer.setRefreshing(false);
}
});
}
}
});
swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override @Override
public void onRefresh() { public void onRefresh() {
...@@ -91,18 +135,21 @@ public class ComplaintsHomeFragment extends Fragment { ...@@ -91,18 +135,21 @@ public class ComplaintsHomeFragment extends Fragment {
private void callServerToGetNearbyComplaints() { private void callServerToGetNearbyComplaints() {
try { try {
RetrofitInterface retrofitInterface = Utils.getRetrofitInterface(); RetrofitInterface retrofitInterface = Utils.getRetrofitInterface();
retrofitInterface.getAllComplaints(Utils.getSessionIDHeader()).enqueue(new Callback<List<Venter.Complaint>>() { retrofitInterface.getAllComplaints(Utils.getSessionIDHeader(), 0, 5).enqueue(new Callback<List<Venter.Complaint>>() {
@Override @Override
public void onResponse(@NonNull Call<List<Venter.Complaint>> call, @NonNull Response<List<Venter.Complaint>> response) { public void onResponse(@NonNull Call<List<Venter.Complaint>> call, @NonNull Response<List<Venter.Complaint>> response) {
if (response.isSuccessful()) {
if (response.body() != null && !(response.body().isEmpty())) { if (response.body() != null && !(response.body().isEmpty())) {
initialiseRecyclerView(response.body()); complaints = response.body();
swipeContainer.setRefreshing(false); currentIndex = complaints.size();
initialiseRecyclerView(complaints);
} else { } else {
error_message_home.setVisibility(View.VISIBLE); error_message_home.setVisibility(View.VISIBLE);
error_message_home.setText(getString(R.string.no_complaints)); error_message_home.setText(getString(R.string.no_complaints));
swipeContainer.setRefreshing(false);
} }
} }
swipeContainer.setRefreshing(false);
}
@Override @Override
public void onFailure(@NonNull Call<List<Venter.Complaint>> call, @NonNull Throwable t) { public void onFailure(@NonNull Call<List<Venter.Complaint>> call, @NonNull Throwable t) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment