diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 758cc80..8fcd08b 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,6 +1,18 @@ + + + + + + + + + + + + diff --git a/app/src/main/java/com/app/simplitend/articles/ArticlesActivity.java b/app/src/main/java/com/app/simplitend/articles/ArticlesActivity.java index 4f1134e..a6d0a70 100644 --- a/app/src/main/java/com/app/simplitend/articles/ArticlesActivity.java +++ b/app/src/main/java/com/app/simplitend/articles/ArticlesActivity.java @@ -71,6 +71,7 @@ public class ArticlesActivity extends AppCompatActivity articlesAdapter = new ArticlesAdapter(this); binding.articlesRv.setAdapter(articlesAdapter); + // pagination binding.articlesRv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { diff --git a/app/src/main/java/com/app/simplitend/patient_dashboard/NotificationsActivity.java b/app/src/main/java/com/app/simplitend/patient_dashboard/NotificationsActivity.java index 28386c4..4ab9ba2 100644 --- a/app/src/main/java/com/app/simplitend/patient_dashboard/NotificationsActivity.java +++ b/app/src/main/java/com/app/simplitend/patient_dashboard/NotificationsActivity.java @@ -21,13 +21,13 @@ import com.app.simplitend.databinding.NotificationViewholderBinding; import com.app.simplitend.welcome.welcomepatient.mvvm.models.CallResponse; import java.util.ArrayList; +import java.util.List; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.http.GET; import retrofit2.http.Header; -import retrofit2.http.Query; import retrofit2.http.Url; public class NotificationsActivity extends AppCompatActivity implements Callback>> { @@ -36,6 +36,12 @@ public class NotificationsActivity extends AppCompatActivity implements Callback protected NotificationsApiService apiService; + private static final String NOTIFICATION_BASE_URL = "api/get-notifications"; + + private static final int PER_PAGE_COUNT = 10; + + private int page_no; + protected String user_id; public static final String USER_ID = "user_id"; @@ -45,6 +51,8 @@ public class NotificationsActivity extends AppCompatActivity implements Callback protected boolean isCaregiver; private NotificationsAdapter notificationsAdapter; + private boolean isLoadingNotifications; + private boolean lastPageHit; @Override protected void onCreate(Bundle savedInstanceState) { @@ -62,25 +70,65 @@ public class NotificationsActivity extends AppCompatActivity implements Callback notificationsAdapter = new NotificationsAdapter(); binding.notificationRv.setAdapter(notificationsAdapter); + // pagination + binding.notificationRv.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); + int visibleItemCount = layoutManager.getChildCount(); + int totalItemCount = layoutManager.getItemCount(); + int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); + + if (!isLoadingNotifications && !lastPageHit) { + if ((visibleItemCount + firstVisibleItemPosition) >= (totalItemCount) + && firstVisibleItemPosition >= 0) { + page_no++; // loading next page + loadNotifications(true); + } + } + } + }); + + page_no = 1; // loading first page + loadNotifications(false); + + } + + private void loadNotifications(boolean show_bottom_progress) { if (user_id != null){ - binding.progress.setVisibility(View.VISIBLE); + + if (show_bottom_progress){ + binding.pageProgress.setVisibility(View.VISIBLE); + }else{ + binding.progress.setVisibility(View.VISIBLE); + } + isLoadingNotifications = true; + if (isCaregiver){ - apiService.getNotifications("api/get-notifications?caregiverId=" + user_id, + + String url = NOTIFICATION_BASE_URL + "?caregiverId=" + user_id; + url += "&per_page=" + PER_PAGE_COUNT + "&page=" + page_no; + apiService.getNotifications(url, "Bearer " + token).enqueue(this); }else{ - apiService.getNotifications("api/get-notifications?patientId=" + user_id, + + String url = NOTIFICATION_BASE_URL + "?patientId=" + user_id; + url += "&per_page=" + PER_PAGE_COUNT + "&page=" + page_no; + apiService.getNotifications(url, "Bearer " + token).enqueue(this); } }else{ binding.errorMsg.setText(R.string.couldn_t_load_notifications); binding.errorView.setVisibility(View.VISIBLE); } - } @Override public void onResponse(Call>> call, Response>> response) { binding.progress.setVisibility(View.GONE); + binding.pageProgress.setVisibility(View.GONE); + if (response.body() != null){ if (response.code() != 200){ binding.errorMsg.setText(response.body().message); @@ -88,15 +136,28 @@ public class NotificationsActivity extends AppCompatActivity implements Callback return; } - if (response.body().result == null || response.body().result.isEmpty()){ - binding.errorMsg.setText(R.string.no_notifications); + if (response.body().result == null){ + binding.errorMsg.setText(R.string.couldn_t_load_notifications); binding.errorView.setVisibility(View.VISIBLE); return; } binding.errorView.setVisibility(View.GONE); binding.notificationRv.setVisibility(View.VISIBLE); - notificationsAdapter.submitList(response.body().result); + + isLoadingNotifications = false; + lastPageHit = response.body().result.size() < 10; // no more data to load + + List current_list = notificationsAdapter.getCurrentList(); + ArrayList total_list = new ArrayList<>(current_list); + total_list.addAll(response.body().result); + + if (total_list.isEmpty()){ + binding.errorMsg.setText(R.string.no_notifications); + binding.errorView.setVisibility(View.VISIBLE); + }else{ + notificationsAdapter.submitList(total_list); + } }else{ binding.errorMsg.setText(R.string.couldn_t_load_notifications); @@ -107,6 +168,7 @@ public class NotificationsActivity extends AppCompatActivity implements Callback @Override public void onFailure(Call>> call, Throwable t) { binding.progress.setVisibility(View.GONE); + binding.pageProgress.setVisibility(View.GONE); binding.errorMsg.setText(R.string.couldn_t_load_notifications); binding.errorView.setVisibility(View.VISIBLE); } diff --git a/app/src/main/res/layout/activity_notifications.xml b/app/src/main/res/layout/activity_notifications.xml index 91c0e4e..774d338 100644 --- a/app/src/main/res/layout/activity_notifications.xml +++ b/app/src/main/res/layout/activity_notifications.xml @@ -75,11 +75,31 @@ - + > + + + + + + \ No newline at end of file