Add favorite reaction in right place + fix issues
This commit is contained in:
@@ -281,7 +281,6 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
|||||||
reactions.updateReactions(ev.reactions);
|
reactions.updateReactions(ev.reactions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
n.status.getContentStatus().update(ev);
|
|
||||||
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
||||||
for(int i=0;i<list.getChildCount();i++){
|
for(int i=0;i<list.getChildCount();i++){
|
||||||
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
||||||
|
|||||||
@@ -292,7 +292,6 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
|||||||
reactions.updateReactions(ev.reactions);
|
reactions.updateReactions(ev.reactions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
s.getContentStatus().update(ev);
|
|
||||||
AccountSessionManager.get(accountID).getCacheController().updateStatus(s);
|
AccountSessionManager.get(accountID).getCacheController().updateStatus(s);
|
||||||
for(int i=0;i<list.getChildCount();i++){
|
for(int i=0;i<list.getChildCount();i++){
|
||||||
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
RecyclerView.ViewHolder holder=list.getChildViewHolder(list.getChildAt(i));
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ import org.joinmastodon.android.ui.utils.TextDrawable;
|
|||||||
import org.joinmastodon.android.ui.utils.UiUtils;
|
import org.joinmastodon.android.ui.utils.UiUtils;
|
||||||
import org.joinmastodon.android.ui.views.EmojiReactionButton;
|
import org.joinmastodon.android.ui.views.EmojiReactionButton;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
@@ -69,6 +71,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
|||||||
private final boolean hideEmpty, forAnnouncement, playGifs;
|
private final boolean hideEmpty, forAnnouncement, playGifs;
|
||||||
private final String accountID;
|
private final String accountID;
|
||||||
private static final float ALPHA_DISABLED=0.55f;
|
private static final float ALPHA_DISABLED=0.55f;
|
||||||
|
private boolean forceShow=false;
|
||||||
|
|
||||||
public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) {
|
public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) {
|
||||||
super(parentID, parentFragment);
|
super(parentID, parentFragment);
|
||||||
@@ -97,6 +100,10 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isHidden(){
|
public boolean isHidden(){
|
||||||
|
if(forceShow){
|
||||||
|
forceShow=false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return status.reactions.isEmpty() && hideEmpty;
|
return status.reactions.isEmpty() && hideEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,11 +332,14 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateReactions(List<EmojiReaction> reactions){
|
public void updateReactions(List<EmojiReaction> reactions){
|
||||||
|
item.status.reactions=new ArrayList<>(item.status.reactions); // I don't know how, but this seemingly fixes a bug
|
||||||
|
|
||||||
|
List<EmojiReaction> toRemove=new ArrayList<>();
|
||||||
for(int i=0;i<item.status.reactions.size();i++){
|
for(int i=0;i<item.status.reactions.size();i++){
|
||||||
EmojiReaction reaction=item.status.reactions.get(i);
|
EmojiReaction reaction=item.status.reactions.get(i);
|
||||||
Optional<EmojiReaction> newReactionOptional=reactions.stream().filter(r->r.name.equals(reaction.name)).findFirst();
|
Optional<EmojiReaction> newReactionOptional=reactions.stream().filter(r->r.name.equals(reaction.name)).findFirst();
|
||||||
if(newReactionOptional.isEmpty()){ // deleted reactions
|
if(newReactionOptional.isEmpty()){ // deleted reactions
|
||||||
adapter.notifyItemRemoved(i);
|
toRemove.add(reaction);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,25 +353,39 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
|||||||
item.setActionProgressVisible(reactionHolder, true);
|
item.setActionProgressVisible(reactionHolder, true);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
|
item.status.reactions.set(i, newReaction);
|
||||||
adapter.notifyItemChanged(i);
|
adapter.notifyItemChanged(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.reverse(toRemove);
|
||||||
|
for(EmojiReaction r:toRemove){
|
||||||
|
int index=item.status.reactions.indexOf(r);
|
||||||
|
item.status.reactions.remove(index);
|
||||||
|
adapter.notifyItemRemoved(index);
|
||||||
|
}
|
||||||
|
|
||||||
boolean pendingAddReaction=false;
|
boolean pendingAddReaction=false;
|
||||||
for(EmojiReaction reaction:reactions){
|
for(int i=0;i<reactions.size();i++){
|
||||||
|
EmojiReaction reaction=reactions.get(i);
|
||||||
if(item.status.reactions.stream().anyMatch(r->r.name.equals(reaction.name)))
|
if(item.status.reactions.stream().anyMatch(r->r.name.equals(reaction.name)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// new reactions
|
// new reactions
|
||||||
if(reaction.pendingChange){
|
if(reaction.pendingChange){
|
||||||
pendingAddReaction=true;
|
pendingAddReaction=true;
|
||||||
|
item.forceShow=true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int pos=item.status.reactions.size();
|
boolean previouslyEmpty=item.status.reactions.isEmpty();
|
||||||
item.status.reactions.add(pos, reaction);
|
item.status.reactions.add(i, reaction);
|
||||||
adapter.notifyItemInserted(pos);
|
if(previouslyEmpty)
|
||||||
|
adapter.notifyItemChanged(i);
|
||||||
|
else
|
||||||
|
adapter.notifyItemInserted(i);
|
||||||
RecyclerView.SmoothScroller scroller=new LinearSmoothScroller(list.getContext());
|
RecyclerView.SmoothScroller scroller=new LinearSmoothScroller(list.getContext());
|
||||||
scroller.setTargetPosition(pos);
|
scroller.setTargetPosition(i);
|
||||||
list.getLayoutManager().startSmoothScroll(scroller);
|
list.getLayoutManager().startSmoothScroll(scroller);
|
||||||
}
|
}
|
||||||
if(pendingAddReaction){
|
if(pendingAddReaction){
|
||||||
|
|||||||
Reference in New Issue
Block a user