瀏覽代碼

sort participants list

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 4 年之前
父節點
當前提交
b80396b34b

+ 4 - 8
app/src/main/java/com/nextcloud/talk/adapters/items/UserItem.java

@@ -26,6 +26,10 @@ import android.text.TextUtils;
 import android.view.View;
 import android.widget.ImageView;
 
+import androidx.annotation.Nullable;
+import androidx.core.content.res.ResourcesCompat;
+import androidx.emoji.widget.EmojiTextView;
+
 import com.facebook.drawee.backends.pipeline.Fresco;
 import com.facebook.drawee.interfaces.DraweeController;
 import com.facebook.drawee.view.SimpleDraweeView;
@@ -40,11 +44,6 @@ import com.nextcloud.talk.utils.DisplayUtils;
 import java.util.List;
 import java.util.regex.Pattern;
 
-import androidx.annotation.Nullable;
-
-import androidx.core.content.ContextCompat;
-import androidx.core.content.res.ResourcesCompat;
-import androidx.emoji.widget.EmojiTextView;
 import butterknife.BindView;
 import butterknife.ButterKnife;
 import eu.davidea.flexibleadapter.FlexibleAdapter;
@@ -269,7 +268,6 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
         this.header = header;
     }
 
-
     static class UserItemViewHolder extends FlexibleViewHolder {
 
         @BindView(R.id.name_text)
@@ -297,6 +295,4 @@ public class UserItem extends AbstractFlexibleItem<UserItem.UserItemViewHolder>
             ButterKnife.bind(this, view);
         }
     }
-
-
 }

+ 19 - 3
app/src/main/java/com/nextcloud/talk/controllers/ConversationInfoController.kt

@@ -78,7 +78,6 @@ import com.yarolegovich.mp.MaterialStandardPreference
 import com.yarolegovich.mp.MaterialSwitchPreference
 import eu.davidea.flexibleadapter.FlexibleAdapter
 import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
-import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
 import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
@@ -142,8 +141,8 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA
     private var databaseStorageModule: DatabaseStorageModule? = null
     private var conversation: Conversation? = null
 
-    private var adapter: FlexibleAdapter<AbstractFlexibleItem<*>>? = null
-    private var recyclerViewItems: MutableList<AbstractFlexibleItem<*>> = ArrayList()
+    private var adapter: FlexibleAdapter<UserItem>? = null
+    private var recyclerViewItems: MutableList<UserItem> = ArrayList()
 
     private var saveStateHandler: LovelySaveStateHandler? = null
 
@@ -376,6 +375,7 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA
             }
         }
 
+        Collections.sort(recyclerViewItems, UserItemComparator())
 
         if (ownUserItem != null) {
             recyclerViewItems.add(0, ownUserItem)
@@ -684,4 +684,20 @@ class ConversationInfoController(args: Bundle) : BaseController(args), FlexibleA
 
         private const val ID_DELETE_CONVERSATION_DIALOG = 0
     }
+
+    class UserItemComparator : Comparator<UserItem> {
+        override fun compare(left: UserItem, right: UserItem): Int {
+            if (left.isOnline && !right.isOnline) {
+                return -1
+            } else if (!left.isOnline && right.isOnline) {
+                return 1
+            }
+            if (Participant.ParticipantType.MODERATOR == left.model.type && Participant.ParticipantType.MODERATOR != right.model.type) {
+                return -1
+            } else if (Participant.ParticipantType.MODERATOR != left.model.type && Participant.ParticipantType.MODERATOR == right.model.type) {
+                return 1
+            }
+            return left.model.displayName.compareTo(right.model.displayName)
+        }
+    }
 }