From d98c1abb96107a7c52881f6d47d3c3dd3e68eac0 Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 3 May 2020 23:43:09 +0200 Subject: [PATCH] improve contact sorting at New Conversation, prefer names starting with letters --- .../activities/NewConversationActivity.kt | 6 +---- .../smsmessenger/extensions/Context.kt | 2 +- .../smsmessenger/models/Contact.kt | 23 ++++++++++++++++++- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt index f6eb6fc6..76bb20a5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt @@ -163,11 +163,7 @@ class NewConversationActivity : SimpleActivity() { contacts_letter_fastscroller.setupWithRecyclerView(contacts_list, { position -> try { val name = contacts[position].name - var character = if (name.isNotEmpty()) name.substring(0, 1) else "" - if (!character.areLettersOnly()) { - character = "#" - } - + val character = if (name.isNotEmpty()) name.substring(0, 1) else "" FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault())) } catch (e: Exception) { FastScrollItemIndicator.Text("") diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index e62461c0..d5e8a2e5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -403,7 +403,7 @@ fun Context.getAvailableContacts(callback: (ArrayList) -> Unit) { it.phoneNumber.substring(startIndex) }.toMutableList() as ArrayList - allContacts.sortBy { it.name.normalizeString().toLowerCase(Locale.getDefault()) } + allContacts.sort() callback(allContacts) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Contact.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Contact.kt index a5c186c5..a467254f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Contact.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Contact.kt @@ -1,3 +1,24 @@ package com.simplemobiletools.smsmessenger.models -data class Contact(val id: Int, var name: String, var photoUri: String, var phoneNumber: String) +import com.simplemobiletools.commons.extensions.normalizeString + +data class Contact(val id: Int, var name: String, var photoUri: String, var phoneNumber: String) : Comparable { + override fun compareTo(other: Contact): Int { + val firstString = name.normalizeString() + val secondString = other.name.normalizeString() + + return if (firstString.firstOrNull()?.isLetter() == true && secondString.firstOrNull()?.isLetter() == false) { + -1 + } else if (firstString.firstOrNull()?.isLetter() == false && secondString.firstOrNull()?.isLetter() == true) { + 1 + } else { + if (firstString.isEmpty() && secondString.isNotEmpty()) { + 1 + } else if (firstString.isNotEmpty() && secondString.isEmpty()) { + -1 + } else { + firstString.compareTo(secondString, true) + } + } + } +}