Fixes bug where the order of notifications could be jumbled when removing duplicates using a HashSet.

This commit is contained in:
Vavassor 2017-07-13 20:17:50 -04:00
commit 5754a3a177
4 changed files with 17 additions and 11 deletions

View file

@ -20,9 +20,9 @@ import android.support.v7.widget.RecyclerView;
import com.keylesspalace.tusky.entity.Account;
import com.keylesspalace.tusky.interfaces.AccountActionListener;
import com.keylesspalace.tusky.util.ListUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public abstract class AccountAdapter extends RecyclerView.Adapter {
@ -57,8 +57,7 @@ public abstract class AccountAdapter extends RecyclerView.Adapter {
topId = uptoId;
}
if (accountList.isEmpty()) {
// This construction removes duplicates.
accountList = new ArrayList<>(new HashSet<>(newAccounts));
accountList = ListUtils.removeDuplicates(newAccounts);
} else {
int index = accountList.indexOf(newAccounts.get(newAccounts.size() - 1));
for (int i = 0; i < index; i++) {

View file

@ -34,10 +34,10 @@ import com.keylesspalace.tusky.entity.Notification;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.interfaces.AdapterItemRemover;
import com.keylesspalace.tusky.interfaces.StatusActionListener;
import com.keylesspalace.tusky.util.ListUtils;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class NotificationsAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
@ -181,7 +181,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
public void update(@Nullable List<Notification> newNotifications, @Nullable String fromId,
@Nullable String uptoId) {
if (newNotifications == null || newNotifications.isEmpty()) {
if (ListUtils.isEmpty(newNotifications)) {
return;
}
if (fromId != null) {
@ -191,8 +191,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter implements Adapte
topId = uptoId;
}
if (notifications.isEmpty()) {
// This construction removes duplicates.
notifications = new ArrayList<>(new HashSet<>(newNotifications));
notifications = ListUtils.removeDuplicates(newNotifications);
} else {
int index = notifications.indexOf(newNotifications.get(newNotifications.size() - 1));
for (int i = 0; i < index; i++) {

View file

@ -25,9 +25,9 @@ import com.keylesspalace.tusky.R;
import com.keylesspalace.tusky.interfaces.AdapterItemRemover;
import com.keylesspalace.tusky.interfaces.StatusActionListener;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.util.ListUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItemRemover {
@ -113,7 +113,7 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
public void update(@Nullable List<Status> newStatuses, @Nullable String fromId,
@Nullable String uptoId) {
if (newStatuses == null || newStatuses.isEmpty()) {
if (ListUtils.isEmpty(newStatuses)) {
return;
}
if (fromId != null) {
@ -123,8 +123,7 @@ public class TimelineAdapter extends RecyclerView.Adapter implements AdapterItem
topId = uptoId;
}
if (statuses.isEmpty()) {
// This construction removes duplicates.
statuses = new ArrayList<>(new HashSet<>(newStatuses));
statuses = ListUtils.removeDuplicates(newStatuses);
} else {
int index = statuses.indexOf(newStatuses.get(newStatuses.size() - 1));
for (int i = 0; i < index; i++) {