Don't auto-refresh notifications if the user scrolled too far

This commit is contained in:
Grishka 2023-10-21 11:34:55 +03:00
parent 66b7b127f9
commit ac1e5e991e
1 changed files with 17 additions and 1 deletions

View File

@ -130,7 +130,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
protected void onShown(){ protected void onShown(){
super.onShown(); super.onShown();
unreadMarker=realUnreadMarker=AccountSessionManager.get(accountID).getLastKnownNotificationsMarker(); unreadMarker=realUnreadMarker=AccountSessionManager.get(accountID).getLastKnownNotificationsMarker();
if(!dataLoading){ if(!dataLoading && canRefreshWithoutUpsettingUser()){
reloadingFromCache=true; reloadingFromCache=true;
refresh(); refresh();
} }
@ -348,4 +348,20 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
} }
} }
} }
private boolean canRefreshWithoutUpsettingUser(){
// TODO maybe reload notifications the same way we reload the home timelines, i.e. with gaps and stuff
if(data.size()<=itemsPerPage)
return true;
for(int i=list.getChildCount()-1;i>=0;i--){
if(list.getChildViewHolder(list.getChildAt(i)) instanceof StatusDisplayItem.Holder<?> itemHolder){
String id=itemHolder.getItemID();
for(int j=0;j<data.size();j++){
if(data.get(j).id.equals(id))
return j<itemsPerPage; // Can refresh the list without losing scroll position if it is within the first page
}
}
}
return true;
}
} }