diff --git a/app/src/main/java/com/bnyro/contacts/obj/ContactData.kt b/app/src/main/java/com/bnyro/contacts/obj/ContactData.kt index d7651465..ff5d3282 100644 --- a/app/src/main/java/com/bnyro/contacts/obj/ContactData.kt +++ b/app/src/main/java/com/bnyro/contacts/obj/ContactData.kt @@ -9,6 +9,7 @@ data class ContactData( var accountType: String? = null, var accountName: String? = null, var displayName: String? = null, + var alternativeName: String? = null, var firstName: String? = null, var surName: String? = null, var photo: Bitmap? = null, diff --git a/app/src/main/java/com/bnyro/contacts/ui/components/ContactItem.kt b/app/src/main/java/com/bnyro/contacts/ui/components/ContactItem.kt index 58a6d950..e5bdacd3 100644 --- a/app/src/main/java/com/bnyro/contacts/ui/components/ContactItem.kt +++ b/app/src/main/java/com/bnyro/contacts/ui/components/ContactItem.kt @@ -35,7 +35,6 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.bnyro.contacts.enums.SortOrder import com.bnyro.contacts.ext.contentColor -import com.bnyro.contacts.ext.notAName import com.bnyro.contacts.obj.ContactData import com.bnyro.contacts.ui.models.ContactsModel import com.bnyro.contacts.ui.screens.SingleContactScreen @@ -59,6 +58,11 @@ fun ContactItem( mutableStateOf(false) } + val contactName = when (sortOrder) { + SortOrder.FIRSTNAME -> contact.displayName + SortOrder.LASTNAME -> contact.alternativeName + }.orEmpty().trim() + ElevatedCard( modifier = Modifier .padding(horizontal = 10.dp, vertical = 5.dp) @@ -111,7 +115,7 @@ fun ContactItem( } else if (thumbnail == null) { Text( modifier = Modifier.align(Alignment.Center), - text = (contact.displayName?.firstOrNull() ?: "").toString(), + text = (contactName.firstOrNull() ?: "").toString(), color = contentColor // MaterialTheme.colorScheme.onPrimary ) } else { @@ -126,13 +130,7 @@ fun ContactItem( } } Spacer(modifier = Modifier.width(20.dp)) - Text( - when { - sortOrder == SortOrder.FIRSTNAME -> "${contact.firstName ?: ""} ${contact.surName ?: ""}" - sortOrder == SortOrder.LASTNAME && !contact.surName.notAName() && !contact.firstName.notAName() -> "${contact.surName}, ${contact.firstName}" - else -> contact.displayName.orEmpty() - }.trim() - ) + Text(contactName) } } diff --git a/app/src/main/java/com/bnyro/contacts/ui/components/ContactsPage.kt b/app/src/main/java/com/bnyro/contacts/ui/components/ContactsPage.kt index 8e3db7f8..b7aa2010 100644 --- a/app/src/main/java/com/bnyro/contacts/ui/components/ContactsPage.kt +++ b/app/src/main/java/com/bnyro/contacts/ui/components/ContactsPage.kt @@ -318,14 +318,14 @@ fun ContactsPage( } }.sortedBy { when (filterOptions.sortOder) { - SortOrder.FIRSTNAME -> it.firstName - SortOrder.LASTNAME -> it.surName + SortOrder.FIRSTNAME -> it.displayName + SortOrder.LASTNAME -> it.alternativeName } }.groupBy { when (filterOptions.sortOder) { - SortOrder.FIRSTNAME -> it.firstName?.firstOrNull()?.uppercase() - SortOrder.LASTNAME -> it.surName?.firstOrNull()?.uppercase() - } + SortOrder.FIRSTNAME -> it.displayName + SortOrder.LASTNAME -> it.alternativeName + }?.firstOrNull()?.uppercase() } contactGroups.forEach { (firstLetter, groupedContacts) -> diff --git a/app/src/main/java/com/bnyro/contacts/util/DeviceContactsHelper.kt b/app/src/main/java/com/bnyro/contacts/util/DeviceContactsHelper.kt index 121dafa0..c7d927da 100644 --- a/app/src/main/java/com/bnyro/contacts/util/DeviceContactsHelper.kt +++ b/app/src/main/java/com/bnyro/contacts/util/DeviceContactsHelper.kt @@ -19,6 +19,7 @@ import android.provider.ContactsContract.CommonDataKinds.Phone import android.provider.ContactsContract.CommonDataKinds.Photo import android.provider.ContactsContract.CommonDataKinds.StructuredName import android.provider.ContactsContract.CommonDataKinds.StructuredPostal +import android.provider.ContactsContract.Contacts import android.provider.ContactsContract.Data import android.provider.ContactsContract.RawContacts import androidx.annotation.RequiresPermission @@ -43,7 +44,8 @@ class DeviceContactsHelper(private val context: Context) : ContactsHelper() { private val projection = arrayOf( Data.RAW_CONTACT_ID, RawContacts.CONTACT_ID, - ContactsContract.Contacts.DISPLAY_NAME, + Contacts.DISPLAY_NAME, + Contacts.DISPLAY_NAME_ALTERNATIVE, StructuredName.GIVEN_NAME, StructuredName.FAMILY_NAME, RawContacts.ACCOUNT_TYPE, @@ -72,7 +74,8 @@ class DeviceContactsHelper(private val context: Context) : ContactsHelper() { // avoid duplicates if (contactList.any { contact -> contact.contactId == contactId }) continue - val displayName = it.stringValue(ContactsContract.Contacts.DISPLAY_NAME) + val displayName = it.stringValue(Contacts.DISPLAY_NAME) + val alternativeName = it.stringValue(Contacts.DISPLAY_NAME_ALTERNATIVE) var firstName = it.stringValue(StructuredName.GIVEN_NAME) var surName = it.stringValue(StructuredName.FAMILY_NAME) @@ -99,9 +102,11 @@ class DeviceContactsHelper(private val context: Context) : ContactsHelper() { accountType = it.stringValue(RawContacts.ACCOUNT_TYPE), accountName = it.stringValue(RawContacts.ACCOUNT_NAME), displayName = displayName, + alternativeName = alternativeName, firstName = firstName, surName = surName ) + contactList.add(contact) } } diff --git a/app/src/main/java/com/bnyro/contacts/util/LocalContactsHelper.kt b/app/src/main/java/com/bnyro/contacts/util/LocalContactsHelper.kt index a1e01ab9..06270752 100644 --- a/app/src/main/java/com/bnyro/contacts/util/LocalContactsHelper.kt +++ b/app/src/main/java/com/bnyro/contacts/util/LocalContactsHelper.kt @@ -69,6 +69,9 @@ class LocalContactsHelper(context: Context) : ContactsHelper() { ContactData( contactId = it.contact.id, displayName = it.contact.displayName, + alternativeName = listOf(it.contact.surName, it.contact.firstName).joinToString( + ", " + ), firstName = it.contact.firstName, surName = it.contact.surName, photo = profileImage,