Skip to content

Commit d98c1ab

Browse files
committed
improve contact sorting at New Conversation, prefer names starting with letters
1 parent 96e78e3 commit d98c1ab

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,7 @@ class NewConversationActivity : SimpleActivity() {
163163
contacts_letter_fastscroller.setupWithRecyclerView(contacts_list, { position ->
164164
try {
165165
val name = contacts[position].name
166-
var character = if (name.isNotEmpty()) name.substring(0, 1) else ""
167-
if (!character.areLettersOnly()) {
168-
character = "#"
169-
}
170-
166+
val character = if (name.isNotEmpty()) name.substring(0, 1) else ""
171167
FastScrollItemIndicator.Text(character.toUpperCase(Locale.getDefault()))
172168
} catch (e: Exception) {
173169
FastScrollItemIndicator.Text("")

app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ fun Context.getAvailableContacts(callback: (ArrayList<Contact>) -> Unit) {
403403
it.phoneNumber.substring(startIndex)
404404
}.toMutableList() as ArrayList<Contact>
405405

406-
allContacts.sortBy { it.name.normalizeString().toLowerCase(Locale.getDefault()) }
406+
allContacts.sort()
407407
callback(allContacts)
408408
}
409409
}
Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
11
package com.simplemobiletools.smsmessenger.models
22

3-
data class Contact(val id: Int, var name: String, var photoUri: String, var phoneNumber: String)
3+
import com.simplemobiletools.commons.extensions.normalizeString
4+
5+
data class Contact(val id: Int, var name: String, var photoUri: String, var phoneNumber: String) : Comparable<Contact> {
6+
override fun compareTo(other: Contact): Int {
7+
val firstString = name.normalizeString()
8+
val secondString = other.name.normalizeString()
9+
10+
return if (firstString.firstOrNull()?.isLetter() == true && secondString.firstOrNull()?.isLetter() == false) {
11+
-1
12+
} else if (firstString.firstOrNull()?.isLetter() == false && secondString.firstOrNull()?.isLetter() == true) {
13+
1
14+
} else {
15+
if (firstString.isEmpty() && secondString.isNotEmpty()) {
16+
1
17+
} else if (firstString.isNotEmpty() && secondString.isEmpty()) {
18+
-1
19+
} else {
20+
firstString.compareTo(secondString, true)
21+
}
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)