maintain order of conversations in share with dialog

This commit is contained in:
Daniel Gultsch 2019-01-11 17:19:54 +01:00
parent c11dd71510
commit 8124b24479
2 changed files with 31 additions and 5 deletions

View file

@ -55,6 +55,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Hashtable; import java.util.Hashtable;
@ -1650,10 +1651,23 @@ public class XmppConnectionService extends Service {
} }
public void populateWithOrderedConversations(final List<Conversation> list) { public void populateWithOrderedConversations(final List<Conversation> list) {
populateWithOrderedConversations(list, true); populateWithOrderedConversations(list, true, true);
} }
public void populateWithOrderedConversations(final List<Conversation> list, boolean includeNoFileUpload) { public void populateWithOrderedConversations(final List<Conversation> list, final boolean includeNoFileUpload) {
populateWithOrderedConversations(list, includeNoFileUpload, true);
}
public void populateWithOrderedConversations(final List<Conversation> list, final boolean includeNoFileUpload, final boolean sort) {
final List<String> orderedUuids;
if (sort) {
orderedUuids = null;
} else {
orderedUuids = new ArrayList<>();
for(Conversation conversation : list) {
orderedUuids.add(conversation.getUuid());
}
}
list.clear(); list.clear();
if (includeNoFileUpload) { if (includeNoFileUpload) {
list.addAll(getConversations()); list.addAll(getConversations());
@ -1666,7 +1680,18 @@ public class XmppConnectionService extends Service {
} }
} }
try { try {
Collections.sort(list); if (orderedUuids != null) {
Collections.sort(list, (a, b) -> {
final int indexA = orderedUuids.indexOf(a.getUuid());
final int indexB = orderedUuids.indexOf(b.getUuid());
if (indexA == -1 || indexB == -1 || indexA == indexB) {
return a.compareTo(b);
}
return indexA - indexB;
});
} else {
Collections.sort(list);
}
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
//ignore //ignore
} }

View file

@ -141,7 +141,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
this.share.uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); this.share.uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
} }
if (xmppConnectionServiceBound) { if (xmppConnectionServiceBound) {
xmppConnectionService.populateWithOrderedConversations(mConversations, this.share.uris.size() == 0); xmppConnectionService.populateWithOrderedConversations(mConversations, this.share.uris.size() == 0, false);
} }
} }
@ -195,7 +195,8 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
} }
public void refreshUiReal() { public void refreshUiReal() {
xmppConnectionService.populateWithOrderedConversations(mConversations, this.share != null && this.share.uris.size() == 0); //TODO inject desired order to not resort on refresh
xmppConnectionService.populateWithOrderedConversations(mConversations, this.share != null && this.share.uris.size() == 0, false);
mAdapter.notifyDataSetChanged(); mAdapter.notifyDataSetChanged();
} }
} }