forked from mirrors/Fedilab
		
	fix pagination issue to bottom
This commit is contained in:
		
							parent
							
								
									3d3f0039a3
								
							
						
					
					
						commit
						ea1df98d15
					
				
					 1 changed files with 16 additions and 14 deletions
				
			
		|  | @ -58,8 +58,6 @@ import app.fedilab.android.viewmodel.mastodon.TimelinesVM; | ||||||
| public class FragmentMastodonNotification extends Fragment implements NotificationAdapter.FetchMoreCallBack { | public class FragmentMastodonNotification extends Fragment implements NotificationAdapter.FetchMoreCallBack { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     private static final int NOTIFICATION_PRESENT = -1; |  | ||||||
|     private static final int NOTIFICATION__AT_THE_BOTTOM = -2; |  | ||||||
|     private FragmentPaginationBinding binding; |     private FragmentPaginationBinding binding; | ||||||
|     private NotificationsVM notificationsVM; |     private NotificationsVM notificationsVM; | ||||||
|     private boolean flagLoading; |     private boolean flagLoading; | ||||||
|  | @ -231,16 +229,16 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|         if (aggregateNotification) { |         if (aggregateNotification) { | ||||||
|             notifications.notifications = aggregateNotifications(notifications.notifications); |             notifications.notifications = aggregateNotifications(notifications.notifications); | ||||||
|         } |         } | ||||||
|         if (notificationAdapter != null && this.notificationList != null) { |         if (notificationAdapter != null && notificationList != null) { | ||||||
|             int size = this.notificationList.size(); |             int size = notificationList.size(); | ||||||
|             this.notificationList.clear(); |             notificationList.clear(); | ||||||
|             this.notificationList = new ArrayList<>(); |             notificationList = new ArrayList<>(); | ||||||
|             notificationAdapter.notifyItemRangeRemoved(0, size); |             notificationAdapter.notifyItemRangeRemoved(0, size); | ||||||
|         } |         } | ||||||
|         if (this.notificationList == null) { |         if (notificationList == null) { | ||||||
|             this.notificationList = new ArrayList<>(); |             notificationList = new ArrayList<>(); | ||||||
|         } |         } | ||||||
|         this.notificationList.addAll(notifications.notifications); |         notificationList.addAll(notifications.notifications); | ||||||
| 
 | 
 | ||||||
|         if (max_id == null || (notifications.pagination.max_id != null && notifications.pagination.max_id.compareTo(max_id) < 0)) { |         if (max_id == null || (notifications.pagination.max_id != null && notifications.pagination.max_id.compareTo(max_id) < 0)) { | ||||||
|             max_id = notifications.pagination.max_id; |             max_id = notifications.pagination.max_id; | ||||||
|  | @ -249,7 +247,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|             min_id = notifications.pagination.min_id; |             min_id = notifications.pagination.min_id; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         notificationAdapter = new NotificationAdapter(this.notificationList); |         notificationAdapter = new NotificationAdapter(notificationList); | ||||||
|         notificationAdapter.fetchMoreCallBack = this; |         notificationAdapter.fetchMoreCallBack = this; | ||||||
|         mLayoutManager = new LinearLayoutManager(requireActivity()); |         mLayoutManager = new LinearLayoutManager(requireActivity()); | ||||||
|         binding.recyclerView.setLayoutManager(mLayoutManager); |         binding.recyclerView.setLayoutManager(mLayoutManager); | ||||||
|  | @ -268,6 +266,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|                 if (dy > 0) { |                 if (dy > 0) { | ||||||
|                     int visibleItemCount = mLayoutManager.getChildCount(); |                     int visibleItemCount = mLayoutManager.getChildCount(); | ||||||
|                     int totalItemCount = mLayoutManager.getItemCount(); |                     int totalItemCount = mLayoutManager.getItemCount(); | ||||||
|  | 
 | ||||||
|                     if (firstVisibleItem + visibleItemCount == totalItemCount) { |                     if (firstVisibleItem + visibleItemCount == totalItemCount) { | ||||||
|                         if (!flagLoading) { |                         if (!flagLoading) { | ||||||
|                             flagLoading = true; |                             flagLoading = true; | ||||||
|  | @ -366,7 +365,7 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|             notificationsVM.getNotificationCache(notificationList, timelineParams) |             notificationsVM.getNotificationCache(notificationList, timelineParams) | ||||||
|                     .observe(getViewLifecycleOwner(), notificationsTop -> { |                     .observe(getViewLifecycleOwner(), notificationsTop -> { | ||||||
|                         if (notificationsTop == null || notificationsTop.notifications == null || notificationsTop.notifications.size() == 0) { |                         if (notificationsTop == null || notificationsTop.notifications == null || notificationsTop.notifications.size() == 0) { | ||||||
|                             getLiveNotifications(FragmentMastodonTimeline.DIRECTION.BOTTOM, fetchingMissing, timelineParams, null); |                             getLiveNotifications(FragmentMastodonTimeline.DIRECTION.TOP, fetchingMissing, timelineParams, null); | ||||||
|                         } else { |                         } else { | ||||||
|                             dealWithPagination(notificationsTop, FragmentMastodonTimeline.DIRECTION.TOP, fetchingMissing, null); |                             dealWithPagination(notificationsTop, FragmentMastodonTimeline.DIRECTION.TOP, fetchingMissing, null); | ||||||
|                         } |                         } | ||||||
|  | @ -488,6 +487,9 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|         } else if (direction == FragmentMastodonTimeline.DIRECTION.BOTTOM) { |         } else if (direction == FragmentMastodonTimeline.DIRECTION.BOTTOM) { | ||||||
|             flagLoading = true; |             flagLoading = true; | ||||||
|         } |         } | ||||||
|  |         if (direction == FragmentMastodonTimeline.DIRECTION.SCROLL_TOP) { | ||||||
|  |             binding.recyclerView.scrollToPosition(0); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | @ -500,9 +502,9 @@ public class FragmentMastodonNotification extends Fragment implements Notificati | ||||||
|             for (Notification notificationReceived : notificationsReceived) { |             for (Notification notificationReceived : notificationsReceived) { | ||||||
|                 int position = 0; |                 int position = 0; | ||||||
|                 //We loop through messages already in the timeline |                 //We loop through messages already in the timeline | ||||||
|                 if (this.notificationList != null) { |                 if (notificationList != null) { | ||||||
|                     notificationAdapter.notifyItemRangeChanged(0, this.notificationList.size()); |                     notificationAdapter.notifyItemRangeChanged(0, notificationList.size()); | ||||||
|                     for (Notification notificationsAlreadyPresent : this.notificationList) { |                     for (Notification notificationsAlreadyPresent : notificationList) { | ||||||
|                         //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position |                         //We compare the date of each status and we only add status having a date greater than the another, it is inserted at this position | ||||||
|                         //Pinned messages are ignored because their date can be older |                         //Pinned messages are ignored because their date can be older | ||||||
|                         if (notificationReceived.id.compareTo(notificationsAlreadyPresent.id) > 0) { |                         if (notificationReceived.id.compareTo(notificationsAlreadyPresent.id) > 0) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue