Change summary
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java | 31
src/main/java/eu/siacs/conversations/ui/ShareWithActivity.java | 5
2 files changed, 31 insertions(+), 5 deletions(-)
Detailed changes
@@ -55,6 +55,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
@@ -1650,10 +1651,23 @@ public class XmppConnectionService extends Service {
}
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();
if (includeNoFileUpload) {
list.addAll(getConversations());
@@ -1666,7 +1680,18 @@ public class XmppConnectionService extends Service {
}
}
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) {
//ignore
}
@@ -141,7 +141,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
this.share.uris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
}
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() {
- 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();
}
}