fix(#421): make out of screen poll items update when clicking the "Show results" button
This commit is contained in:
parent
7bb5584dd9
commit
cdcc428e86
|
@ -28,9 +28,6 @@ import org.joinmastodon.android.api.requests.accounts.GetAccountRelationships;
|
||||||
import org.joinmastodon.android.api.requests.polls.SubmitPollVote;
|
import org.joinmastodon.android.api.requests.polls.SubmitPollVote;
|
||||||
import org.joinmastodon.android.api.requests.statuses.AkkomaTranslateStatus;
|
import org.joinmastodon.android.api.requests.statuses.AkkomaTranslateStatus;
|
||||||
import org.joinmastodon.android.api.requests.statuses.TranslateStatus;
|
import org.joinmastodon.android.api.requests.statuses.TranslateStatus;
|
||||||
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
|
||||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||||
import org.joinmastodon.android.events.PollUpdatedEvent;
|
import org.joinmastodon.android.events.PollUpdatedEvent;
|
||||||
import org.joinmastodon.android.model.Account;
|
import org.joinmastodon.android.model.Account;
|
||||||
|
@ -70,7 +67,6 @@ import org.joinmastodon.android.utils.TypedObjectPool;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -79,14 +75,9 @@ import java.util.Set;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import me.grishka.appkit.Nav;
|
import me.grishka.appkit.Nav;
|
||||||
import me.grishka.appkit.api.Callback;
|
import me.grishka.appkit.api.Callback;
|
||||||
import me.grishka.appkit.api.ErrorResponse;
|
import me.grishka.appkit.api.ErrorResponse;
|
||||||
import me.grishka.appkit.fragments.BaseRecyclerFragment;
|
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
import me.grishka.appkit.imageloader.ImageLoaderRecyclerAdapter;
|
||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||||
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
||||||
|
@ -664,11 +655,30 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onPollViewResultsButtonClick(PollFooterStatusDisplayItem.Holder holder, boolean shown){
|
public void onPollViewResultsButtonClick(PollFooterStatusDisplayItem.Holder holder, boolean shown){
|
||||||
for(int i=0;i<list.getChildCount();i++){
|
int firstOptionIndex=-1, footerIndex=-1;
|
||||||
if(list.getChildViewHolder(list.getChildAt(i)) instanceof PollOptionStatusDisplayItem.Holder item && item.getItemID().equals(holder.getItemID())){
|
int i=0;
|
||||||
item.showResults(shown);
|
for(StatusDisplayItem item:displayItems){
|
||||||
|
if(item.parentID.equals(holder.getItemID())){
|
||||||
|
if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){
|
||||||
|
firstOptionIndex=i;
|
||||||
|
}else if(item instanceof PollFooterStatusDisplayItem){
|
||||||
|
footerIndex=i;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if(firstOptionIndex==-1 || footerIndex==-1)
|
||||||
|
throw new IllegalStateException("Can't find all poll items in displayItems");
|
||||||
|
List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1);
|
||||||
|
|
||||||
|
for(StatusDisplayItem item:pollItems){
|
||||||
|
if (item instanceof PollOptionStatusDisplayItem) {
|
||||||
|
((PollOptionStatusDisplayItem) item).isAnimating=true;
|
||||||
|
((PollOptionStatusDisplayItem) item).showResults=shown;
|
||||||
|
adapter.notifyItemRangeChanged(firstOptionIndex, pollItems.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void submitPollVote(String parentID, String pollID, List<Integer> choices){
|
protected void submitPollVote(String parentID, String pollID, List<Integer> choices){
|
||||||
|
|
|
@ -32,7 +32,8 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
|
||||||
private CharSequence translatedText;
|
private CharSequence translatedText;
|
||||||
public final Poll.Option option;
|
public final Poll.Option option;
|
||||||
private CustomEmojiHelper emojiHelper=new CustomEmojiHelper();
|
private CustomEmojiHelper emojiHelper=new CustomEmojiHelper();
|
||||||
private boolean showResults;
|
public boolean showResults;
|
||||||
|
public boolean isAnimating;
|
||||||
private float votesFraction; // 0..1
|
private float votesFraction; // 0..1
|
||||||
private boolean isMostVoted;
|
private boolean isMostVoted;
|
||||||
private final int optionIndex;
|
private final int optionIndex;
|
||||||
|
@ -125,6 +126,11 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
|
||||||
}
|
}
|
||||||
text.setTextColor(UiUtils.getThemeColor(itemView.getContext(), android.R.attr.textColorPrimary));
|
text.setTextColor(UiUtils.getThemeColor(itemView.getContext(), android.R.attr.textColorPrimary));
|
||||||
percent.setTextColor(UiUtils.getThemeColor(itemView.getContext(), R.attr.colorM3OnSecondaryContainer));
|
percent.setTextColor(UiUtils.getThemeColor(itemView.getContext(), R.attr.colorM3OnSecondaryContainer));
|
||||||
|
|
||||||
|
if (item.isAnimating) {
|
||||||
|
showResults(item.showResults);
|
||||||
|
item.isAnimating= false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue