diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..bef56379 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +github: [tibbi] +patreon: tiborkaputa +custom: ["https://www.paypal.me/SimpleMobileTools", "https://www.simplemobiletools.com/donate"] diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt new file mode 100644 index 00000000..6feb6c18 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt @@ -0,0 +1,6 @@ +package com.simplemobiletools.dialer.fragments + +import android.content.Context +import android.util.AttributeSet + +class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt new file mode 100644 index 00000000..93bbad07 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/MyViewPagerFragment.kt @@ -0,0 +1,28 @@ +package com.simplemobiletools.dialer.fragments + +import android.content.Context +import android.util.AttributeSet +import androidx.coordinatorlayout.widget.CoordinatorLayout +import com.simplemobiletools.commons.extensions.underlineText +import com.simplemobiletools.dialer.activities.SimpleActivity +import com.simplemobiletools.dialer.extensions.config +import com.simplemobiletools.dialer.helpers.Config +import com.simplemobiletools.dialer.models.Contact +import kotlinx.android.synthetic.main.fragment_letters_layout.view.* + +abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet) { + protected var activity: SimpleActivity? = null + protected var allContacts = ArrayList() + + private var lastHashCode = 0 + private lateinit var config: Config + + fun setupFragment(activity: SimpleActivity) { + config = activity.config + if (this.activity == null) { + this.activity = activity + + fragment_placeholder_2?.underlineText() + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/models/Contact.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/models/Contact.kt new file mode 100644 index 00000000..d84df10a --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/models/Contact.kt @@ -0,0 +1,95 @@ +package com.simplemobiletools.dialer.models + +import com.simplemobiletools.commons.extensions.normalizeString +import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME +import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME +import com.simplemobiletools.commons.helpers.SORT_DESCENDING + +data class Contact(var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, + var photoUri: String, var phoneNumbers: ArrayList, var source: String, var starred: Int, var contactId: Int, var thumbnailUri: String, + var organization: Organization) : Comparable { + companion object { + var sorting = 0 + var startWithSurname = false + } + + override fun compareTo(other: Contact): Int { + var firstString: String + var secondString: String + + when { + sorting and SORT_BY_FIRST_NAME != 0 -> { + firstString = firstName.normalizeString() + secondString = other.firstName.normalizeString() + } + sorting and SORT_BY_MIDDLE_NAME != 0 -> { + firstString = middleName.normalizeString() + secondString = other.middleName.normalizeString() + } + else -> { + firstString = surname.normalizeString() + secondString = other.surname.normalizeString() + } + } + + if (firstString.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty()) { + val fullCompany = getFullCompany() + if (fullCompany.isNotEmpty()) { + firstString = fullCompany.normalizeString() + } + } + + if (secondString.isEmpty() && other.firstName.isEmpty() && other.middleName.isEmpty() && other.surname.isEmpty()) { + val otherFullCompany = other.getFullCompany() + if (otherFullCompany.isNotEmpty()) { + secondString = otherFullCompany.normalizeString() + } + } + + var result = 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 { + if (firstString.toLowerCase() == secondString.toLowerCase()) { + getNameToDisplay().compareTo(other.getNameToDisplay(), true) + } else { + firstString.compareTo(secondString, true) + } + } + } + + if (sorting and SORT_DESCENDING != 0) { + result *= -1 + } + + return result + } + + fun getNameToDisplay(): String { + var firstPart = if (startWithSurname) surname else firstName + if (middleName.isNotEmpty()) { + firstPart += " $middleName" + } + + val lastPart = if (startWithSurname) firstName else surname + val suffixComma = if (suffix.isEmpty()) "" else ", $suffix" + val fullName = "$prefix $firstPart $lastPart$suffixComma".trim() + return if (fullName.isEmpty() && organization.isNotEmpty()) { + getFullCompany() + } else { + fullName + } + } + + fun getFullCompany(): String { + var fullOrganization = if (organization.company.isEmpty()) "" else "${organization.company}, " + fullOrganization += organization.jobPosition + return fullOrganization.trim().trimEnd(',') + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/models/Organization.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/models/Organization.kt new file mode 100644 index 00000000..8340cebc --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/models/Organization.kt @@ -0,0 +1,7 @@ +package com.simplemobiletools.dialer.models + +data class Organization(var company: String, var jobPosition: String) { + fun isEmpty() = company.isEmpty() && jobPosition.isEmpty() + + fun isNotEmpty() = !isEmpty() +} diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/models/PhoneNumber.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/models/PhoneNumber.kt new file mode 100644 index 00000000..56900719 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/models/PhoneNumber.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.dialer.models + +data class PhoneNumber(var value: String, var type: Int, var label: String, var normalizedNumber: String?) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e119ba87..0f59b8f8 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,6 +1,23 @@ + + + + diff --git a/app/src/main/res/layout/fragment_contacts.xml b/app/src/main/res/layout/fragment_contacts.xml new file mode 100644 index 00000000..23bfe6c3 --- /dev/null +++ b/app/src/main/res/layout/fragment_contacts.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_letters_layout.xml b/app/src/main/res/layout/fragment_letters_layout.xml new file mode 100644 index 00000000..bea2b84c --- /dev/null +++ b/app/src/main/res/layout/fragment_letters_layout.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + +