keep revealed states when reloading

closes sk22#561
This commit is contained in:
sk 2023-06-09 13:27:25 +02:00
parent ba7aeb358b
commit c4238fb19b
1 changed files with 20 additions and 1 deletions

View File

@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.joinmastodon.android.E;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R;
import org.joinmastodon.android.api.requests.statuses.GetStatusByID;
import org.joinmastodon.android.api.requests.statuses.GetStatusContext;
@ -38,6 +37,7 @@ import java.util.Collections;
import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
@ -118,7 +118,10 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
@Override
public void onSuccess(StatusContext result){
if (getContext() == null) return;
Map<String, Status> oldData = null;
if(refreshing){
oldData = new HashMap<>(data.size());
for (Status s : data) oldData.put(s.id, s);
data.clear();
ancestryMap.clear();
displayItems.clear();
@ -150,6 +153,18 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
adapter.notifyItemRemoved(prependedCount);
count--;
}
// restore previous spoiler/filter revealed states when refreshing
if (refreshing && oldData.size() > 0) {
for (Status s : data) {
Status oldStatus = oldData.get(s.id);
if (oldStatus != null) {
s.spoilerRevealed = oldStatus.spoilerRevealed;
s.filterRevealed = oldStatus.filterRevealed;
}
}
}
dataLoaded();
if(refreshing){
refreshDone();
@ -188,6 +203,10 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist
protected Object maybeApplyMainStatus() {
if (updatedStatus == null || !contextInitiallyRendered) return null;
// restore revealed states for main status because it gets updated after doLoadData
updatedStatus.filterRevealed = mainStatus.filterRevealed;
updatedStatus.spoilerRevealed = mainStatus.spoilerRevealed;
// returning fired event object to facilitate testing
Object event;
if (updatedStatus.editedAt != null &&