mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-03-19 12:40:15 +01:00
feat: moved sharable contacts code to commons
This commit is contained in:
parent
f1290bed27
commit
51d76ce99a
@ -10,7 +10,9 @@ import android.graphics.drawable.ColorDrawable
|
|||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.media.RingtoneManager
|
import android.media.RingtoneManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.provider.ContactsContract
|
||||||
import android.provider.ContactsContract.CommonDataKinds.*
|
import android.provider.ContactsContract.CommonDataKinds.*
|
||||||
|
import android.provider.ContactsContract.CommonDataKinds.Email
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
@ -24,12 +26,12 @@ import com.bumptech.glide.request.target.Target
|
|||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.letterBackgroundColors
|
import com.simplemobiletools.commons.helpers.letterBackgroundColors
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.shareContacts
|
import com.simplemobiletools.contacts.pro.extensions.shareContacts
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
|
|
||||||
abstract class ContactActivity : SimpleActivity() {
|
abstract class ContactActivity : SimpleActivity() {
|
||||||
protected val PICK_RINGTONE_INTENT_ID = 1500
|
protected val PICK_RINGTONE_INTENT_ID = 1500
|
||||||
@ -207,8 +209,8 @@ abstract class ContactActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun getEventTextId(type: Int) = when (type) {
|
fun getEventTextId(type: Int) = when (type) {
|
||||||
Event.TYPE_ANNIVERSARY -> R.string.anniversary
|
ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY -> R.string.anniversary
|
||||||
Event.TYPE_BIRTHDAY -> R.string.birthday
|
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY -> R.string.birthday
|
||||||
else -> R.string.other
|
else -> R.string.other
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,10 @@ import com.simplemobiletools.commons.extensions.*
|
|||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Email
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Event
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Organization
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.CustomLabelDialog
|
import com.simplemobiletools.contacts.pro.dialogs.CustomLabelDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
||||||
@ -36,10 +40,6 @@ import com.simplemobiletools.contacts.pro.dialogs.MyDatePickerDialog
|
|||||||
import com.simplemobiletools.contacts.pro.dialogs.SelectGroupsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.SelectGroupsDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.*
|
import com.simplemobiletools.contacts.pro.extensions.*
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.models.*
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Email
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Event
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Organization
|
|
||||||
import kotlinx.android.synthetic.main.activity_edit_contact.*
|
import kotlinx.android.synthetic.main.activity_edit_contact.*
|
||||||
import kotlinx.android.synthetic.main.item_edit_address.view.*
|
import kotlinx.android.synthetic.main.item_edit_address.view.*
|
||||||
import kotlinx.android.synthetic.main.item_edit_email.view.*
|
import kotlinx.android.synthetic.main.item_edit_email.view.*
|
||||||
@ -219,15 +219,25 @@ class EditContactActivity : ContactActivity() {
|
|||||||
|
|
||||||
val properPrimaryColor = getProperPrimaryColor()
|
val properPrimaryColor = getProperPrimaryColor()
|
||||||
arrayOf(
|
arrayOf(
|
||||||
contact_numbers_add_new, contact_emails_add_new, contact_addresses_add_new, contact_ims_add_new, contact_events_add_new,
|
contact_numbers_add_new,
|
||||||
contact_websites_add_new, contact_groups_add_new
|
contact_emails_add_new,
|
||||||
|
contact_addresses_add_new,
|
||||||
|
contact_ims_add_new,
|
||||||
|
contact_events_add_new,
|
||||||
|
contact_websites_add_new,
|
||||||
|
contact_groups_add_new
|
||||||
).forEach {
|
).forEach {
|
||||||
it.applyColorFilter(properPrimaryColor)
|
it.applyColorFilter(properPrimaryColor)
|
||||||
}
|
}
|
||||||
|
|
||||||
arrayOf(
|
arrayOf(
|
||||||
contact_numbers_add_new.background, contact_emails_add_new.background, contact_addresses_add_new.background, contact_ims_add_new.background,
|
contact_numbers_add_new.background,
|
||||||
contact_events_add_new.background, contact_websites_add_new.background, contact_groups_add_new.background
|
contact_emails_add_new.background,
|
||||||
|
contact_addresses_add_new.background,
|
||||||
|
contact_ims_add_new.background,
|
||||||
|
contact_events_add_new.background,
|
||||||
|
contact_websites_add_new.background,
|
||||||
|
contact_groups_add_new.background
|
||||||
).forEach {
|
).forEach {
|
||||||
it.applyColorFilter(textColor)
|
it.applyColorFilter(textColor)
|
||||||
}
|
}
|
||||||
@ -378,7 +388,7 @@ class EditContactActivity : ContactActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupFieldVisibility() {
|
private fun setupFieldVisibility() {
|
||||||
val showFields = config.showContactFields
|
val showFields = contactsConfig.showContactFields
|
||||||
if (showFields and (SHOW_PREFIX_FIELD or SHOW_FIRST_NAME_FIELD or SHOW_MIDDLE_NAME_FIELD or SHOW_SURNAME_FIELD or SHOW_SUFFIX_FIELD) == 0) {
|
if (showFields and (SHOW_PREFIX_FIELD or SHOW_FIRST_NAME_FIELD or SHOW_MIDDLE_NAME_FIELD or SHOW_SURNAME_FIELD or SHOW_SUFFIX_FIELD) == 0) {
|
||||||
contact_name_image.beInvisible()
|
contact_name_image.beInvisible()
|
||||||
}
|
}
|
||||||
@ -599,11 +609,18 @@ class EditContactActivity : ContactActivity() {
|
|||||||
startActivityForResult(ringtonePickerIntent, INTENT_SELECT_RINGTONE)
|
startActivityForResult(ringtonePickerIntent, INTENT_SELECT_RINGTONE)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
val currentRingtone = contact!!.ringtone ?: getDefaultAlarmSound(RingtoneManager.TYPE_RINGTONE).uri
|
val currentRingtone = contact!!.ringtone ?: getDefaultAlarmSound(RingtoneManager.TYPE_RINGTONE).uri
|
||||||
SelectAlarmSoundDialog(this, currentRingtone, AudioManager.STREAM_RING, PICK_RINGTONE_INTENT_ID, RingtoneManager.TYPE_RINGTONE, true,
|
SelectAlarmSoundDialog(
|
||||||
|
this,
|
||||||
|
currentRingtone,
|
||||||
|
AudioManager.STREAM_RING,
|
||||||
|
PICK_RINGTONE_INTENT_ID,
|
||||||
|
RingtoneManager.TYPE_RINGTONE,
|
||||||
|
true,
|
||||||
onAlarmPicked = {
|
onAlarmPicked = {
|
||||||
contact!!.ringtone = it?.uri
|
contact!!.ringtone = it?.uri
|
||||||
contact_ringtone.text = it?.title
|
contact_ringtone.text = it?.title
|
||||||
}, onAlarmSoundDeleted = {}
|
},
|
||||||
|
onAlarmSoundDeleted = {}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -727,7 +744,7 @@ class EditContactActivity : ContactActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupNewContact() {
|
private fun setupNewContact() {
|
||||||
originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE
|
originalContactSource = if (hasContactPermissions()) contactsConfig.lastUsedContactSource else SMT_PRIVATE
|
||||||
contact = getEmptyContact()
|
contact = getEmptyContact()
|
||||||
getPublicContactSource(contact!!.source) {
|
getPublicContactSource(contact!!.source) {
|
||||||
contact_source.text = if (it == "") getString(R.string.phone_storage) else it
|
contact_source.text = if (it == "") getString(R.string.phone_storage) else it
|
||||||
@ -1032,7 +1049,7 @@ class EditContactActivity : ContactActivity() {
|
|||||||
contact = contactValues
|
contact = contactValues
|
||||||
|
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
config.lastUsedContactSource = contact!!.source
|
contactsConfig.lastUsedContactSource = contact!!.source
|
||||||
when {
|
when {
|
||||||
contact!!.id == 0 -> insertNewContact(false)
|
contact!!.id == 0 -> insertNewContact(false)
|
||||||
originalContactSource != contact!!.source -> insertNewContact(true)
|
originalContactSource != contact!!.source -> insertNewContact(true)
|
||||||
@ -1067,7 +1084,7 @@ class EditContactActivity : ContactActivity() {
|
|||||||
events = filledEvents,
|
events = filledEvents,
|
||||||
starred = if (isContactStarred()) 1 else 0,
|
starred = if (isContactStarred()) 1 else 0,
|
||||||
notes = contact_notes.value,
|
notes = contact_notes.value,
|
||||||
websites = filledWebsites,
|
websites = filledWebsites
|
||||||
)
|
)
|
||||||
|
|
||||||
val company = contact_organization_company.value
|
val company = contact_organization_company.value
|
||||||
|
@ -7,19 +7,18 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.NavigationIcon
|
import com.simplemobiletools.commons.helpers.NavigationIcon
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
|
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.SelectContactsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.SelectContactsDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.*
|
import com.simplemobiletools.contacts.pro.extensions.*
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.GROUP
|
import com.simplemobiletools.contacts.pro.helpers.GROUP
|
||||||
import com.simplemobiletools.contacts.pro.helpers.LOCATION_GROUP_CONTACTS
|
import com.simplemobiletools.contacts.pro.helpers.LOCATION_GROUP_CONTACTS
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
|
import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.activity_group_contacts.*
|
import kotlinx.android.synthetic.main.activity_group_contacts.*
|
||||||
|
|
||||||
class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, RefreshContactsListener {
|
class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, RefreshContactsListener {
|
||||||
|
@ -17,15 +17,13 @@ import com.simplemobiletools.contacts.pro.R
|
|||||||
import com.simplemobiletools.contacts.pro.adapters.ViewPagerAdapter
|
import com.simplemobiletools.contacts.pro.adapters.ViewPagerAdapter
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.FilterContactSourcesDialog
|
import com.simplemobiletools.contacts.pro.dialogs.FilterContactSourcesDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getContactPublicUri
|
|
||||||
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
|
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ADD_NEW_CONTACT_NUMBER
|
import com.simplemobiletools.contacts.pro.helpers.ADD_NEW_CONTACT_NUMBER
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.KEY_EMAIL
|
import com.simplemobiletools.contacts.pro.helpers.KEY_EMAIL
|
||||||
import com.simplemobiletools.contacts.pro.helpers.KEY_NAME
|
import com.simplemobiletools.contacts.pro.helpers.KEY_NAME
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import kotlinx.android.synthetic.main.activity_insert_edit_contact.*
|
import kotlinx.android.synthetic.main.activity_insert_edit_contact.*
|
||||||
import kotlinx.android.synthetic.main.fragment_contacts.*
|
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||||
@ -161,7 +159,7 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
private fun setupTabs() {
|
private fun setupTabs() {
|
||||||
insert_edit_tabs_holder.removeAllTabs()
|
insert_edit_tabs_holder.removeAllTabs()
|
||||||
contactsFavoritesList.forEachIndexed { index, value ->
|
contactsFavoritesList.forEachIndexed { index, value ->
|
||||||
if (config.showTabs and value != 0) {
|
if (contactsConfig.showTabs and value != 0) {
|
||||||
insert_edit_tabs_holder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply {
|
insert_edit_tabs_holder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply {
|
||||||
customView?.findViewById<ImageView>(R.id.tab_item_icon)?.setImageDrawable(getTabIcon(index))
|
customView?.findViewById<ImageView>(R.id.tab_item_icon)?.setImageDrawable(getTabIcon(index))
|
||||||
customView?.findViewById<TextView>(R.id.tab_item_label)?.text = getTabLabel(index)
|
customView?.findViewById<TextView>(R.id.tab_item_label)?.text = getTabLabel(index)
|
||||||
@ -351,7 +349,7 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
|
|
||||||
private fun getTabsMask(): Int {
|
private fun getTabsMask(): Int {
|
||||||
var mask = TAB_CONTACTS
|
var mask = TAB_CONTACTS
|
||||||
if (config.showTabs and TAB_FAVORITES != 0) {
|
if (contactsConfig.showTabs and TAB_FAVORITES != 0) {
|
||||||
mask += TAB_FAVORITES
|
mask += TAB_FAVORITES
|
||||||
}
|
}
|
||||||
return mask
|
return mask
|
||||||
|
@ -14,31 +14,28 @@ import android.widget.ImageView
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.viewpager.widget.ViewPager
|
import androidx.viewpager.widget.ViewPager
|
||||||
|
import com.simplemobiletools.commons.databases.ContactsDatabase
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.FAQItem
|
import com.simplemobiletools.commons.models.FAQItem
|
||||||
import com.simplemobiletools.commons.models.Release
|
import com.simplemobiletools.commons.models.Release
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.BuildConfig
|
import com.simplemobiletools.contacts.pro.BuildConfig
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.adapters.ViewPagerAdapter
|
import com.simplemobiletools.contacts.pro.adapters.ViewPagerAdapter
|
||||||
import com.simplemobiletools.contacts.pro.databases.ContactsDatabase
|
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ExportContactsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ExportContactsDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.FilterContactSourcesDialog
|
import com.simplemobiletools.contacts.pro.dialogs.FilterContactSourcesDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ImportContactsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ImportContactsDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getTempFile
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.handleGenericContactClick
|
import com.simplemobiletools.contacts.pro.extensions.handleGenericContactClick
|
||||||
import com.simplemobiletools.contacts.pro.fragments.FavoritesFragment
|
import com.simplemobiletools.contacts.pro.fragments.FavoritesFragment
|
||||||
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
|
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ALL_TABS_MASK
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfExporter
|
import com.simplemobiletools.contacts.pro.helpers.VcfExporter
|
||||||
import com.simplemobiletools.contacts.pro.helpers.tabsList
|
import com.simplemobiletools.contacts.pro.helpers.tabsList
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.android.synthetic.main.fragment_contacts.*
|
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||||
@ -93,19 +90,19 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
if (storedShowPhoneNumbers != config.showPhoneNumbers) {
|
if (storedShowPhoneNumbers != contactsConfig.showPhoneNumbers) {
|
||||||
System.exit(0)
|
System.exit(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (storedShowTabs != config.showTabs) {
|
if (storedShowTabs != contactsConfig.showTabs) {
|
||||||
config.lastUsedViewPagerPage = 0
|
contactsConfig.lastUsedViewPagerPage = 0
|
||||||
finish()
|
finish()
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val configShowContactThumbnails = config.showContactThumbnails
|
val configShowContactThumbnails = contactsConfig.showContactThumbnails
|
||||||
if (storedShowContactThumbnails != configShowContactThumbnails) {
|
if (storedShowContactThumbnails != configShowContactThumbnails) {
|
||||||
getAllFragments().forEach {
|
getAllFragments().forEach {
|
||||||
it?.showContactThumbnailsChanged(configShowContactThumbnails)
|
it?.showContactThumbnailsChanged(configShowContactThumbnails)
|
||||||
@ -122,13 +119,13 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
updateMenuColors()
|
updateMenuColors()
|
||||||
setupTabColors()
|
setupTabColors()
|
||||||
|
|
||||||
val configStartNameWithSurname = config.startNameWithSurname
|
val configStartNameWithSurname = contactsConfig.startNameWithSurname
|
||||||
if (storedStartNameWithSurname != configStartNameWithSurname) {
|
if (storedStartNameWithSurname != configStartNameWithSurname) {
|
||||||
contacts_fragment?.startNameWithSurnameChanged(configStartNameWithSurname)
|
contacts_fragment?.startNameWithSurnameChanged(configStartNameWithSurname)
|
||||||
favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname)
|
favorites_fragment?.startNameWithSurnameChanged(configStartNameWithSurname)
|
||||||
}
|
}
|
||||||
|
|
||||||
val configFontSize = config.fontSize
|
val configFontSize = contactsConfig.fontSize
|
||||||
if (storedFontSize != configFontSize) {
|
if (storedFontSize != configFontSize) {
|
||||||
getAllFragments().forEach {
|
getAllFragments().forEach {
|
||||||
it?.fontSizeChanged()
|
it?.fontSizeChanged()
|
||||||
@ -147,23 +144,23 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
main_dialpad_button.apply {
|
main_dialpad_button.apply {
|
||||||
setImageDrawable(dialpadIcon)
|
setImageDrawable(dialpadIcon)
|
||||||
background.applyColorFilter(properPrimaryColor)
|
background.applyColorFilter(properPrimaryColor)
|
||||||
beVisibleIf(config.showDialpadButton)
|
beVisibleIf(contactsConfig.showDialpadButton)
|
||||||
}
|
}
|
||||||
|
|
||||||
isFirstResume = false
|
isFirstResume = false
|
||||||
checkShortcuts()
|
checkShortcuts()
|
||||||
|
|
||||||
if (!config.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.contacts")) {
|
if (!contactsConfig.wasUpgradedFromFreeShown && isPackageInstalled("com.simplemobiletools.contacts")) {
|
||||||
val dialogText = getString(R.string.upgraded_to_pro_contacts, getString(R.string.phone_storage_hidden))
|
val dialogText = getString(R.string.upgraded_to_pro_contacts, getString(R.string.phone_storage_hidden))
|
||||||
ConfirmationDialog(this, dialogText, 0, R.string.ok, 0, false) {}
|
ConfirmationDialog(this, dialogText, 0, R.string.ok, 0, false) {}
|
||||||
config.wasUpgradedFromFreeShown = true
|
contactsConfig.wasUpgradedFromFreeShown = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
storeStateVariables()
|
storeStateVariables()
|
||||||
config.lastUsedViewPagerPage = view_pager.currentItem
|
contactsConfig.lastUsedViewPagerPage = view_pager.currentItem
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
@ -200,7 +197,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
main_menu.getToolbar().menu.apply {
|
main_menu.getToolbar().menu.apply {
|
||||||
findItem(R.id.sort).isVisible = currentFragment != groups_fragment
|
findItem(R.id.sort).isVisible = currentFragment != groups_fragment
|
||||||
findItem(R.id.filter).isVisible = currentFragment != groups_fragment
|
findItem(R.id.filter).isVisible = currentFragment != groups_fragment
|
||||||
findItem(R.id.dialpad).isVisible = !config.showDialpadButton
|
findItem(R.id.dialpad).isVisible = !contactsConfig.showDialpadButton
|
||||||
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations)
|
findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -242,7 +239,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun storeStateVariables() {
|
private fun storeStateVariables() {
|
||||||
config.apply {
|
contactsConfig.apply {
|
||||||
storedShowContactThumbnails = showContactThumbnails
|
storedShowContactThumbnails = showContactThumbnails
|
||||||
storedShowPhoneNumbers = showPhoneNumbers
|
storedShowPhoneNumbers = showPhoneNumbers
|
||||||
storedStartNameWithSurname = startNameWithSurname
|
storedStartNameWithSurname = startNameWithSurname
|
||||||
@ -253,13 +250,13 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private fun checkShortcuts() {
|
private fun checkShortcuts() {
|
||||||
val appIconColor = config.appIconColor
|
val appIconColor = contactsConfig.appIconColor
|
||||||
if (isNougatMR1Plus() && config.lastHandledShortcutColor != appIconColor) {
|
if (isNougatMR1Plus() && contactsConfig.lastHandledShortcutColor != appIconColor) {
|
||||||
val createNewContact = getCreateNewContactShortcut(appIconColor)
|
val createNewContact = getCreateNewContactShortcut(appIconColor)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
shortcutManager.dynamicShortcuts = Arrays.asList(createNewContact)
|
shortcutManager.dynamicShortcuts = Arrays.asList(createNewContact)
|
||||||
config.lastHandledShortcutColor = appIconColor
|
contactsConfig.lastHandledShortcutColor = appIconColor
|
||||||
} catch (ignored: Exception) {
|
} catch (ignored: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -283,7 +280,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getCurrentFragment(): MyViewPagerFragment? {
|
private fun getCurrentFragment(): MyViewPagerFragment? {
|
||||||
val showTabs = config.showTabs
|
val showTabs = contactsConfig.showTabs
|
||||||
val fragments = arrayListOf<MyViewPagerFragment>()
|
val fragments = arrayListOf<MyViewPagerFragment>()
|
||||||
if (showTabs and TAB_CONTACTS != 0) {
|
if (showTabs and TAB_CONTACTS != 0) {
|
||||||
fragments.add(contacts_fragment)
|
fragments.add(contacts_fragment)
|
||||||
@ -317,7 +314,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
private fun getInactiveTabIndexes(activeIndex: Int) = (0 until main_tabs_holder.tabCount).filter { it != activeIndex }
|
private fun getInactiveTabIndexes(activeIndex: Int) = (0 until main_tabs_holder.tabCount).filter { it != activeIndex }
|
||||||
|
|
||||||
private fun getSelectedTabDrawableIds(): ArrayList<Int> {
|
private fun getSelectedTabDrawableIds(): ArrayList<Int> {
|
||||||
val showTabs = config.showTabs
|
val showTabs = contactsConfig.showTabs
|
||||||
val icons = ArrayList<Int>()
|
val icons = ArrayList<Int>()
|
||||||
|
|
||||||
if (showTabs and TAB_CONTACTS != 0) {
|
if (showTabs and TAB_CONTACTS != 0) {
|
||||||
@ -336,7 +333,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getDeselectedTabDrawableIds(): ArrayList<Int> {
|
private fun getDeselectedTabDrawableIds(): ArrayList<Int> {
|
||||||
val showTabs = config.showTabs
|
val showTabs = contactsConfig.showTabs
|
||||||
val icons = ArrayList<Int>()
|
val icons = ArrayList<Int>()
|
||||||
|
|
||||||
if (showTabs and TAB_CONTACTS != 0) {
|
if (showTabs and TAB_CONTACTS != 0) {
|
||||||
@ -388,7 +385,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
private fun setupTabs() {
|
private fun setupTabs() {
|
||||||
main_tabs_holder.removeAllTabs()
|
main_tabs_holder.removeAllTabs()
|
||||||
tabsList.forEachIndexed { index, value ->
|
tabsList.forEachIndexed { index, value ->
|
||||||
if (config.showTabs and value != 0) {
|
if (contactsConfig.showTabs and value != 0) {
|
||||||
main_tabs_holder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply {
|
main_tabs_holder.newTab().setCustomView(R.layout.bottom_tablayout_item).apply {
|
||||||
customView?.findViewById<ImageView>(R.id.tab_item_icon)?.setImageDrawable(getTabIcon(index))
|
customView?.findViewById<ImageView>(R.id.tab_item_icon)?.setImageDrawable(getTabIcon(index))
|
||||||
customView?.findViewById<TextView>(R.id.tab_item_label)?.text = getTabLabel(index)
|
customView?.findViewById<TextView>(R.id.tab_item_label)?.text = getTabLabel(index)
|
||||||
@ -502,7 +499,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
|
|
||||||
private fun tryExportContacts() {
|
private fun tryExportContacts() {
|
||||||
if (isQPlus()) {
|
if (isQPlus()) {
|
||||||
ExportContactsDialog(this, config.lastExportPath, true) { file, ignoredContactSources ->
|
ExportContactsDialog(this, contactsConfig.lastExportPath, true) { file, ignoredContactSources ->
|
||||||
ignoredExportContactSources = ignoredContactSources
|
ignoredExportContactSources = ignoredContactSources
|
||||||
|
|
||||||
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
|
||||||
@ -522,7 +519,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
} else {
|
} else {
|
||||||
handlePermission(PERMISSION_WRITE_STORAGE) {
|
handlePermission(PERMISSION_WRITE_STORAGE) {
|
||||||
if (it) {
|
if (it) {
|
||||||
ExportContactsDialog(this, config.lastExportPath, false) { file, ignoredContactSources ->
|
ExportContactsDialog(this, contactsConfig.lastExportPath, false) { file, ignoredContactSources ->
|
||||||
getFileOutputStream(file.toFileDirItem(this), true) {
|
getFileOutputStream(file.toFileDirItem(this), true) {
|
||||||
exportContactsTo(ignoredContactSources, it)
|
exportContactsTo(ignoredContactSources, it)
|
||||||
}
|
}
|
||||||
@ -580,7 +577,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
isGettingContacts = true
|
isGettingContacts = true
|
||||||
|
|
||||||
if (view_pager.adapter == null) {
|
if (view_pager.adapter == null) {
|
||||||
view_pager.adapter = ViewPagerAdapter(this, tabsList, config.showTabs)
|
view_pager.adapter = ViewPagerAdapter(this, tabsList, contactsConfig.showTabs)
|
||||||
view_pager.currentItem = getDefaultTab()
|
view_pager.currentItem = getDefaultTab()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -620,9 +617,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
|||||||
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
|
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
|
||||||
|
|
||||||
private fun getDefaultTab(): Int {
|
private fun getDefaultTab(): Int {
|
||||||
val showTabsMask = config.showTabs
|
val showTabsMask = contactsConfig.showTabs
|
||||||
return when (config.defaultTab) {
|
return when (contactsConfig.defaultTab) {
|
||||||
TAB_LAST_USED -> config.lastUsedViewPagerPage
|
TAB_LAST_USED -> contactsConfig.lastUsedViewPagerPage
|
||||||
TAB_CONTACTS -> 0
|
TAB_CONTACTS -> 0
|
||||||
TAB_FAVORITES -> if (showTabsMask and TAB_CONTACTS > 0) 1 else 0
|
TAB_FAVORITES -> if (showTabsMask and TAB_CONTACTS > 0) 1 else 0
|
||||||
else -> {
|
else -> {
|
||||||
|
@ -8,10 +8,7 @@ import com.simplemobiletools.commons.models.RadioItem
|
|||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleTabsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleTabsDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ON_CLICK_CALL_CONTACT
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ON_CLICK_EDIT_CONTACT
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ON_CLICK_VIEW_CONTACT
|
|
||||||
import kotlinx.android.synthetic.main.activity_settings.*
|
import kotlinx.android.synthetic.main.activity_settings.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -80,8 +77,8 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
RadioItem(TAB_LAST_USED, getString(R.string.last_used_tab))
|
RadioItem(TAB_LAST_USED, getString(R.string.last_used_tab))
|
||||||
)
|
)
|
||||||
|
|
||||||
RadioGroupDialog(this@SettingsActivity, items, config.defaultTab) {
|
RadioGroupDialog(this@SettingsActivity, items, contactsConfig.defaultTab) {
|
||||||
config.defaultTab = it as Int
|
contactsConfig.defaultTab = it as Int
|
||||||
settings_default_tab.text = getDefaultTabText()
|
settings_default_tab.text = getDefaultTabText()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -106,19 +103,19 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large))
|
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large))
|
||||||
)
|
)
|
||||||
|
|
||||||
RadioGroupDialog(this@SettingsActivity, items, config.fontSize) {
|
RadioGroupDialog(this@SettingsActivity, items, contactsConfig.fontSize) {
|
||||||
config.fontSize = it as Int
|
contactsConfig.fontSize = it as Int
|
||||||
settings_font_size.text = getFontSizeText()
|
settings_font_size.text = getFontSizeText()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupUseEnglish() {
|
private fun setupUseEnglish() {
|
||||||
settings_use_english_holder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
|
settings_use_english_holder.beVisibleIf((contactsConfig.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
|
||||||
settings_use_english.isChecked = config.useEnglish
|
settings_use_english.isChecked = contactsConfig.useEnglish
|
||||||
settings_use_english_holder.setOnClickListener {
|
settings_use_english_holder.setOnClickListener {
|
||||||
settings_use_english.toggle()
|
settings_use_english.toggle()
|
||||||
config.useEnglish = settings_use_english.isChecked
|
contactsConfig.useEnglish = settings_use_english.isChecked
|
||||||
System.exit(0)
|
System.exit(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -132,50 +129,50 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShowContactThumbnails() {
|
private fun setupShowContactThumbnails() {
|
||||||
settings_show_contact_thumbnails.isChecked = config.showContactThumbnails
|
settings_show_contact_thumbnails.isChecked = contactsConfig.showContactThumbnails
|
||||||
settings_show_contact_thumbnails_holder.setOnClickListener {
|
settings_show_contact_thumbnails_holder.setOnClickListener {
|
||||||
settings_show_contact_thumbnails.toggle()
|
settings_show_contact_thumbnails.toggle()
|
||||||
config.showContactThumbnails = settings_show_contact_thumbnails.isChecked
|
contactsConfig.showContactThumbnails = settings_show_contact_thumbnails.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShowPhoneNumbers() {
|
private fun setupShowPhoneNumbers() {
|
||||||
settings_show_phone_numbers.isChecked = config.showPhoneNumbers
|
settings_show_phone_numbers.isChecked = contactsConfig.showPhoneNumbers
|
||||||
settings_show_phone_numbers_holder.setOnClickListener {
|
settings_show_phone_numbers_holder.setOnClickListener {
|
||||||
settings_show_phone_numbers.toggle()
|
settings_show_phone_numbers.toggle()
|
||||||
config.showPhoneNumbers = settings_show_phone_numbers.isChecked
|
contactsConfig.showPhoneNumbers = settings_show_phone_numbers.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShowContactsWithNumbers() {
|
private fun setupShowContactsWithNumbers() {
|
||||||
settings_show_only_contacts_with_numbers.isChecked = config.showOnlyContactsWithNumbers
|
settings_show_only_contacts_with_numbers.isChecked = contactsConfig.showOnlyContactsWithNumbers
|
||||||
settings_show_only_contacts_with_numbers_holder.setOnClickListener {
|
settings_show_only_contacts_with_numbers_holder.setOnClickListener {
|
||||||
settings_show_only_contacts_with_numbers.toggle()
|
settings_show_only_contacts_with_numbers.toggle()
|
||||||
config.showOnlyContactsWithNumbers = settings_show_only_contacts_with_numbers.isChecked
|
contactsConfig.showOnlyContactsWithNumbers = settings_show_only_contacts_with_numbers.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupStartNameWithSurname() {
|
private fun setupStartNameWithSurname() {
|
||||||
settings_start_name_with_surname.isChecked = config.startNameWithSurname
|
settings_start_name_with_surname.isChecked = contactsConfig.startNameWithSurname
|
||||||
settings_start_name_with_surname_holder.setOnClickListener {
|
settings_start_name_with_surname_holder.setOnClickListener {
|
||||||
settings_start_name_with_surname.toggle()
|
settings_start_name_with_surname.toggle()
|
||||||
config.startNameWithSurname = settings_start_name_with_surname.isChecked
|
contactsConfig.startNameWithSurname = settings_start_name_with_surname.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShowDialpadButton() {
|
private fun setupShowDialpadButton() {
|
||||||
settings_show_dialpad_button.isChecked = config.showDialpadButton
|
settings_show_dialpad_button.isChecked = contactsConfig.showDialpadButton
|
||||||
settings_show_dialpad_button_holder.setOnClickListener {
|
settings_show_dialpad_button_holder.setOnClickListener {
|
||||||
settings_show_dialpad_button.toggle()
|
settings_show_dialpad_button.toggle()
|
||||||
config.showDialpadButton = settings_show_dialpad_button.isChecked
|
contactsConfig.showDialpadButton = settings_show_dialpad_button.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupShowPrivateContacts() {
|
private fun setupShowPrivateContacts() {
|
||||||
settings_show_private_contacts.isChecked = config.showPrivateContacts
|
settings_show_private_contacts.isChecked = contactsConfig.showPrivateContacts
|
||||||
settings_show_private_contacts_holder.setOnClickListener {
|
settings_show_private_contacts_holder.setOnClickListener {
|
||||||
settings_show_private_contacts.toggle()
|
settings_show_private_contacts.toggle()
|
||||||
config.showPrivateContacts = settings_show_private_contacts.isChecked
|
contactsConfig.showPrivateContacts = settings_show_private_contacts.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,15 +185,15 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
RadioItem(ON_CLICK_EDIT_CONTACT, getString(R.string.edit_contact))
|
RadioItem(ON_CLICK_EDIT_CONTACT, getString(R.string.edit_contact))
|
||||||
)
|
)
|
||||||
|
|
||||||
RadioGroupDialog(this@SettingsActivity, items, config.onContactClick) {
|
RadioGroupDialog(this@SettingsActivity, items, contactsConfig.onContactClick) {
|
||||||
config.onContactClick = it as Int
|
contactsConfig.onContactClick = it as Int
|
||||||
settings_on_contact_click.text = getOnContactClickText()
|
settings_on_contact_click.text = getOnContactClickText()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getOnContactClickText() = getString(
|
private fun getOnContactClickText() = getString(
|
||||||
when (config.onContactClick) {
|
when (contactsConfig.onContactClick) {
|
||||||
ON_CLICK_CALL_CONTACT -> R.string.call_contact
|
ON_CLICK_CALL_CONTACT -> R.string.call_contact
|
||||||
ON_CLICK_VIEW_CONTACT -> R.string.view_contact
|
ON_CLICK_VIEW_CONTACT -> R.string.view_contact
|
||||||
else -> R.string.edit_contact
|
else -> R.string.edit_contact
|
||||||
@ -204,18 +201,18 @@ class SettingsActivity : SimpleActivity() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private fun setupShowCallConfirmation() {
|
private fun setupShowCallConfirmation() {
|
||||||
settings_show_call_confirmation.isChecked = config.showCallConfirmation
|
settings_show_call_confirmation.isChecked = contactsConfig.showCallConfirmation
|
||||||
settings_show_call_confirmation_holder.setOnClickListener {
|
settings_show_call_confirmation_holder.setOnClickListener {
|
||||||
settings_show_call_confirmation.toggle()
|
settings_show_call_confirmation.toggle()
|
||||||
config.showCallConfirmation = settings_show_call_confirmation.isChecked
|
contactsConfig.showCallConfirmation = settings_show_call_confirmation.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupMergeDuplicateContacts() {
|
private fun setupMergeDuplicateContacts() {
|
||||||
settings_merge_duplicate_contacts.isChecked = config.mergeDuplicateContacts
|
settings_merge_duplicate_contacts.isChecked = contactsConfig.mergeDuplicateContacts
|
||||||
settings_merge_duplicate_contacts_holder.setOnClickListener {
|
settings_merge_duplicate_contacts_holder.setOnClickListener {
|
||||||
settings_merge_duplicate_contacts.toggle()
|
settings_merge_duplicate_contacts.toggle()
|
||||||
config.mergeDuplicateContacts = settings_merge_duplicate_contacts.isChecked
|
contactsConfig.mergeDuplicateContacts = settings_merge_duplicate_contacts.isChecked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,12 @@ import com.simplemobiletools.commons.dialogs.SelectAlarmSoundDialog
|
|||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ChooseSocialDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ChooseSocialDialog
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.ManageVisibleFieldsDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.*
|
import com.simplemobiletools.contacts.pro.extensions.*
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.models.*
|
|
||||||
import kotlinx.android.synthetic.main.activity_view_contact.*
|
import kotlinx.android.synthetic.main.activity_view_contact.*
|
||||||
import kotlinx.android.synthetic.main.item_view_address.view.*
|
import kotlinx.android.synthetic.main.item_view_address.view.*
|
||||||
import kotlinx.android.synthetic.main.item_view_contact_source.view.*
|
import kotlinx.android.synthetic.main.item_view_contact_source.view.*
|
||||||
@ -46,7 +46,7 @@ class ViewContactActivity : ContactActivity() {
|
|||||||
private var showFields = 0
|
private var showFields = 0
|
||||||
private var fullContact: Contact? = null // contact with all fields filled from duplicates
|
private var fullContact: Contact? = null // contact with all fields filled from duplicates
|
||||||
private var duplicateInitialized = false
|
private var duplicateInitialized = false
|
||||||
private val mergeDuplicate: Boolean get() = config.mergeDuplicateContacts
|
private val mergeDuplicate: Boolean get() = contactsConfig.mergeDuplicateContacts
|
||||||
|
|
||||||
private val COMPARABLE_PHONE_NUMBER_LENGTH = 9
|
private val COMPARABLE_PHONE_NUMBER_LENGTH = 9
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ class ViewContactActivity : ContactActivity() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
showFields = config.showContactFields
|
showFields = contactsConfig.showContactFields
|
||||||
contact_wrapper.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
contact_wrapper.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
setupMenu()
|
setupMenu()
|
||||||
}
|
}
|
||||||
@ -122,7 +122,7 @@ class ViewContactActivity : ContactActivity() {
|
|||||||
|
|
||||||
findItem(R.id.manage_visible_fields).setOnMenuItemClickListener {
|
findItem(R.id.manage_visible_fields).setOnMenuItemClickListener {
|
||||||
ManageVisibleFieldsDialog(this@ViewContactActivity) {
|
ManageVisibleFieldsDialog(this@ViewContactActivity) {
|
||||||
showFields = config.showContactFields
|
showFields = contactsConfig.showContactFields
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
initContact()
|
initContact()
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ class ViewContactActivity : ContactActivity() {
|
|||||||
copyOnLongClick(phoneNumber.value)
|
copyOnLongClick(phoneNumber.value)
|
||||||
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
if (config.showCallConfirmation) {
|
if (contactsConfig.showCallConfirmation) {
|
||||||
CallConfirmationDialog(this@ViewContactActivity, phoneNumber.value) {
|
CallConfirmationDialog(this@ViewContactActivity, phoneNumber.value) {
|
||||||
startCallIntent(phoneNumber.value)
|
startCallIntent(phoneNumber.value)
|
||||||
}
|
}
|
||||||
|
@ -28,10 +28,12 @@ import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
|||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.interfaces.ItemMoveCallback
|
import com.simplemobiletools.commons.interfaces.ItemMoveCallback
|
||||||
import com.simplemobiletools.commons.interfaces.ItemTouchHelperContract
|
import com.simplemobiletools.commons.interfaces.ItemTouchHelperContract
|
||||||
import com.simplemobiletools.commons.interfaces.StartReorderDragListener
|
import com.simplemobiletools.commons.interfaces.StartReorderDragListener
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Contact
|
||||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
@ -41,7 +43,7 @@ import com.simplemobiletools.contacts.pro.extensions.*
|
|||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
|
import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ContactsAdapter(
|
class ContactsAdapter(
|
||||||
@ -58,7 +60,7 @@ class ContactsAdapter(
|
|||||||
|
|
||||||
private val NEW_GROUP_ID = -1
|
private val NEW_GROUP_ID = -1
|
||||||
|
|
||||||
private var config = activity.config
|
private var config = activity.contactsConfig
|
||||||
private var textToHighlight = highlightText
|
private var textToHighlight = highlightText
|
||||||
|
|
||||||
var startNameWithSurname = config.startNameWithSurname
|
var startNameWithSurname = config.startNameWithSurname
|
||||||
@ -450,7 +452,7 @@ class ContactsAdapter(
|
|||||||
override fun onChange(position: Int) = contactItems.getOrNull(position)?.getBubbleText() ?: ""
|
override fun onChange(position: Int) = contactItems.getOrNull(position)?.getBubbleText() ?: ""
|
||||||
|
|
||||||
override fun onRowMoved(fromPosition: Int, toPosition: Int) {
|
override fun onRowMoved(fromPosition: Int, toPosition: Int) {
|
||||||
activity.config.isCustomOrderSelected = true
|
activity.contactsConfig.isCustomOrderSelected = true
|
||||||
|
|
||||||
if (fromPosition < toPosition) {
|
if (fromPosition < toPosition) {
|
||||||
for (i in fromPosition until toPosition) {
|
for (i in fromPosition until toPosition) {
|
||||||
|
@ -7,9 +7,9 @@ import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
|||||||
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
import com.simplemobiletools.commons.extensions.getProperPrimaryColor
|
||||||
import com.simplemobiletools.commons.extensions.getProperTextColor
|
import com.simplemobiletools.commons.extensions.getProperTextColor
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
||||||
|
import com.simplemobiletools.commons.models.contacts.ContactSource
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import kotlinx.android.synthetic.main.item_filter_contact_source.view.*
|
import kotlinx.android.synthetic.main.item_filter_contact_source.view.*
|
||||||
|
|
||||||
class FilterContactSourcesAdapter(
|
class FilterContactSourcesAdapter(
|
||||||
|
@ -7,9 +7,7 @@ import android.view.ViewGroup
|
|||||||
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
|
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
|
||||||
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
|
||||||
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
|
||||||
import com.simplemobiletools.commons.extensions.beVisibleIf
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.getTextSize
|
|
||||||
import com.simplemobiletools.commons.extensions.highlightTextPart
|
|
||||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
@ -17,11 +15,9 @@ import com.simplemobiletools.commons.views.MyRecyclerView
|
|||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.RenameGroupDialog
|
import com.simplemobiletools.contacts.pro.dialogs.RenameGroupDialog
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.contacts.pro.extensions.groupsDB
|
import com.simplemobiletools.commons.models.contacts.Group
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.item_group.view.*
|
import kotlinx.android.synthetic.main.item_group.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@ -31,7 +27,7 @@ class GroupsAdapter(
|
|||||||
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
|
) : MyRecyclerViewAdapter(activity, recyclerView, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
|
||||||
|
|
||||||
private var textToHighlight = ""
|
private var textToHighlight = ""
|
||||||
var showContactThumbnails = activity.config.showContactThumbnails
|
var showContactThumbnails = activity.contactsConfig.showContactThumbnails
|
||||||
var fontSize = activity.getTextSize()
|
var fontSize = activity.getTextSize()
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -11,22 +11,26 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
|
|||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.bumptech.glide.signature.ObjectKey
|
import com.bumptech.glide.signature.ObjectKey
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.commons.views.MyRecyclerView
|
import com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
|
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
|
||||||
|
|
||||||
class SelectContactsAdapter(
|
class SelectContactsAdapter(
|
||||||
val activity: SimpleActivity, var contacts: ArrayList<Contact>, private val selectedContacts: ArrayList<Contact>, private val allowPickMultiple: Boolean,
|
val activity: SimpleActivity,
|
||||||
recyclerView: MyRecyclerView, private val itemClick: ((Contact) -> Unit)? = null
|
var contacts: ArrayList<Contact>,
|
||||||
|
private val selectedContacts: ArrayList<Contact>,
|
||||||
|
private val allowPickMultiple: Boolean,
|
||||||
|
recyclerView: MyRecyclerView,
|
||||||
|
private val itemClick: ((Contact) -> Unit)? = null
|
||||||
) :
|
) :
|
||||||
RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() {
|
RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() {
|
||||||
private val itemViews = SparseArray<View>()
|
private val itemViews = SparseArray<View>()
|
||||||
private val selectedPositions = HashSet<Int>()
|
private val selectedPositions = HashSet<Int>()
|
||||||
private val config = activity.config
|
private val config = activity.contactsConfig
|
||||||
private val adjustedPrimaryColor = activity.getProperPrimaryColor()
|
private val adjustedPrimaryColor = activity.getProperPrimaryColor()
|
||||||
private val fontSize = activity.getTextSize()
|
private val fontSize = activity.getTextSize()
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ import android.database.MatrixCursor
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.google.gson.Gson
|
import com.google.gson.Gson
|
||||||
import com.simplemobiletools.commons.helpers.MyContactsContentProvider
|
import com.simplemobiletools.commons.helpers.MyContactsContentProvider
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.helpers.LocalContactsHelper
|
import com.simplemobiletools.commons.helpers.LocalContactsHelper
|
||||||
|
|
||||||
class MyContactsContentProvider : ContentProvider() {
|
class MyContactsContentProvider : ContentProvider() {
|
||||||
override fun insert(uri: Uri, contentValues: ContentValues?) = null
|
override fun insert(uri: Uri, contentValues: ContentValues?) = null
|
||||||
|
|
||||||
override fun query(uri: Uri, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
|
override fun query(uri: Uri, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
|
||||||
if (context == null || !context!!.config.showPrivateContacts) {
|
if (context == null || !context!!.contactsConfig.showPrivateContacts) {
|
||||||
return null
|
return null
|
||||||
} else {
|
} else {
|
||||||
val matrixCursor = MatrixCursor(
|
val matrixCursor = MatrixCursor(
|
||||||
|
@ -1,90 +1,90 @@
|
|||||||
package com.simplemobiletools.contacts.pro.databases
|
//package com.simplemobiletools.contacts.pro.databases
|
||||||
|
//
|
||||||
import android.content.Context
|
//import android.content.Context
|
||||||
import androidx.room.Database
|
//import androidx.room.Database
|
||||||
import androidx.room.Room
|
//import androidx.room.Room
|
||||||
import androidx.room.RoomDatabase
|
//import androidx.room.RoomDatabase
|
||||||
import androidx.room.TypeConverters
|
//import androidx.room.TypeConverters
|
||||||
import androidx.room.migration.Migration
|
//import androidx.room.migration.Migration
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase
|
//import androidx.sqlite.db.SupportSQLiteDatabase
|
||||||
import com.simplemobiletools.contacts.pro.helpers.Converters
|
//import com.simplemobiletools.contacts.pro.helpers.Converters
|
||||||
import com.simplemobiletools.contacts.pro.helpers.FIRST_CONTACT_ID
|
//import com.simplemobiletools.contacts.pro.helpers.FIRST_CONTACT_ID
|
||||||
import com.simplemobiletools.contacts.pro.helpers.FIRST_GROUP_ID
|
//import com.simplemobiletools.contacts.pro.helpers.FIRST_GROUP_ID
|
||||||
import com.simplemobiletools.contacts.pro.helpers.getEmptyLocalContact
|
//import com.simplemobiletools.contacts.pro.helpers.getEmptyLocalContact
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
//import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
//import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
//import com.simplemobiletools.contacts.pro.models.Group
|
||||||
import com.simplemobiletools.contacts.pro.models.LocalContact
|
//import com.simplemobiletools.contacts.pro.models.LocalContact
|
||||||
import java.util.concurrent.Executors
|
//import java.util.concurrent.Executors
|
||||||
|
//
|
||||||
@Database(entities = [LocalContact::class, Group::class], version = 3)
|
//@Database(entities = [LocalContact::class, Group::class], version = 3)
|
||||||
@TypeConverters(Converters::class)
|
//@TypeConverters(Converters::class)
|
||||||
abstract class ContactsDatabase : RoomDatabase() {
|
//abstract class ContactsDatabase : RoomDatabase() {
|
||||||
|
//
|
||||||
abstract fun ContactsDao(): ContactsDao
|
// abstract fun ContactsDao(): ContactsDao
|
||||||
|
//
|
||||||
abstract fun GroupsDao(): GroupsDao
|
// abstract fun GroupsDao(): GroupsDao
|
||||||
|
//
|
||||||
companion object {
|
// companion object {
|
||||||
private var db: ContactsDatabase? = null
|
// private var db: ContactsDatabase? = null
|
||||||
|
//
|
||||||
fun getInstance(context: Context): ContactsDatabase {
|
// fun getInstance(context: Context): ContactsDatabase {
|
||||||
if (db == null) {
|
// if (db == null) {
|
||||||
synchronized(ContactsDatabase::class) {
|
// synchronized(ContactsDatabase::class) {
|
||||||
if (db == null) {
|
// if (db == null) {
|
||||||
db = Room.databaseBuilder(context.applicationContext, ContactsDatabase::class.java, "local_contacts.db")
|
// db = Room.databaseBuilder(context.applicationContext, ContactsDatabase::class.java, "local_contacts.db")
|
||||||
.addCallback(object : Callback() {
|
// .addCallback(object : Callback() {
|
||||||
override fun onCreate(db: SupportSQLiteDatabase) {
|
// override fun onCreate(db: SupportSQLiteDatabase) {
|
||||||
super.onCreate(db)
|
// super.onCreate(db)
|
||||||
increaseAutoIncrementIds()
|
// increaseAutoIncrementIds()
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
.addMigrations(MIGRATION_1_2)
|
// .addMigrations(MIGRATION_1_2)
|
||||||
.addMigrations(MIGRATION_2_3)
|
// .addMigrations(MIGRATION_2_3)
|
||||||
.build()
|
// .build()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return db!!
|
// return db!!
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun destroyInstance() {
|
// fun destroyInstance() {
|
||||||
db = null
|
// db = null
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// start autoincrement ID from FIRST_CONTACT_ID/FIRST_GROUP_ID to avoid conflicts
|
// // start autoincrement ID from FIRST_CONTACT_ID/FIRST_GROUP_ID to avoid conflicts
|
||||||
// Room doesn't seem to have a built in way for it, so just create a contact/group and delete it
|
// // Room doesn't seem to have a built in way for it, so just create a contact/group and delete it
|
||||||
private fun increaseAutoIncrementIds() {
|
// private fun increaseAutoIncrementIds() {
|
||||||
Executors.newSingleThreadExecutor().execute {
|
// Executors.newSingleThreadExecutor().execute {
|
||||||
val emptyContact = getEmptyLocalContact()
|
// val emptyContact = getEmptyLocalContact()
|
||||||
emptyContact.id = FIRST_CONTACT_ID
|
// emptyContact.id = FIRST_CONTACT_ID
|
||||||
db!!.ContactsDao().apply {
|
// db!!.ContactsDao().apply {
|
||||||
insertOrUpdate(emptyContact)
|
// insertOrUpdate(emptyContact)
|
||||||
deleteContactId(FIRST_CONTACT_ID)
|
// deleteContactId(FIRST_CONTACT_ID)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
val emptyGroup = Group(FIRST_GROUP_ID, "")
|
// val emptyGroup = Group(FIRST_GROUP_ID, "")
|
||||||
db!!.GroupsDao().apply {
|
// db!!.GroupsDao().apply {
|
||||||
insertOrUpdate(emptyGroup)
|
// insertOrUpdate(emptyGroup)
|
||||||
deleteGroupId(FIRST_GROUP_ID)
|
// deleteGroupId(FIRST_GROUP_ID)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private val MIGRATION_1_2 = object : Migration(1, 2) {
|
// private val MIGRATION_1_2 = object : Migration(1, 2) {
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
// override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
database.apply {
|
// database.apply {
|
||||||
execSQL("ALTER TABLE contacts ADD COLUMN photo_uri TEXT NOT NULL DEFAULT ''")
|
// execSQL("ALTER TABLE contacts ADD COLUMN photo_uri TEXT NOT NULL DEFAULT ''")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private val MIGRATION_2_3 = object : Migration(2, 3) {
|
// private val MIGRATION_2_3 = object : Migration(2, 3) {
|
||||||
override fun migrate(database: SupportSQLiteDatabase) {
|
// override fun migrate(database: SupportSQLiteDatabase) {
|
||||||
database.apply {
|
// database.apply {
|
||||||
execSQL("ALTER TABLE contacts ADD COLUMN ringtone TEXT DEFAULT ''")
|
// execSQL("ALTER TABLE contacts ADD COLUMN ringtone TEXT DEFAULT ''")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -2,16 +2,16 @@ package com.simplemobiletools.contacts.pro.dialogs
|
|||||||
|
|
||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.extensions.beGoneIf
|
import com.simplemobiletools.commons.extensions.beGoneIf
|
||||||
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.commons.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
|
||||||
import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
|
import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
|
||||||
|
|
||||||
class ChangeSortingDialog(val activity: BaseSimpleActivity, private val showCustomSorting: Boolean = false, private val callback: () -> Unit) {
|
class ChangeSortingDialog(val activity: BaseSimpleActivity, private val showCustomSorting: Boolean = false, private val callback: () -> Unit) {
|
||||||
private var currSorting = 0
|
private var currSorting = 0
|
||||||
private var config = activity.config
|
private var config = activity.contactsConfig
|
||||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null)
|
private var view = activity.layoutInflater.inflate(R.layout.dialog_change_sorting, null)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
@ -8,9 +8,9 @@ import androidx.appcompat.app.AlertDialog
|
|||||||
import com.simplemobiletools.commons.extensions.beGone
|
import com.simplemobiletools.commons.extensions.beGone
|
||||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
|
import com.simplemobiletools.commons.models.contacts.SocialAction
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getPackageDrawable
|
import com.simplemobiletools.contacts.pro.extensions.getPackageDrawable
|
||||||
import com.simplemobiletools.contacts.pro.models.SocialAction
|
|
||||||
import kotlinx.android.synthetic.main.dialog_choose_social.view.*
|
import kotlinx.android.synthetic.main.dialog_choose_social.view.*
|
||||||
import kotlinx.android.synthetic.main.item_choose_social.view.*
|
import kotlinx.android.synthetic.main.item_choose_social.view.*
|
||||||
|
|
||||||
|
@ -5,13 +5,12 @@ import androidx.appcompat.app.AlertDialog
|
|||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
|
import com.simplemobiletools.commons.models.contacts.ContactSource
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Group
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getPrivateContactSource
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.dialog_create_new_group.view.*
|
import kotlinx.android.synthetic.main.dialog_create_new_group.view.*
|
||||||
|
|
||||||
class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newGroup: Group) -> Unit) {
|
class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newGroup: Group) -> Unit) {
|
||||||
|
@ -5,20 +5,20 @@ import android.view.ViewGroup
|
|||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
import com.simplemobiletools.commons.dialogs.FilePickerDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.adapters.FilterContactSourcesAdapter
|
import com.simplemobiletools.contacts.pro.adapters.FilterContactSourcesAdapter
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import kotlinx.android.synthetic.main.dialog_export_contacts.view.*
|
import kotlinx.android.synthetic.main.dialog_export_contacts.view.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
class ExportContactsDialog(
|
class ExportContactsDialog(
|
||||||
val activity: SimpleActivity, val path: String, val hidePath: Boolean,
|
val activity: SimpleActivity,
|
||||||
|
val path: String,
|
||||||
|
val hidePath: Boolean,
|
||||||
private val callback: (file: File, ignoredContactSources: HashSet<String>) -> Unit
|
private val callback: (file: File, ignoredContactSources: HashSet<String>) -> Unit
|
||||||
) {
|
) {
|
||||||
private var ignoreClicks = false
|
private var ignoreClicks = false
|
||||||
@ -80,7 +80,7 @@ class ExportContactsDialog(
|
|||||||
|
|
||||||
ignoreClicks = true
|
ignoreClicks = true
|
||||||
ensureBackgroundThread {
|
ensureBackgroundThread {
|
||||||
activity.config.lastExportPath = file.absolutePath.getParentPath()
|
activity.contactsConfig.lastExportPath = file.absolutePath.getParentPath()
|
||||||
val selectedSources = (view.export_contacts_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources()
|
val selectedSources = (view.export_contacts_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources()
|
||||||
val ignoredSources = contactSources
|
val ignoredSources = contactSources
|
||||||
.filter { !selectedSources.contains(it) }
|
.filter { !selectedSources.contains(it) }
|
||||||
|
@ -7,11 +7,10 @@ import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
|||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.adapters.FilterContactSourcesAdapter
|
import com.simplemobiletools.contacts.pro.adapters.FilterContactSourcesAdapter
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
|
import com.simplemobiletools.commons.extensions.getVisibleContactSources
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import kotlinx.android.synthetic.main.dialog_filter_contact_sources.view.*
|
import kotlinx.android.synthetic.main.dialog_filter_contact_sources.view.*
|
||||||
|
|
||||||
class FilterContactSourcesDialog(val activity: SimpleActivity, private val callback: () -> Unit) {
|
class FilterContactSourcesDialog(val activity: SimpleActivity, private val callback: () -> Unit) {
|
||||||
@ -78,7 +77,7 @@ class FilterContactSourcesDialog(val activity: SimpleActivity, private val callb
|
|||||||
}.toHashSet()
|
}.toHashSet()
|
||||||
|
|
||||||
if (activity.getVisibleContactSources() != ignoredContactSources) {
|
if (activity.getVisibleContactSources() != ignoredContactSources) {
|
||||||
activity.config.ignoredContactSources = ignoredContactSources
|
activity.contactsConfig.ignoredContactSources = ignoredContactSources
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
dialog?.dismiss()
|
dialog?.dismiss()
|
||||||
|
@ -2,17 +2,13 @@ package com.simplemobiletools.contacts.pro.dialogs
|
|||||||
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getPublicContactSource
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.showContactSourcePicker
|
import com.simplemobiletools.contacts.pro.extensions.showContactSourcePicker
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfImporter
|
import com.simplemobiletools.contacts.pro.helpers.VcfImporter
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_FAIL
|
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_FAIL
|
||||||
import kotlinx.android.synthetic.main.dialog_import_contacts.view.*
|
import kotlinx.android.synthetic.main.dialog_import_contacts.view.*
|
||||||
@ -23,7 +19,7 @@ class ImportContactsDialog(val activity: SimpleActivity, val path: String, priva
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
val view = (activity.layoutInflater.inflate(R.layout.dialog_import_contacts, null) as ViewGroup).apply {
|
val view = (activity.layoutInflater.inflate(R.layout.dialog_import_contacts, null) as ViewGroup).apply {
|
||||||
targetContactSource = activity.config.lastUsedContactSource
|
targetContactSource = activity.contactsConfig.lastUsedContactSource
|
||||||
activity.getPublicContactSource(targetContactSource) {
|
activity.getPublicContactSource(targetContactSource) {
|
||||||
import_contacts_title.setText(it)
|
import_contacts_title.setText(it)
|
||||||
if (it.isEmpty()) {
|
if (it.isEmpty()) {
|
||||||
|
@ -5,8 +5,8 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
|||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.commons.helpers.*
|
||||||
|
|
||||||
class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity, val callback: (hasSomethingChanged: Boolean) -> Unit) {
|
class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity, val callback: (hasSomethingChanged: Boolean) -> Unit) {
|
||||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_fields, null)
|
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_fields, null)
|
||||||
@ -33,7 +33,7 @@ class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity, val callback:
|
|||||||
put(SHOW_RINGTONE_FIELD, R.id.manage_ringtone)
|
put(SHOW_RINGTONE_FIELD, R.id.manage_ringtone)
|
||||||
}
|
}
|
||||||
|
|
||||||
val showContactFields = activity.config.showContactFields
|
val showContactFields = activity.contactsConfig.showContactFields
|
||||||
for ((key, value) in fields) {
|
for ((key, value) in fields) {
|
||||||
view.findViewById<MyAppCompatCheckbox>(value).isChecked = showContactFields and key != 0
|
view.findViewById<MyAppCompatCheckbox>(value).isChecked = showContactFields and key != 0
|
||||||
}
|
}
|
||||||
@ -54,8 +54,8 @@ class ManageVisibleFieldsDialog(val activity: BaseSimpleActivity, val callback:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val hasSomethingChanged = activity.config.showContactFields != result
|
val hasSomethingChanged = activity.contactsConfig.showContactFields != result
|
||||||
activity.config.showContactFields = result
|
activity.contactsConfig.showContactFields = result
|
||||||
|
|
||||||
if (hasSomethingChanged) {
|
if (hasSomethingChanged) {
|
||||||
callback(true)
|
callback(true)
|
||||||
|
@ -8,8 +8,8 @@ import com.simplemobiletools.commons.helpers.TAB_FAVORITES
|
|||||||
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
||||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ALL_TABS_MASK
|
import com.simplemobiletools.commons.helpers.ALL_TABS_MASK
|
||||||
|
|
||||||
class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
||||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
|
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
|
||||||
@ -22,7 +22,7 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
|||||||
put(TAB_GROUPS, R.id.manage_visible_tabs_groups)
|
put(TAB_GROUPS, R.id.manage_visible_tabs_groups)
|
||||||
}
|
}
|
||||||
|
|
||||||
val showTabs = activity.config.showTabs
|
val showTabs = activity.contactsConfig.showTabs
|
||||||
for ((key, value) in tabs) {
|
for ((key, value) in tabs) {
|
||||||
view.findViewById<MyAppCompatCheckbox>(value).isChecked = showTabs and key != 0
|
view.findViewById<MyAppCompatCheckbox>(value).isChecked = showTabs and key != 0
|
||||||
}
|
}
|
||||||
@ -47,6 +47,6 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
|||||||
result = ALL_TABS_MASK
|
result = ALL_TABS_MASK
|
||||||
}
|
}
|
||||||
|
|
||||||
activity.config.showTabs = result
|
activity.contactsConfig.showTabs = result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import com.simplemobiletools.commons.extensions.getAlertDialogBuilder
|
|||||||
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||||
import com.simplemobiletools.commons.helpers.isSPlus
|
import com.simplemobiletools.commons.helpers.isSPlus
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import kotlinx.android.synthetic.main.dialog_date_picker.view.*
|
import kotlinx.android.synthetic.main.dialog_date_picker.view.*
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -38,7 +38,7 @@ class MyDatePickerDialog(val activity: BaseSimpleActivity, val defaultDate: Stri
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activity.config.isUsingSystemTheme && isSPlus()) {
|
if (activity.contactsConfig.isUsingSystemTheme && isSPlus()) {
|
||||||
val dialogBackgroundColor = activity.getColor(R.color.you_dialog_background_color)
|
val dialogBackgroundColor = activity.getColor(R.color.you_dialog_background_color)
|
||||||
view.dialog_holder.setBackgroundColor(dialogBackgroundColor)
|
view.dialog_holder.setBackgroundColor(dialogBackgroundColor)
|
||||||
view.date_picker.setBackgroundColor(dialogBackgroundColor)
|
view.date_picker.setBackgroundColor(dialogBackgroundColor)
|
||||||
|
@ -3,11 +3,10 @@ package com.simplemobiletools.contacts.pro.dialogs
|
|||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Group
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.extensions.groupsDB
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.dialog_rename_group.view.*
|
import kotlinx.android.synthetic.main.dialog_rename_group.view.*
|
||||||
|
|
||||||
class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val callback: () -> Unit) {
|
class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val callback: () -> Unit) {
|
||||||
|
@ -7,8 +7,7 @@ import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
|||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter
|
import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import kotlinx.android.synthetic.main.dialog_select_contact.view.*
|
import kotlinx.android.synthetic.main.dialog_select_contact.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -3,11 +3,11 @@ package com.simplemobiletools.contacts.pro.dialogs
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Group
|
||||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.dialog_select_groups.view.*
|
import kotlinx.android.synthetic.main.dialog_select_groups.view.*
|
||||||
import kotlinx.android.synthetic.main.item_checkbox.view.*
|
import kotlinx.android.synthetic.main.item_checkbox.view.*
|
||||||
import kotlinx.android.synthetic.main.item_textview.view.*
|
import kotlinx.android.synthetic.main.item_textview.view.*
|
||||||
|
@ -7,10 +7,7 @@ import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
|||||||
import com.simplemobiletools.commons.dialogs.CallConfirmationDialog
|
import com.simplemobiletools.commons.dialogs.CallConfirmationDialog
|
||||||
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.CONTACT_ID
|
import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.helpers.IS_PRIVATE
|
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_CALL_PHONE
|
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
|
||||||
import com.simplemobiletools.commons.models.RadioItem
|
import com.simplemobiletools.commons.models.RadioItem
|
||||||
import com.simplemobiletools.contacts.pro.BuildConfig
|
import com.simplemobiletools.contacts.pro.BuildConfig
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
@ -18,7 +15,9 @@ import com.simplemobiletools.contacts.pro.activities.EditContactActivity
|
|||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.activities.ViewContactActivity
|
import com.simplemobiletools.contacts.pro.activities.ViewContactActivity
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.DEFAULT_FILE_NAME
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.VcfExporter
|
||||||
|
|
||||||
fun SimpleActivity.startCallIntent(recipient: String) {
|
fun SimpleActivity.startCallIntent(recipient: String) {
|
||||||
handlePermission(PERMISSION_CALL_PHONE) {
|
handlePermission(PERMISSION_CALL_PHONE) {
|
||||||
@ -31,7 +30,7 @@ fun SimpleActivity.startCallIntent(recipient: String) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun SimpleActivity.tryStartCall(contact: Contact) {
|
fun SimpleActivity.tryStartCall(contact: Contact) {
|
||||||
if (config.showCallConfirmation) {
|
if (contactsConfig.showCallConfirmation) {
|
||||||
CallConfirmationDialog(this, contact.getNameToDisplay()) {
|
CallConfirmationDialog(this, contact.getNameToDisplay()) {
|
||||||
startCall(contact)
|
startCall(contact)
|
||||||
}
|
}
|
||||||
@ -108,7 +107,7 @@ fun BaseSimpleActivity.shareContacts(contacts: ArrayList<Contact>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun SimpleActivity.handleGenericContactClick(contact: Contact) {
|
fun SimpleActivity.handleGenericContactClick(contact: Contact) {
|
||||||
when (config.onContactClick) {
|
when (contactsConfig.onContactClick) {
|
||||||
ON_CLICK_CALL_CONTACT -> callContact(contact)
|
ON_CLICK_CALL_CONTACT -> callContact(contact)
|
||||||
ON_CLICK_VIEW_CONTACT -> viewContact(contact)
|
ON_CLICK_VIEW_CONTACT -> viewContact(contact)
|
||||||
ON_CLICK_EDIT_CONTACT -> editContact(contact)
|
ON_CLICK_EDIT_CONTACT -> editContact(contact)
|
||||||
|
@ -2,338 +2,340 @@ package com.simplemobiletools.contacts.pro.extensions
|
|||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
|
||||||
import android.database.Cursor
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Handler
|
|
||||||
import android.os.Looper
|
|
||||||
import android.provider.ContactsContract
|
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import com.simplemobiletools.commons.extensions.*
|
import com.simplemobiletools.commons.extensions.getCachePhoto
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
import com.simplemobiletools.commons.helpers.SIGNAL_PACKAGE
|
||||||
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
|
import com.simplemobiletools.commons.helpers.TELEGRAM_PACKAGE
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
import com.simplemobiletools.commons.helpers.VIBER_PACKAGE
|
||||||
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
import com.simplemobiletools.commons.helpers.WHATSAPP_PACKAGE
|
||||||
import com.simplemobiletools.contacts.pro.BuildConfig
|
import com.simplemobiletools.contacts.pro.BuildConfig
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.databases.ContactsDatabase
|
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import com.simplemobiletools.contacts.pro.models.ContactSource
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Organization
|
|
||||||
import com.simplemobiletools.contacts.pro.models.SocialAction
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
val Context.config: Config get() = Config.newInstance(applicationContext)
|
// import android.annotation.SuppressLint
|
||||||
|
// import android.content.Context
|
||||||
val Context.contactsDB: ContactsDao get() = ContactsDatabase.getInstance(applicationContext).ContactsDao()
|
// import android.content.Intent
|
||||||
|
// import android.database.Cursor
|
||||||
val Context.groupsDB: GroupsDao get() = ContactsDatabase.getInstance(applicationContext).GroupsDao()
|
// import android.graphics.drawable.Drawable
|
||||||
|
// import android.net.Uri
|
||||||
fun Context.getEmptyContact(): Contact {
|
// import android.os.Handler
|
||||||
val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE
|
// import android.os.Looper
|
||||||
val organization = Organization("", "")
|
// import android.provider.ContactsContract
|
||||||
return Contact(
|
// import androidx.core.content.FileProvider
|
||||||
0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "",
|
// import com.simplemobiletools.commons.extensions.*
|
||||||
null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null
|
// import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
|
||||||
)
|
// import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
|
||||||
}
|
// import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
||||||
|
// import com.simplemobiletools.commons.helpers.SimpleContactsHelper
|
||||||
fun Context.sendAddressIntent(address: String) {
|
// import com.simplemobiletools.contacts.pro.BuildConfig
|
||||||
val location = Uri.encode(address)
|
// import com.simplemobiletools.contacts.pro.R
|
||||||
val uri = Uri.parse("geo:0,0?q=$location")
|
// import com.simplemobiletools.contacts.pro.databases.ContactsDatabase
|
||||||
|
// import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
Intent(Intent.ACTION_VIEW, uri).apply {
|
// import com.simplemobiletools.contacts.pro.interfaces.ContactsDao
|
||||||
launchActivityIntent(this)
|
// import com.simplemobiletools.contacts.pro.interfaces.GroupsDao
|
||||||
}
|
// import com.simplemobiletools.commons.models.contacts.*
|
||||||
}
|
// import com.simplemobiletools.contacts.pro.models.ContactSource
|
||||||
|
// import com.simplemobiletools.contacts.pro.models.Organization
|
||||||
fun Context.openWebsiteIntent(url: String) {
|
// import com.simplemobiletools.contacts.pro.models.SocialAction
|
||||||
val website = if (url.startsWith("http")) {
|
// import java.io.File
|
||||||
url
|
//
|
||||||
} else {
|
// val Context.config: Config get() = Config.newInstance(applicationContext)
|
||||||
"https://$url"
|
//
|
||||||
}
|
// val Context.contactsDB: ContactsDao get() = ContactsDatabase.getInstance(applicationContext).ContactsDao()
|
||||||
|
//
|
||||||
Intent(Intent.ACTION_VIEW).apply {
|
// val Context.groupsDB: GroupsDao get() = ContactsDatabase.getInstance(applicationContext).GroupsDao()
|
||||||
data = Uri.parse(website)
|
//
|
||||||
launchActivityIntent(this)
|
// fun Context.getEmptyContact(): Contact {
|
||||||
}
|
// val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE
|
||||||
}
|
// val organization = Organization("", "")
|
||||||
|
// return Contact(
|
||||||
fun Context.getLookupUriRawId(dataUri: Uri): Int {
|
// 0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "",
|
||||||
val lookupKey = getLookupKeyFromUri(dataUri)
|
// null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null
|
||||||
if (lookupKey != null) {
|
// )
|
||||||
val uri = lookupContactUri(lookupKey, this)
|
// }
|
||||||
if (uri != null) {
|
//
|
||||||
return getContactUriRawId(uri)
|
// fun Context.sendAddressIntent(address: String) {
|
||||||
}
|
// val location = Uri.encode(address)
|
||||||
}
|
// val uri = Uri.parse("geo:0,0?q=$location")
|
||||||
return -1
|
//
|
||||||
}
|
// Intent(Intent.ACTION_VIEW, uri).apply {
|
||||||
|
// launchActivityIntent(this)
|
||||||
fun Context.getContactUriRawId(uri: Uri): Int {
|
// }
|
||||||
val projection = arrayOf(ContactsContract.Contacts.NAME_RAW_CONTACT_ID)
|
// }
|
||||||
var cursor: Cursor? = null
|
//
|
||||||
try {
|
// fun Context.openWebsiteIntent(url: String) {
|
||||||
cursor = contentResolver.query(uri, projection, null, null, null)
|
// val website = if (url.startsWith("http")) {
|
||||||
if (cursor!!.moveToFirst()) {
|
// url
|
||||||
return cursor.getIntValue(ContactsContract.Contacts.NAME_RAW_CONTACT_ID)
|
// } else {
|
||||||
}
|
// "https://$url"
|
||||||
} catch (ignored: Exception) {
|
// }
|
||||||
} finally {
|
//
|
||||||
cursor?.close()
|
// Intent(Intent.ACTION_VIEW).apply {
|
||||||
}
|
// data = Uri.parse(website)
|
||||||
return -1
|
// launchActivityIntent(this)
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
// from https://android.googlesource.com/platform/packages/apps/Dialer/+/68038172793ee0e2ab3e2e56ddfbeb82879d1f58/java/com/android/contacts/common/util/UriUtils.java
|
//
|
||||||
fun getLookupKeyFromUri(lookupUri: Uri): String? {
|
// fun Context.getLookupUriRawId(dataUri: Uri): Int {
|
||||||
return if (!isEncodedContactUri(lookupUri)) {
|
// val lookupKey = getLookupKeyFromUri(dataUri)
|
||||||
val segments = lookupUri.pathSegments
|
// if (lookupKey != null) {
|
||||||
if (segments.size < 3) null else Uri.encode(segments[2])
|
// val uri = lookupContactUri(lookupKey, this)
|
||||||
} else {
|
// if (uri != null) {
|
||||||
null
|
// return getContactUriRawId(uri)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
// return -1
|
||||||
fun isEncodedContactUri(uri: Uri?): Boolean {
|
// }
|
||||||
if (uri == null) {
|
//
|
||||||
return false
|
// fun Context.getContactUriRawId(uri: Uri): Int {
|
||||||
}
|
// val projection = arrayOf(ContactsContract.Contacts.NAME_RAW_CONTACT_ID)
|
||||||
val lastPathSegment = uri.lastPathSegment ?: return false
|
// var cursor: Cursor? = null
|
||||||
return lastPathSegment == "encoded"
|
// try {
|
||||||
}
|
// cursor = contentResolver.query(uri, projection, null, null, null)
|
||||||
|
// if (cursor!!.moveToFirst()) {
|
||||||
fun lookupContactUri(lookup: String, context: Context): Uri? {
|
// return cursor.getIntValue(ContactsContract.Contacts.NAME_RAW_CONTACT_ID)
|
||||||
val lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup)
|
// }
|
||||||
return try {
|
// } catch (ignored: Exception) {
|
||||||
ContactsContract.Contacts.lookupContact(context.contentResolver, lookupUri)
|
// } finally {
|
||||||
} catch (e: Exception) {
|
// cursor?.close()
|
||||||
null
|
// }
|
||||||
}
|
// return -1
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getCachePhoto(): File {
|
// // from https://android.googlesource.com/platform/packages/apps/Dialer/+/68038172793ee0e2ab3e2e56ddfbeb82879d1f58/java/com/android/contacts/common/util/UriUtils.java
|
||||||
val imagesFolder = File(cacheDir, "my_cache")
|
// fun getLookupKeyFromUri(lookupUri: Uri): String? {
|
||||||
if (!imagesFolder.exists()) {
|
// return if (!isEncodedContactUri(lookupUri)) {
|
||||||
imagesFolder.mkdirs()
|
// val segments = lookupUri.pathSegments
|
||||||
}
|
// if (segments.size < 3) null else Uri.encode(segments[2])
|
||||||
|
// } else {
|
||||||
val file = File(imagesFolder, "Photo_${System.currentTimeMillis()}.jpg")
|
// null
|
||||||
file.createNewFile()
|
// }
|
||||||
return file
|
// }
|
||||||
}
|
//
|
||||||
|
// fun isEncodedContactUri(uri: Uri?): Boolean {
|
||||||
|
// if (uri == null) {
|
||||||
|
// return false
|
||||||
|
// }
|
||||||
|
// val lastPathSegment = uri.lastPathSegment ?: return false
|
||||||
|
// return lastPathSegment == "encoded"
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fun lookupContactUri(lookup: String, context: Context): Uri? {
|
||||||
|
// val lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup)
|
||||||
|
// return try {
|
||||||
|
// ContactsContract.Contacts.lookupContact(context.contentResolver, lookupUri)
|
||||||
|
// } catch (e: Exception) {
|
||||||
|
// null
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
fun Context.getCachePhotoUri(file: File = getCachePhoto()) = FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", file)
|
fun Context.getCachePhotoUri(file: File = getCachePhoto()) = FileProvider.getUriForFile(this, "${BuildConfig.APPLICATION_ID}.provider", file)
|
||||||
|
|
||||||
fun Context.getPhotoThumbnailSize(): Int {
|
// fun Context.getPhotoThumbnailSize(): Int {
|
||||||
val uri = ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI
|
// val uri = ContactsContract.DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI
|
||||||
val projection = arrayOf(ContactsContract.DisplayPhoto.THUMBNAIL_MAX_DIM)
|
// val projection = arrayOf(ContactsContract.DisplayPhoto.THUMBNAIL_MAX_DIM)
|
||||||
var cursor: Cursor? = null
|
// var cursor: Cursor? = null
|
||||||
try {
|
// try {
|
||||||
cursor = contentResolver.query(uri, projection, null, null, null)
|
// cursor = contentResolver.query(uri, projection, null, null, null)
|
||||||
if (cursor?.moveToFirst() == true) {
|
// if (cursor?.moveToFirst() == true) {
|
||||||
return cursor.getIntValue(ContactsContract.DisplayPhoto.THUMBNAIL_MAX_DIM)
|
// return cursor.getIntValue(ContactsContract.DisplayPhoto.THUMBNAIL_MAX_DIM)
|
||||||
}
|
// }
|
||||||
} catch (ignored: Exception) {
|
// } catch (ignored: Exception) {
|
||||||
} finally {
|
// } finally {
|
||||||
cursor?.close()
|
// cursor?.close()
|
||||||
}
|
// }
|
||||||
return 0
|
// return 0
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.hasContactPermissions() = hasPermission(PERMISSION_READ_CONTACTS) && hasPermission(PERMISSION_WRITE_CONTACTS)
|
// fun Context.hasContactPermissions() = hasPermission(PERMISSION_READ_CONTACTS) && hasPermission(PERMISSION_WRITE_CONTACTS)
|
||||||
|
//
|
||||||
fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) {
|
// fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) {
|
||||||
when (source) {
|
// when (source) {
|
||||||
SMT_PRIVATE -> callback(getString(R.string.phone_storage_hidden))
|
// SMT_PRIVATE -> callback(getString(R.string.phone_storage_hidden))
|
||||||
else -> {
|
// else -> {
|
||||||
ContactsHelper(this).getContactSources {
|
// ContactsHelper(this).getContactSources {
|
||||||
var newSource = source
|
// var newSource = source
|
||||||
for (contactSource in it) {
|
// for (contactSource in it) {
|
||||||
if (contactSource.name == source && contactSource.type == TELEGRAM_PACKAGE) {
|
// if (contactSource.name == source && contactSource.type == TELEGRAM_PACKAGE) {
|
||||||
newSource = getString(R.string.telegram)
|
// newSource = getString(R.string.telegram)
|
||||||
break
|
// break
|
||||||
} else if (contactSource.name == source && contactSource.type == VIBER_PACKAGE) {
|
// } else if (contactSource.name == source && contactSource.type == VIBER_PACKAGE) {
|
||||||
newSource = getString(R.string.viber)
|
// newSource = getString(R.string.viber)
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
Handler(Looper.getMainLooper()).post {
|
// Handler(Looper.getMainLooper()).post {
|
||||||
callback(newSource)
|
// callback(newSource)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getPublicContactSourceSync(source: String, contactSources: ArrayList<ContactSource>): String {
|
// fun Context.getPublicContactSourceSync(source: String, contactSources: ArrayList<ContactSource>): String {
|
||||||
return when (source) {
|
// return when (source) {
|
||||||
SMT_PRIVATE -> getString(R.string.phone_storage_hidden)
|
// SMT_PRIVATE -> getString(R.string.phone_storage_hidden)
|
||||||
else -> {
|
// else -> {
|
||||||
var newSource = source
|
// var newSource = source
|
||||||
for (contactSource in contactSources) {
|
// for (contactSource in contactSources) {
|
||||||
if (contactSource.name == source && contactSource.type == TELEGRAM_PACKAGE) {
|
// if (contactSource.name == source && contactSource.type == TELEGRAM_PACKAGE) {
|
||||||
newSource = getString(R.string.telegram)
|
// newSource = getString(R.string.telegram)
|
||||||
break
|
// break
|
||||||
} else if (contactSource.name == source && contactSource.type == VIBER_PACKAGE) {
|
// } else if (contactSource.name == source && contactSource.type == VIBER_PACKAGE) {
|
||||||
newSource = getString(R.string.viber)
|
// newSource = getString(R.string.viber)
|
||||||
break
|
// break
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return newSource
|
// return newSource
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.sendSMSToContacts(contacts: ArrayList<Contact>) {
|
// fun Context.sendSMSToContacts(contacts: ArrayList<Contact>) {
|
||||||
val numbers = StringBuilder()
|
// val numbers = StringBuilder()
|
||||||
contacts.forEach {
|
// contacts.forEach {
|
||||||
val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE }
|
// val number = it.phoneNumbers.firstOrNull { it.type == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE }
|
||||||
?: it.phoneNumbers.firstOrNull()
|
// ?: it.phoneNumbers.firstOrNull()
|
||||||
if (number != null) {
|
// if (number != null) {
|
||||||
numbers.append("${Uri.encode(number.value)};")
|
// numbers.append("${Uri.encode(number.value)};")
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
val uriString = "smsto:${numbers.toString().trimEnd(';')}"
|
// val uriString = "smsto:${numbers.toString().trimEnd(';')}"
|
||||||
Intent(Intent.ACTION_SENDTO, Uri.parse(uriString)).apply {
|
// Intent(Intent.ACTION_SENDTO, Uri.parse(uriString)).apply {
|
||||||
launchActivityIntent(this)
|
// launchActivityIntent(this)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.sendEmailToContacts(contacts: ArrayList<Contact>) {
|
// fun Context.sendEmailToContacts(contacts: ArrayList<Contact>) {
|
||||||
val emails = ArrayList<String>()
|
// val emails = ArrayList<String>()
|
||||||
contacts.forEach {
|
// contacts.forEach {
|
||||||
it.emails.forEach {
|
// it.emails.forEach {
|
||||||
if (it.value.isNotEmpty()) {
|
// if (it.value.isNotEmpty()) {
|
||||||
emails.add(it.value)
|
// emails.add(it.value)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
Intent(Intent.ACTION_SEND_MULTIPLE).apply {
|
// Intent(Intent.ACTION_SEND_MULTIPLE).apply {
|
||||||
type = "message/rfc822"
|
// type = "message/rfc822"
|
||||||
putExtra(Intent.EXTRA_EMAIL, emails.toTypedArray())
|
// putExtra(Intent.EXTRA_EMAIL, emails.toTypedArray())
|
||||||
launchActivityIntent(this)
|
// launchActivityIntent(this)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getTempFile(filename: String = DEFAULT_FILE_NAME): File? {
|
// fun Context.getTempFile(filename: String = DEFAULT_FILE_NAME): File? {
|
||||||
val folder = File(cacheDir, "contacts")
|
// val folder = File(cacheDir, "contacts")
|
||||||
if (!folder.exists()) {
|
// if (!folder.exists()) {
|
||||||
if (!folder.mkdir()) {
|
// if (!folder.mkdir()) {
|
||||||
toast(R.string.unknown_error_occurred)
|
// toast(R.string.unknown_error_occurred)
|
||||||
return null
|
// return null
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return File(folder, filename)
|
// return File(folder, filename)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
// fun Context.addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
val publicContacts = contacts.filter { !it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
// val publicContacts = contacts.filter { !it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
||||||
val privateContacts = contacts.filter { it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
// val privateContacts = contacts.filter { it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
||||||
if (publicContacts.isNotEmpty()) {
|
// if (publicContacts.isNotEmpty()) {
|
||||||
ContactsHelper(this).addContactsToGroup(publicContacts, groupId)
|
// ContactsHelper(this).addContactsToGroup(publicContacts, groupId)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (privateContacts.isNotEmpty()) {
|
// if (privateContacts.isNotEmpty()) {
|
||||||
LocalContactsHelper(this).addContactsToGroup(privateContacts, groupId)
|
// LocalContactsHelper(this).addContactsToGroup(privateContacts, groupId)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
// fun Context.removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
val publicContacts = contacts.filter { !it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
// val publicContacts = contacts.filter { !it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
||||||
val privateContacts = contacts.filter { it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
// val privateContacts = contacts.filter { it.isPrivate() }.toMutableList() as ArrayList<Contact>
|
||||||
if (publicContacts.isNotEmpty() && hasContactPermissions()) {
|
// if (publicContacts.isNotEmpty() && hasContactPermissions()) {
|
||||||
ContactsHelper(this).removeContactsFromGroup(publicContacts, groupId)
|
// ContactsHelper(this).removeContactsFromGroup(publicContacts, groupId)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (privateContacts.isNotEmpty()) {
|
// if (privateContacts.isNotEmpty()) {
|
||||||
LocalContactsHelper(this).removeContactsFromGroup(privateContacts, groupId)
|
// LocalContactsHelper(this).removeContactsFromGroup(privateContacts, groupId)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getContactPublicUri(contact: Contact): Uri {
|
// fun Context.getContactPublicUri(contact: Contact): Uri {
|
||||||
val lookupKey = if (contact.isPrivate()) {
|
// val lookupKey = if (contact.isPrivate()) {
|
||||||
"local_${contact.id}"
|
// "local_${contact.id}"
|
||||||
} else {
|
// } else {
|
||||||
SimpleContactsHelper(this).getContactLookupKey(contact.id.toString())
|
// SimpleContactsHelper(this).getContactLookupKey(contact.id.toString())
|
||||||
}
|
// }
|
||||||
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
// return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getVisibleContactSources(): ArrayList<String> {
|
// fun Context.getVisibleContactSources(): ArrayList<String> {
|
||||||
val sources = getAllContactSources()
|
// val sources = getAllContactSources()
|
||||||
val ignoredContactSources = config.ignoredContactSources
|
// val ignoredContactSources = config.ignoredContactSources
|
||||||
return ArrayList(sources).filter { !ignoredContactSources.contains(it.getFullIdentifier()) }
|
// return ArrayList(sources).filter { !ignoredContactSources.contains(it.getFullIdentifier()) }
|
||||||
.map { it.name }.toMutableList() as ArrayList<String>
|
// .map { it.name }.toMutableList() as ArrayList<String>
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getAllContactSources(): ArrayList<ContactSource> {
|
// fun Context.getAllContactSources(): ArrayList<ContactSource> {
|
||||||
val sources = ContactsHelper(this).getDeviceContactSources()
|
// val sources = ContactsHelper(this).getDeviceContactSources()
|
||||||
sources.add(getPrivateContactSource())
|
// sources.add(getPrivateContactSource())
|
||||||
return sources.toMutableList() as ArrayList<ContactSource>
|
// return sources.toMutableList() as ArrayList<ContactSource>
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun Context.getPrivateContactSource() = ContactSource(SMT_PRIVATE, SMT_PRIVATE, getString(R.string.phone_storage_hidden))
|
// fun Context.getPrivateContactSource() = ContactSource(SMT_PRIVATE, SMT_PRIVATE, getString(R.string.phone_storage_hidden))
|
||||||
|
//
|
||||||
fun Context.getSocialActions(id: Int): ArrayList<SocialAction> {
|
// fun Context.getSocialActions(id: Int): ArrayList<SocialAction> {
|
||||||
val uri = ContactsContract.Data.CONTENT_URI
|
// val uri = ContactsContract.Data.CONTENT_URI
|
||||||
val projection = arrayOf(
|
// val projection = arrayOf(
|
||||||
ContactsContract.Data._ID,
|
// ContactsContract.Data._ID,
|
||||||
ContactsContract.Data.DATA3,
|
// ContactsContract.Data.DATA3,
|
||||||
ContactsContract.Data.MIMETYPE,
|
// ContactsContract.Data.MIMETYPE,
|
||||||
ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET
|
// ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
val socialActions = ArrayList<SocialAction>()
|
// val socialActions = ArrayList<SocialAction>()
|
||||||
var curActionId = 0
|
// var curActionId = 0
|
||||||
val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ?"
|
// val selection = "${ContactsContract.Data.RAW_CONTACT_ID} = ?"
|
||||||
val selectionArgs = arrayOf(id.toString())
|
// val selectionArgs = arrayOf(id.toString())
|
||||||
queryCursor(uri, projection, selection, selectionArgs, null, true) { cursor ->
|
// queryCursor(uri, projection, selection, selectionArgs, null, true) { cursor ->
|
||||||
val mimetype = cursor.getStringValue(ContactsContract.Data.MIMETYPE)
|
// val mimetype = cursor.getStringValue(ContactsContract.Data.MIMETYPE)
|
||||||
val type = when (mimetype) {
|
// val type = when (mimetype) {
|
||||||
// WhatsApp
|
// // WhatsApp
|
||||||
"vnd.android.cursor.item/vnd.com.whatsapp.profile" -> SOCIAL_MESSAGE
|
// "vnd.android.cursor.item/vnd.com.whatsapp.profile" -> SOCIAL_MESSAGE
|
||||||
"vnd.android.cursor.item/vnd.com.whatsapp.voip.call" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.com.whatsapp.voip.call" -> SOCIAL_VOICE_CALL
|
||||||
"vnd.android.cursor.item/vnd.com.whatsapp.video.call" -> SOCIAL_VIDEO_CALL
|
// "vnd.android.cursor.item/vnd.com.whatsapp.video.call" -> SOCIAL_VIDEO_CALL
|
||||||
|
//
|
||||||
// Viber
|
// // Viber
|
||||||
"vnd.android.cursor.item/vnd.com.viber.voip.viber_number_call" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.com.viber.voip.viber_number_call" -> SOCIAL_VOICE_CALL
|
||||||
"vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_viber" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_viber" -> SOCIAL_VOICE_CALL
|
||||||
"vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_none_viber" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.com.viber.voip.viber_out_call_none_viber" -> SOCIAL_VOICE_CALL
|
||||||
"vnd.android.cursor.item/vnd.com.viber.voip.viber_number_message" -> SOCIAL_MESSAGE
|
// "vnd.android.cursor.item/vnd.com.viber.voip.viber_number_message" -> SOCIAL_MESSAGE
|
||||||
|
//
|
||||||
// Signal
|
// // Signal
|
||||||
"vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact" -> SOCIAL_MESSAGE
|
// "vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.contact" -> SOCIAL_MESSAGE
|
||||||
"vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.call" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.org.thoughtcrime.securesms.call" -> SOCIAL_VOICE_CALL
|
||||||
|
//
|
||||||
// Telegram
|
// // Telegram
|
||||||
"vnd.android.cursor.item/vnd.org.telegram.messenger.android.call" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.org.telegram.messenger.android.call" -> SOCIAL_VOICE_CALL
|
||||||
"vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video" -> SOCIAL_VIDEO_CALL
|
// "vnd.android.cursor.item/vnd.org.telegram.messenger.android.call.video" -> SOCIAL_VIDEO_CALL
|
||||||
"vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile" -> SOCIAL_MESSAGE
|
// "vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile" -> SOCIAL_MESSAGE
|
||||||
|
//
|
||||||
// Threema
|
// // Threema
|
||||||
"vnd.android.cursor.item/vnd.ch.threema.app.profile" -> SOCIAL_MESSAGE
|
// "vnd.android.cursor.item/vnd.ch.threema.app.profile" -> SOCIAL_MESSAGE
|
||||||
"vnd.android.cursor.item/vnd.ch.threema.app.call" -> SOCIAL_VOICE_CALL
|
// "vnd.android.cursor.item/vnd.ch.threema.app.call" -> SOCIAL_VOICE_CALL
|
||||||
else -> return@queryCursor
|
// else -> return@queryCursor
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
val label = cursor.getStringValue(ContactsContract.Data.DATA3)
|
// val label = cursor.getStringValue(ContactsContract.Data.DATA3)
|
||||||
val realID = cursor.getLongValue(ContactsContract.Data._ID)
|
// val realID = cursor.getLongValue(ContactsContract.Data._ID)
|
||||||
val packageName = cursor.getStringValue(ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET)
|
// val packageName = cursor.getStringValue(ContactsContract.Data.ACCOUNT_TYPE_AND_DATA_SET)
|
||||||
val socialAction = SocialAction(curActionId++, type, label, mimetype, realID, packageName)
|
// val socialAction = SocialAction(curActionId++, type, label, mimetype, realID, packageName)
|
||||||
socialActions.add(socialAction)
|
// socialActions.add(socialAction)
|
||||||
}
|
// }
|
||||||
return socialActions
|
// return socialActions
|
||||||
}
|
// }
|
||||||
|
|
||||||
@SuppressLint("UseCompatLoadingForDrawables")
|
@SuppressLint("UseCompatLoadingForDrawables")
|
||||||
fun Context.getPackageDrawable(packageName: String): Drawable {
|
fun Context.getPackageDrawable(packageName: String): Drawable {
|
||||||
@ -344,6 +346,7 @@ fun Context.getPackageDrawable(packageName: String): Drawable {
|
|||||||
WHATSAPP_PACKAGE -> R.drawable.ic_whatsapp_rect_vector
|
WHATSAPP_PACKAGE -> R.drawable.ic_whatsapp_rect_vector
|
||||||
VIBER_PACKAGE -> R.drawable.ic_viber_rect_vector
|
VIBER_PACKAGE -> R.drawable.ic_viber_rect_vector
|
||||||
else -> R.drawable.ic_threema_rect_vector
|
else -> R.drawable.ic_threema_rect_vector
|
||||||
}, theme
|
},
|
||||||
|
theme
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,11 @@ package com.simplemobiletools.contacts.pro.fragments
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
|
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
|
||||||
import com.simplemobiletools.contacts.pro.activities.MainActivity
|
import com.simplemobiletools.contacts.pro.activities.MainActivity
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.dialogs.SelectContactsDialog
|
import com.simplemobiletools.contacts.pro.dialogs.SelectContactsDialog
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
|
|
||||||
|
|
||||||
class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
|
class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
|
||||||
override fun fabClicked() {
|
override fun fabClicked() {
|
||||||
|
@ -17,12 +17,11 @@ import com.simplemobiletools.contacts.pro.activities.MainActivity
|
|||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
|
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
|
||||||
import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter
|
import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter
|
||||||
import com.simplemobiletools.contacts.pro.extensions.config
|
import com.simplemobiletools.commons.extensions.contactsConfig
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
|
import com.simplemobiletools.commons.helpers.Converters
|
||||||
import com.simplemobiletools.contacts.pro.helpers.*
|
import com.simplemobiletools.contacts.pro.helpers.*
|
||||||
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
|
||||||
import kotlinx.android.synthetic.main.fragment_layout.view.*
|
import kotlinx.android.synthetic.main.fragment_layout.view.*
|
||||||
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_fab
|
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_fab
|
||||||
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list
|
import kotlinx.android.synthetic.main.fragment_layout.view.fragment_list
|
||||||
@ -39,13 +38,13 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
private var lastHashCode = 0
|
private var lastHashCode = 0
|
||||||
private var contactsIgnoringSearch = ArrayList<Contact>()
|
private var contactsIgnoringSearch = ArrayList<Contact>()
|
||||||
private var groupsIgnoringSearch = ArrayList<Group>()
|
private var groupsIgnoringSearch = ArrayList<Group>()
|
||||||
private lateinit var config: Config
|
private lateinit var config: ContactsConfig
|
||||||
|
|
||||||
var skipHashComparing = false
|
var skipHashComparing = false
|
||||||
var forceListRedraw = false
|
var forceListRedraw = false
|
||||||
|
|
||||||
fun setupFragment(activity: SimpleActivity) {
|
fun setupFragment(activity: SimpleActivity) {
|
||||||
config = activity.config
|
config = activity.contactsConfig
|
||||||
if (this.activity == null) {
|
if (this.activity == null) {
|
||||||
this.activity = activity
|
this.activity = activity
|
||||||
fragment_fab?.beGoneIf(activity is InsertOrEditContactActivity)
|
fragment_fab?.beGoneIf(activity is InsertOrEditContactActivity)
|
||||||
@ -125,7 +124,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
this is FavoritesFragment -> {
|
this is FavoritesFragment -> {
|
||||||
val favorites = contacts.filter { it.starred == 1 } as ArrayList<Contact>
|
val favorites = contacts.filter { it.starred == 1 } as ArrayList<Contact>
|
||||||
|
|
||||||
if (activity!!.config.isCustomOrderSelected) {
|
if (activity!!.contactsConfig.isCustomOrderSelected) {
|
||||||
sortByCustomOrder(favorites)
|
sortByCustomOrder(favorites)
|
||||||
} else {
|
} else {
|
||||||
favorites
|
favorites
|
||||||
@ -159,7 +158,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun sortByCustomOrder(starred: List<Contact>): ArrayList<Contact> {
|
private fun sortByCustomOrder(starred: List<Contact>): ArrayList<Contact> {
|
||||||
val favoritesOrder = activity!!.config.favoritesContactsOrder
|
val favoritesOrder = activity!!.contactsConfig.favoritesContactsOrder
|
||||||
|
|
||||||
if (favoritesOrder.isEmpty()) {
|
if (favoritesOrder.isEmpty()) {
|
||||||
return ArrayList(starred)
|
return ArrayList(starred)
|
||||||
@ -219,7 +218,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
(currAdapter as GroupsAdapter).apply {
|
(currAdapter as GroupsAdapter).apply {
|
||||||
showContactThumbnails = activity.config.showContactThumbnails
|
showContactThumbnails = activity.contactsConfig.showContactThumbnails
|
||||||
updateItems(storedGroups)
|
updateItems(storedGroups)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,7 +280,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
activity?.apply {
|
activity?.apply {
|
||||||
val orderIds = items.map { it.id }
|
val orderIds = items.map { it.id }
|
||||||
val orderGsonString = Gson().toJson(orderIds)
|
val orderGsonString = Gson().toJson(orderIds)
|
||||||
config.favoritesContactsOrder = orderGsonString
|
contactsConfig.favoritesContactsOrder = orderGsonString
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,7 +299,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setupLetterFastscroller(contacts: ArrayList<Contact>) {
|
private fun setupLetterFastscroller(contacts: ArrayList<Contact>) {
|
||||||
val sorting = context.config.sorting
|
val sorting = context.contactsConfig.sorting
|
||||||
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
|
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
|
||||||
try {
|
try {
|
||||||
val contact = contacts[position]
|
val contact = contacts[position]
|
||||||
@ -309,7 +308,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
|||||||
sorting and SORT_BY_SURNAME != 0 && contact.surname.isNotEmpty() -> contact.surname
|
sorting and SORT_BY_SURNAME != 0 && contact.surname.isNotEmpty() -> contact.surname
|
||||||
sorting and SORT_BY_MIDDLE_NAME != 0 && contact.middleName.isNotEmpty() -> contact.middleName
|
sorting and SORT_BY_MIDDLE_NAME != 0 && contact.middleName.isNotEmpty() -> contact.middleName
|
||||||
sorting and SORT_BY_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName
|
sorting and SORT_BY_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName
|
||||||
context.config.startNameWithSurname -> contact.surname
|
context.contactsConfig.startNameWithSurname -> contact.surname
|
||||||
else -> contact.firstName
|
else -> contact.firstName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,77 +1,77 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
//package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
//
|
||||||
import android.content.Context
|
//import android.content.Context
|
||||||
import com.simplemobiletools.commons.helpers.BaseConfig
|
//import com.simplemobiletools.commons.helpers.BaseConfig
|
||||||
|
//
|
||||||
class Config(context: Context) : BaseConfig(context) {
|
//class Config(context: Context) : BaseConfig(context) {
|
||||||
companion object {
|
// companion object {
|
||||||
fun newInstance(context: Context) = Config(context)
|
// fun newInstance(context: Context) = Config(context)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
var ignoredContactSources: HashSet<String>
|
// var ignoredContactSources: HashSet<String>
|
||||||
get() = prefs.getStringSet(IGNORED_CONTACT_SOURCES, hashSetOf(".")) as HashSet
|
// get() = prefs.getStringSet(IGNORED_CONTACT_SOURCES, hashSetOf(".")) as HashSet
|
||||||
set(ignoreContactSources) = prefs.edit().remove(IGNORED_CONTACT_SOURCES).putStringSet(IGNORED_CONTACT_SOURCES, ignoreContactSources).apply()
|
// set(ignoreContactSources) = prefs.edit().remove(IGNORED_CONTACT_SOURCES).putStringSet(IGNORED_CONTACT_SOURCES, ignoreContactSources).apply()
|
||||||
|
//
|
||||||
var showContactThumbnails: Boolean
|
// var showContactThumbnails: Boolean
|
||||||
get() = prefs.getBoolean(SHOW_CONTACT_THUMBNAILS, true)
|
// get() = prefs.getBoolean(SHOW_CONTACT_THUMBNAILS, true)
|
||||||
set(showContactThumbnails) = prefs.edit().putBoolean(SHOW_CONTACT_THUMBNAILS, showContactThumbnails).apply()
|
// set(showContactThumbnails) = prefs.edit().putBoolean(SHOW_CONTACT_THUMBNAILS, showContactThumbnails).apply()
|
||||||
|
//
|
||||||
var showPhoneNumbers: Boolean
|
// var showPhoneNumbers: Boolean
|
||||||
get() = prefs.getBoolean(SHOW_PHONE_NUMBERS, false)
|
// get() = prefs.getBoolean(SHOW_PHONE_NUMBERS, false)
|
||||||
set(showPhoneNumbers) = prefs.edit().putBoolean(SHOW_PHONE_NUMBERS, showPhoneNumbers).apply()
|
// set(showPhoneNumbers) = prefs.edit().putBoolean(SHOW_PHONE_NUMBERS, showPhoneNumbers).apply()
|
||||||
|
//
|
||||||
var showOnlyContactsWithNumbers: Boolean
|
// var showOnlyContactsWithNumbers: Boolean
|
||||||
get() = prefs.getBoolean(SHOW_ONLY_CONTACTS_WITH_NUMBERS, false)
|
// get() = prefs.getBoolean(SHOW_ONLY_CONTACTS_WITH_NUMBERS, false)
|
||||||
set(showOnlyContactsWithNumbers) = prefs.edit().putBoolean(SHOW_ONLY_CONTACTS_WITH_NUMBERS, showOnlyContactsWithNumbers).apply()
|
// set(showOnlyContactsWithNumbers) = prefs.edit().putBoolean(SHOW_ONLY_CONTACTS_WITH_NUMBERS, showOnlyContactsWithNumbers).apply()
|
||||||
|
//
|
||||||
var lastUsedContactSource: String
|
// var lastUsedContactSource: String
|
||||||
get() = prefs.getString(LAST_USED_CONTACT_SOURCE, "")!!
|
// get() = prefs.getString(LAST_USED_CONTACT_SOURCE, "")!!
|
||||||
set(lastUsedContactSource) = prefs.edit().putString(LAST_USED_CONTACT_SOURCE, lastUsedContactSource).apply()
|
// set(lastUsedContactSource) = prefs.edit().putString(LAST_USED_CONTACT_SOURCE, lastUsedContactSource).apply()
|
||||||
|
//
|
||||||
var onContactClick: Int
|
// var onContactClick: Int
|
||||||
get() = prefs.getInt(ON_CONTACT_CLICK, ON_CLICK_VIEW_CONTACT)
|
// get() = prefs.getInt(ON_CONTACT_CLICK, ON_CLICK_VIEW_CONTACT)
|
||||||
set(onContactClick) = prefs.edit().putInt(ON_CONTACT_CLICK, onContactClick).apply()
|
// set(onContactClick) = prefs.edit().putInt(ON_CONTACT_CLICK, onContactClick).apply()
|
||||||
|
//
|
||||||
var showContactFields: Int
|
// var showContactFields: Int
|
||||||
get() = prefs.getInt(
|
// get() = prefs.getInt(
|
||||||
SHOW_CONTACT_FIELDS, SHOW_FIRST_NAME_FIELD or SHOW_SURNAME_FIELD or SHOW_PHONE_NUMBERS_FIELD or SHOW_EMAILS_FIELD or
|
// SHOW_CONTACT_FIELDS, SHOW_FIRST_NAME_FIELD or SHOW_SURNAME_FIELD or SHOW_PHONE_NUMBERS_FIELD or SHOW_EMAILS_FIELD or
|
||||||
SHOW_ADDRESSES_FIELD or SHOW_EVENTS_FIELD or SHOW_NOTES_FIELD or SHOW_GROUPS_FIELD or SHOW_CONTACT_SOURCE_FIELD
|
// SHOW_ADDRESSES_FIELD or SHOW_EVENTS_FIELD or SHOW_NOTES_FIELD or SHOW_GROUPS_FIELD or SHOW_CONTACT_SOURCE_FIELD
|
||||||
)
|
// )
|
||||||
set(showContactFields) = prefs.edit().putInt(SHOW_CONTACT_FIELDS, showContactFields).apply()
|
// set(showContactFields) = prefs.edit().putInt(SHOW_CONTACT_FIELDS, showContactFields).apply()
|
||||||
|
//
|
||||||
var showTabs: Int
|
// var showTabs: Int
|
||||||
get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK)
|
// get() = prefs.getInt(SHOW_TABS, ALL_TABS_MASK)
|
||||||
set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()
|
// set(showTabs) = prefs.edit().putInt(SHOW_TABS, showTabs).apply()
|
||||||
|
//
|
||||||
var showDialpadButton: Boolean
|
// var showDialpadButton: Boolean
|
||||||
get() = prefs.getBoolean(SHOW_DIALPAD_BUTTON, true)
|
// get() = prefs.getBoolean(SHOW_DIALPAD_BUTTON, true)
|
||||||
set(showDialpadButton) = prefs.edit().putBoolean(SHOW_DIALPAD_BUTTON, showDialpadButton).apply()
|
// set(showDialpadButton) = prefs.edit().putBoolean(SHOW_DIALPAD_BUTTON, showDialpadButton).apply()
|
||||||
|
//
|
||||||
var wasLocalAccountInitialized: Boolean
|
// var wasLocalAccountInitialized: Boolean
|
||||||
get() = prefs.getBoolean(WAS_LOCAL_ACCOUNT_INITIALIZED, false)
|
// get() = prefs.getBoolean(WAS_LOCAL_ACCOUNT_INITIALIZED, false)
|
||||||
set(wasLocalAccountInitialized) = prefs.edit().putBoolean(WAS_LOCAL_ACCOUNT_INITIALIZED, wasLocalAccountInitialized).apply()
|
// set(wasLocalAccountInitialized) = prefs.edit().putBoolean(WAS_LOCAL_ACCOUNT_INITIALIZED, wasLocalAccountInitialized).apply()
|
||||||
|
//
|
||||||
var lastExportPath: String
|
// var lastExportPath: String
|
||||||
get() = prefs.getString(LAST_EXPORT_PATH, "")!!
|
// get() = prefs.getString(LAST_EXPORT_PATH, "")!!
|
||||||
set(lastExportPath) = prefs.edit().putString(LAST_EXPORT_PATH, lastExportPath).apply()
|
// set(lastExportPath) = prefs.edit().putString(LAST_EXPORT_PATH, lastExportPath).apply()
|
||||||
|
//
|
||||||
var speedDial: String
|
// var speedDial: String
|
||||||
get() = prefs.getString(SPEED_DIAL, "")!!
|
// get() = prefs.getString(SPEED_DIAL, "")!!
|
||||||
set(speedDial) = prefs.edit().putString(SPEED_DIAL, speedDial).apply()
|
// set(speedDial) = prefs.edit().putString(SPEED_DIAL, speedDial).apply()
|
||||||
|
//
|
||||||
var showPrivateContacts: Boolean
|
// var showPrivateContacts: Boolean
|
||||||
get() = prefs.getBoolean(SHOW_PRIVATE_CONTACTS, true)
|
// get() = prefs.getBoolean(SHOW_PRIVATE_CONTACTS, true)
|
||||||
set(showPrivateContacts) = prefs.edit().putBoolean(SHOW_PRIVATE_CONTACTS, showPrivateContacts).apply()
|
// set(showPrivateContacts) = prefs.edit().putBoolean(SHOW_PRIVATE_CONTACTS, showPrivateContacts).apply()
|
||||||
|
//
|
||||||
var mergeDuplicateContacts: Boolean
|
// var mergeDuplicateContacts: Boolean
|
||||||
get() = prefs.getBoolean(MERGE_DUPLICATE_CONTACTS, true)
|
// get() = prefs.getBoolean(MERGE_DUPLICATE_CONTACTS, true)
|
||||||
set(mergeDuplicateContacts) = prefs.edit().putBoolean(MERGE_DUPLICATE_CONTACTS, mergeDuplicateContacts).apply()
|
// set(mergeDuplicateContacts) = prefs.edit().putBoolean(MERGE_DUPLICATE_CONTACTS, mergeDuplicateContacts).apply()
|
||||||
|
//
|
||||||
var favoritesContactsOrder: String
|
// var favoritesContactsOrder: String
|
||||||
get() = prefs.getString(FAVORITES_CONTACTS_ORDER, "")!!
|
// get() = prefs.getString(FAVORITES_CONTACTS_ORDER, "")!!
|
||||||
set(order) = prefs.edit().putString(FAVORITES_CONTACTS_ORDER, order).apply()
|
// set(order) = prefs.edit().putString(FAVORITES_CONTACTS_ORDER, order).apply()
|
||||||
|
//
|
||||||
var isCustomOrderSelected: Boolean
|
// var isCustomOrderSelected: Boolean
|
||||||
get() = prefs.getBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, false)
|
// get() = prefs.getBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, false)
|
||||||
set(selected) = prefs.edit().putBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, selected).apply()
|
// set(selected) = prefs.edit().putBoolean(FAVORITES_CUSTOM_ORDER_SELECTED, selected).apply()
|
||||||
}
|
//}
|
||||||
|
@ -1,29 +1,26 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
|
||||||
import android.provider.ContactsContract.CommonDataKinds
|
|
||||||
import com.simplemobiletools.commons.extensions.normalizeString
|
|
||||||
import com.simplemobiletools.commons.helpers.TAB_CONTACTS
|
import com.simplemobiletools.commons.helpers.TAB_CONTACTS
|
||||||
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
|
import com.simplemobiletools.commons.helpers.TAB_FAVORITES
|
||||||
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
import com.simplemobiletools.commons.helpers.TAB_GROUPS
|
||||||
import com.simplemobiletools.contacts.pro.models.LocalContact
|
|
||||||
|
|
||||||
// shared prefs
|
// shared prefs
|
||||||
const val SHOW_CONTACT_THUMBNAILS = "show_contact_thumbnails"
|
// const val SHOW_CONTACT_THUMBNAILS = "show_contact_thumbnails"
|
||||||
const val SHOW_PHONE_NUMBERS = "show_phone_numbers"
|
// const val SHOW_PHONE_NUMBERS = "show_phone_numbers"
|
||||||
const val SHOW_ONLY_CONTACTS_WITH_NUMBERS = "show_only_contacts_with_numbers"
|
// const val SHOW_ONLY_CONTACTS_WITH_NUMBERS = "show_only_contacts_with_numbers"
|
||||||
const val IGNORED_CONTACT_SOURCES = "ignored_contact_sources_2"
|
// const val IGNORED_CONTACT_SOURCES = "ignored_contact_sources_2"
|
||||||
const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source"
|
// const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source"
|
||||||
const val ON_CONTACT_CLICK = "on_contact_click"
|
// const val ON_CONTACT_CLICK = "on_contact_click"
|
||||||
const val SHOW_CONTACT_FIELDS = "show_contact_fields"
|
// const val SHOW_CONTACT_FIELDS = "show_contact_fields"
|
||||||
const val SHOW_TABS = "show_tabs"
|
// const val SHOW_TABS = "show_tabs"
|
||||||
const val SHOW_DIALPAD_BUTTON = "show_dialpad_button"
|
// const val SHOW_DIALPAD_BUTTON = "show_dialpad_button"
|
||||||
const val SPEED_DIAL = "speed_dial"
|
// const val SPEED_DIAL = "speed_dial"
|
||||||
const val LAST_EXPORT_PATH = "last_export_path"
|
// const val LAST_EXPORT_PATH = "last_export_path"
|
||||||
const val WAS_LOCAL_ACCOUNT_INITIALIZED = "was_local_account_initialized"
|
// const val WAS_LOCAL_ACCOUNT_INITIALIZED = "was_local_account_initialized"
|
||||||
const val SHOW_PRIVATE_CONTACTS = "show_private_contacts"
|
// const val SHOW_PRIVATE_CONTACTS = "show_private_contacts"
|
||||||
const val MERGE_DUPLICATE_CONTACTS = "merge_duplicate_contacts"
|
// const val MERGE_DUPLICATE_CONTACTS = "merge_duplicate_contacts"
|
||||||
const val FAVORITES_CONTACTS_ORDER = "favorites_contacts_order"
|
// const val FAVORITES_CONTACTS_ORDER = "favorites_contacts_order"
|
||||||
const val FAVORITES_CUSTOM_ORDER_SELECTED = "favorites_custom_order_selected"
|
// const val FAVORITES_CUSTOM_ORDER_SELECTED = "favorites_custom_order_selected"
|
||||||
|
|
||||||
const val GROUP = "group"
|
const val GROUP = "group"
|
||||||
const val IS_FROM_SIMPLE_CONTACTS = "is_from_simple_contacts"
|
const val IS_FROM_SIMPLE_CONTACTS = "is_from_simple_contacts"
|
||||||
@ -44,7 +41,7 @@ const val LOCATION_FAVORITES_TAB = 1
|
|||||||
const val LOCATION_GROUP_CONTACTS = 2
|
const val LOCATION_GROUP_CONTACTS = 2
|
||||||
const val LOCATION_INSERT_OR_EDIT = 3
|
const val LOCATION_INSERT_OR_EDIT = 3
|
||||||
|
|
||||||
const val ALL_TABS_MASK = TAB_CONTACTS or TAB_FAVORITES or TAB_GROUPS
|
// const val ALL_TABS_MASK = TAB_CONTACTS or TAB_FAVORITES or TAB_GROUPS
|
||||||
|
|
||||||
val tabsList = arrayListOf(
|
val tabsList = arrayListOf(
|
||||||
TAB_CONTACTS,
|
TAB_CONTACTS,
|
||||||
@ -53,10 +50,10 @@ val tabsList = arrayListOf(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// contact photo changes
|
// contact photo changes
|
||||||
const val PHOTO_ADDED = 1
|
// const val PHOTO_ADDED = 1
|
||||||
const val PHOTO_REMOVED = 2
|
// const val PHOTO_REMOVED = 2
|
||||||
const val PHOTO_CHANGED = 3
|
// const val PHOTO_CHANGED = 3
|
||||||
const val PHOTO_UNCHANGED = 4
|
// const val PHOTO_UNCHANGED = 4
|
||||||
|
|
||||||
// phone number/email types
|
// phone number/email types
|
||||||
const val CELL = "CELL"
|
const val CELL = "CELL"
|
||||||
@ -76,44 +73,44 @@ const val HANGOUTS = "Hangouts"
|
|||||||
const val QQ = "QQ"
|
const val QQ = "QQ"
|
||||||
const val JABBER = "Jabber"
|
const val JABBER = "Jabber"
|
||||||
|
|
||||||
const val ON_CLICK_CALL_CONTACT = 1
|
// const val ON_CLICK_CALL_CONTACT = 1
|
||||||
const val ON_CLICK_VIEW_CONTACT = 2
|
// const val ON_CLICK_VIEW_CONTACT = 2
|
||||||
const val ON_CLICK_EDIT_CONTACT = 3
|
// const val ON_CLICK_EDIT_CONTACT = 3
|
||||||
|
|
||||||
// visible fields filtering
|
// visible fields filtering
|
||||||
const val SHOW_PREFIX_FIELD = 1
|
// const val SHOW_PREFIX_FIELD = 1
|
||||||
const val SHOW_FIRST_NAME_FIELD = 2
|
// const val SHOW_FIRST_NAME_FIELD = 2
|
||||||
const val SHOW_MIDDLE_NAME_FIELD = 4
|
// const val SHOW_MIDDLE_NAME_FIELD = 4
|
||||||
const val SHOW_SURNAME_FIELD = 8
|
// const val SHOW_SURNAME_FIELD = 8
|
||||||
const val SHOW_SUFFIX_FIELD = 16
|
// const val SHOW_SUFFIX_FIELD = 16
|
||||||
const val SHOW_PHONE_NUMBERS_FIELD = 32
|
// const val SHOW_PHONE_NUMBERS_FIELD = 32
|
||||||
const val SHOW_EMAILS_FIELD = 64
|
// const val SHOW_EMAILS_FIELD = 64
|
||||||
const val SHOW_ADDRESSES_FIELD = 128
|
// const val SHOW_ADDRESSES_FIELD = 128
|
||||||
const val SHOW_EVENTS_FIELD = 256
|
// const val SHOW_EVENTS_FIELD = 256
|
||||||
const val SHOW_NOTES_FIELD = 512
|
// const val SHOW_NOTES_FIELD = 512
|
||||||
const val SHOW_ORGANIZATION_FIELD = 1024
|
// const val SHOW_ORGANIZATION_FIELD = 1024
|
||||||
const val SHOW_GROUPS_FIELD = 2048
|
// const val SHOW_GROUPS_FIELD = 2048
|
||||||
const val SHOW_CONTACT_SOURCE_FIELD = 4096
|
// const val SHOW_CONTACT_SOURCE_FIELD = 4096
|
||||||
const val SHOW_WEBSITES_FIELD = 8192
|
// const val SHOW_WEBSITES_FIELD = 8192
|
||||||
const val SHOW_NICKNAME_FIELD = 16384
|
// const val SHOW_NICKNAME_FIELD = 16384
|
||||||
const val SHOW_IMS_FIELD = 32768
|
// const val SHOW_IMS_FIELD = 32768
|
||||||
const val SHOW_RINGTONE_FIELD = 65536
|
// const val SHOW_RINGTONE_FIELD = 65536
|
||||||
|
|
||||||
const val DEFAULT_EMAIL_TYPE = CommonDataKinds.Email.TYPE_HOME
|
// const val DEFAULT_EMAIL_TYPE = CommonDataKinds.Email.TYPE_HOME
|
||||||
const val DEFAULT_PHONE_NUMBER_TYPE = CommonDataKinds.Phone.TYPE_MOBILE
|
// const val DEFAULT_PHONE_NUMBER_TYPE = CommonDataKinds.Phone.TYPE_MOBILE
|
||||||
const val DEFAULT_ADDRESS_TYPE = CommonDataKinds.StructuredPostal.TYPE_HOME
|
// const val DEFAULT_ADDRESS_TYPE = CommonDataKinds.StructuredPostal.TYPE_HOME
|
||||||
const val DEFAULT_EVENT_TYPE = CommonDataKinds.Event.TYPE_BIRTHDAY
|
// const val DEFAULT_EVENT_TYPE = CommonDataKinds.Event.TYPE_BIRTHDAY
|
||||||
const val DEFAULT_ORGANIZATION_TYPE = CommonDataKinds.Organization.TYPE_WORK
|
// const val DEFAULT_ORGANIZATION_TYPE = CommonDataKinds.Organization.TYPE_WORK
|
||||||
const val DEFAULT_WEBSITE_TYPE = CommonDataKinds.Website.TYPE_HOMEPAGE
|
// const val DEFAULT_WEBSITE_TYPE = CommonDataKinds.Website.TYPE_HOMEPAGE
|
||||||
const val DEFAULT_IM_TYPE = CommonDataKinds.Im.PROTOCOL_SKYPE
|
// const val DEFAULT_IM_TYPE = CommonDataKinds.Im.PROTOCOL_SKYPE
|
||||||
const val DEFAULT_MIMETYPE = CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
|
// const val DEFAULT_MIMETYPE = CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE
|
||||||
|
|
||||||
// apps with special handling
|
// apps with special handling
|
||||||
const val TELEGRAM_PACKAGE = "org.telegram.messenger"
|
// const val TELEGRAM_PACKAGE = "org.telegram.messenger"
|
||||||
const val SIGNAL_PACKAGE = "org.thoughtcrime.securesms"
|
// const val SIGNAL_PACKAGE = "org.thoughtcrime.securesms"
|
||||||
const val WHATSAPP_PACKAGE = "com.whatsapp"
|
// const val WHATSAPP_PACKAGE = "com.whatsapp"
|
||||||
const val VIBER_PACKAGE = "com.viber.voip"
|
// const val VIBER_PACKAGE = "com.viber.voip"
|
||||||
const val THREEMA_PACKAGE = "ch.threema.app"
|
// const val THREEMA_PACKAGE = "ch.threema.app"
|
||||||
|
|
||||||
const val WHATSAPP = "whatsapp"
|
const val WHATSAPP = "whatsapp"
|
||||||
const val SIGNAL = "signal"
|
const val SIGNAL = "signal"
|
||||||
@ -125,28 +122,28 @@ const val SOCIAL_VOICE_CALL = 0
|
|||||||
const val SOCIAL_VIDEO_CALL = 1
|
const val SOCIAL_VIDEO_CALL = 1
|
||||||
const val SOCIAL_MESSAGE = 2
|
const val SOCIAL_MESSAGE = 2
|
||||||
|
|
||||||
fun getEmptyLocalContact() = LocalContact(
|
// fun getEmptyLocalContact() = LocalContact(
|
||||||
0,
|
// 0,
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
null,
|
// null,
|
||||||
"",
|
// "",
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
0,
|
// 0,
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
"",
|
// "",
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
"",
|
// "",
|
||||||
"",
|
// "",
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
ArrayList(),
|
// ArrayList(),
|
||||||
null
|
// null
|
||||||
)
|
// )
|
||||||
|
//
|
||||||
fun getProperText(text: String, shouldNormalize: Boolean) = if (shouldNormalize) text.normalizeString() else text
|
// fun getProperText(text: String, shouldNormalize: Boolean) = if (shouldNormalize) text.normalizeString() else text
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,76 +1,76 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
//package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
//
|
||||||
import androidx.room.TypeConverter
|
//import androidx.room.TypeConverter
|
||||||
import com.google.gson.Gson
|
//import com.google.gson.Gson
|
||||||
import com.google.gson.reflect.TypeToken
|
//import com.google.gson.reflect.TypeToken
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
//import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
import com.simplemobiletools.contacts.pro.models.*
|
//import com.simplemobiletools.contacts.pro.models.*
|
||||||
|
//
|
||||||
class Converters {
|
//class Converters {
|
||||||
private val gson = Gson()
|
// private val gson = Gson()
|
||||||
private val longType = object : TypeToken<List<Long>>() {}.type
|
// private val longType = object : TypeToken<List<Long>>() {}.type
|
||||||
private val stringType = object : TypeToken<List<String>>() {}.type
|
// private val stringType = object : TypeToken<List<String>>() {}.type
|
||||||
private val numberType = object : TypeToken<List<PhoneNumber>>() {}.type
|
// private val numberType = object : TypeToken<List<PhoneNumber>>() {}.type
|
||||||
private val numberConverterType = object : TypeToken<List<PhoneNumberConverter>>() {}.type
|
// private val numberConverterType = object : TypeToken<List<PhoneNumberConverter>>() {}.type
|
||||||
private val emailType = object : TypeToken<List<Email>>() {}.type
|
// private val emailType = object : TypeToken<List<Email>>() {}.type
|
||||||
private val addressType = object : TypeToken<List<Address>>() {}.type
|
// private val addressType = object : TypeToken<List<Address>>() {}.type
|
||||||
private val eventType = object : TypeToken<List<Event>>() {}.type
|
// private val eventType = object : TypeToken<List<Event>>() {}.type
|
||||||
private val imType = object : TypeToken<List<IM>>() {}.type
|
// private val imType = object : TypeToken<List<IM>>() {}.type
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToStringList(value: String) = gson.fromJson<ArrayList<String>>(value, stringType)
|
// fun jsonToStringList(value: String) = gson.fromJson<ArrayList<String>>(value, stringType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun stringListToJson(list: ArrayList<String>) = gson.toJson(list)
|
// fun stringListToJson(list: ArrayList<String>) = gson.toJson(list)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToLongList(value: String) = gson.fromJson<ArrayList<Long>>(value, longType)
|
// fun jsonToLongList(value: String) = gson.fromJson<ArrayList<Long>>(value, longType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun longListToJson(list: ArrayList<Long>) = gson.toJson(list)
|
// fun longListToJson(list: ArrayList<Long>) = gson.toJson(list)
|
||||||
|
//
|
||||||
// some hacky converting is needed since PhoneNumber model has been added to proguard rules, but obfuscated json was stored in database
|
// // some hacky converting is needed since PhoneNumber model has been added to proguard rules, but obfuscated json was stored in database
|
||||||
// convert [{"a":"678910","b":2,"c":"","d":"678910","e":false}] to PhoneNumber(value=678910, type=2, label=, normalizedNumber=678910, isPrimary=false)
|
// // convert [{"a":"678910","b":2,"c":"","d":"678910","e":false}] to PhoneNumber(value=678910, type=2, label=, normalizedNumber=678910, isPrimary=false)
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToPhoneNumberList(value: String): ArrayList<PhoneNumber> {
|
// fun jsonToPhoneNumberList(value: String): ArrayList<PhoneNumber> {
|
||||||
val numbers = gson.fromJson<ArrayList<PhoneNumber>>(value, numberType)
|
// val numbers = gson.fromJson<ArrayList<PhoneNumber>>(value, numberType)
|
||||||
return if (numbers.any { it.value == null }) {
|
// return if (numbers.any { it.value == null }) {
|
||||||
val phoneNumbers = ArrayList<PhoneNumber>()
|
// val phoneNumbers = ArrayList<PhoneNumber>()
|
||||||
val numberConverters = gson.fromJson<ArrayList<PhoneNumberConverter>>(value, numberConverterType)
|
// val numberConverters = gson.fromJson<ArrayList<PhoneNumberConverter>>(value, numberConverterType)
|
||||||
numberConverters.forEach { converter ->
|
// numberConverters.forEach { converter ->
|
||||||
val phoneNumber = PhoneNumber(converter.a, converter.b, converter.c, converter.d, converter.e)
|
// val phoneNumber = PhoneNumber(converter.a, converter.b, converter.c, converter.d, converter.e)
|
||||||
phoneNumbers.add(phoneNumber)
|
// phoneNumbers.add(phoneNumber)
|
||||||
}
|
// }
|
||||||
phoneNumbers
|
// phoneNumbers
|
||||||
} else {
|
// } else {
|
||||||
numbers
|
// numbers
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun phoneNumberListToJson(list: ArrayList<PhoneNumber>) = gson.toJson(list)
|
// fun phoneNumberListToJson(list: ArrayList<PhoneNumber>) = gson.toJson(list)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToEmailList(value: String) = gson.fromJson<ArrayList<Email>>(value, emailType)
|
// fun jsonToEmailList(value: String) = gson.fromJson<ArrayList<Email>>(value, emailType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun emailListToJson(list: ArrayList<Email>) = gson.toJson(list)
|
// fun emailListToJson(list: ArrayList<Email>) = gson.toJson(list)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToAddressList(value: String) = gson.fromJson<ArrayList<Address>>(value, addressType)
|
// fun jsonToAddressList(value: String) = gson.fromJson<ArrayList<Address>>(value, addressType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun addressListToJson(list: ArrayList<Address>) = gson.toJson(list)
|
// fun addressListToJson(list: ArrayList<Address>) = gson.toJson(list)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToEventList(value: String) = gson.fromJson<ArrayList<Event>>(value, eventType)
|
// fun jsonToEventList(value: String) = gson.fromJson<ArrayList<Event>>(value, eventType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun eventListToJson(list: ArrayList<Event>) = gson.toJson(list)
|
// fun eventListToJson(list: ArrayList<Event>) = gson.toJson(list)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun jsonToIMsList(value: String) = gson.fromJson<ArrayList<IM>>(value, imType)
|
// fun jsonToIMsList(value: String) = gson.fromJson<ArrayList<IM>>(value, imType)
|
||||||
|
//
|
||||||
@TypeConverter
|
// @TypeConverter
|
||||||
fun IMsListToJson(list: ArrayList<IM>) = gson.toJson(list)
|
// fun IMsListToJson(list: ArrayList<IM>) = gson.toJson(list)
|
||||||
}
|
//}
|
||||||
|
@ -1,173 +1,173 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
//package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
//
|
||||||
import android.content.Context
|
//import android.content.Context
|
||||||
import android.graphics.BitmapFactory
|
//import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
//import android.net.Uri
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Event
|
//import android.provider.ContactsContract.CommonDataKinds.Event
|
||||||
import android.provider.MediaStore
|
//import android.provider.MediaStore
|
||||||
import com.simplemobiletools.commons.extensions.getByteArray
|
//import com.simplemobiletools.commons.extensions.getByteArray
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
//import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
||||||
import com.simplemobiletools.commons.models.SimpleContact
|
//import com.simplemobiletools.commons.models.SimpleContact
|
||||||
import com.simplemobiletools.contacts.pro.extensions.contactsDB
|
//import com.simplemobiletools.contacts.pro.extensions.contactsDB
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getEmptyContact
|
//import com.simplemobiletools.contacts.pro.extensions.getEmptyContact
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
//import com.simplemobiletools.commons.models.contacts.*
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
//import com.simplemobiletools.contacts.pro.models.Group
|
||||||
import com.simplemobiletools.contacts.pro.models.LocalContact
|
//import com.simplemobiletools.contacts.pro.models.LocalContact
|
||||||
import com.simplemobiletools.contacts.pro.models.Organization
|
//import com.simplemobiletools.contacts.pro.models.Organization
|
||||||
|
//
|
||||||
class LocalContactsHelper(val context: Context) {
|
//class LocalContactsHelper(val context: Context) {
|
||||||
fun getAllContacts(favoritesOnly: Boolean = false): ArrayList<Contact> {
|
// fun getAllContacts(favoritesOnly: Boolean = false): ArrayList<Contact> {
|
||||||
val contacts = if (favoritesOnly) context.contactsDB.getFavoriteContacts() else context.contactsDB.getContacts()
|
// val contacts = if (favoritesOnly) context.contactsDB.getFavoriteContacts() else context.contactsDB.getContacts()
|
||||||
val storedGroups = ContactsHelper(context).getStoredGroupsSync()
|
// val storedGroups = ContactsHelper(context).getStoredGroupsSync()
|
||||||
return contacts.map { convertLocalContactToContact(it, storedGroups) }.toMutableList() as ArrayList<Contact>
|
// return contacts.map { convertLocalContactToContact(it, storedGroups) }.toMutableList() as ArrayList<Contact>
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getContactWithId(id: Int): Contact? {
|
// fun getContactWithId(id: Int): Contact? {
|
||||||
val storedGroups = ContactsHelper(context).getStoredGroupsSync()
|
// val storedGroups = ContactsHelper(context).getStoredGroupsSync()
|
||||||
return convertLocalContactToContact(context.contactsDB.getContactWithId(id), storedGroups)
|
// return convertLocalContactToContact(context.contactsDB.getContactWithId(id), storedGroups)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun insertOrUpdateContact(contact: Contact): Boolean {
|
// fun insertOrUpdateContact(contact: Contact): Boolean {
|
||||||
val localContact = convertContactToLocalContact(contact)
|
// val localContact = convertContactToLocalContact(contact)
|
||||||
return context.contactsDB.insertOrUpdate(localContact) > 0
|
// return context.contactsDB.insertOrUpdate(localContact) > 0
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
// fun addContactsToGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
contacts.forEach {
|
// contacts.forEach {
|
||||||
val localContact = convertContactToLocalContact(it)
|
// val localContact = convertContactToLocalContact(it)
|
||||||
val newGroups = localContact.groups
|
// val newGroups = localContact.groups
|
||||||
newGroups.add(groupId)
|
// newGroups.add(groupId)
|
||||||
newGroups.distinct()
|
// newGroups.distinct()
|
||||||
localContact.groups = newGroups
|
// localContact.groups = newGroups
|
||||||
context.contactsDB.insertOrUpdate(localContact)
|
// context.contactsDB.insertOrUpdate(localContact)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
// fun removeContactsFromGroup(contacts: ArrayList<Contact>, groupId: Long) {
|
||||||
contacts.forEach {
|
// contacts.forEach {
|
||||||
val localContact = convertContactToLocalContact(it)
|
// val localContact = convertContactToLocalContact(it)
|
||||||
val newGroups = localContact.groups
|
// val newGroups = localContact.groups
|
||||||
newGroups.remove(groupId)
|
// newGroups.remove(groupId)
|
||||||
localContact.groups = newGroups
|
// localContact.groups = newGroups
|
||||||
context.contactsDB.insertOrUpdate(localContact)
|
// context.contactsDB.insertOrUpdate(localContact)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun deleteContactIds(ids: MutableList<Long>) {
|
// fun deleteContactIds(ids: MutableList<Long>) {
|
||||||
ids.chunked(30).forEach {
|
// ids.chunked(30).forEach {
|
||||||
context.contactsDB.deleteContactIds(it)
|
// context.contactsDB.deleteContactIds(it)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun toggleFavorites(ids: Array<Int>, addToFavorites: Boolean) {
|
// fun toggleFavorites(ids: Array<Int>, addToFavorites: Boolean) {
|
||||||
val isStarred = if (addToFavorites) 1 else 0
|
// val isStarred = if (addToFavorites) 1 else 0
|
||||||
ids.forEach {
|
// ids.forEach {
|
||||||
context.contactsDB.updateStarred(isStarred, it)
|
// context.contactsDB.updateStarred(isStarred, it)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun updateRingtone(id: Int, ringtone: String) {
|
// fun updateRingtone(id: Int, ringtone: String) {
|
||||||
context.contactsDB.updateRingtone(ringtone, id)
|
// context.contactsDB.updateRingtone(ringtone, id)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun getPhotoByteArray(uri: String): ByteArray {
|
// private fun getPhotoByteArray(uri: String): ByteArray {
|
||||||
if (uri.isEmpty()) {
|
// if (uri.isEmpty()) {
|
||||||
return ByteArray(0)
|
// return ByteArray(0)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
val photoUri = Uri.parse(uri)
|
// val photoUri = Uri.parse(uri)
|
||||||
val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, photoUri)
|
// val bitmap = MediaStore.Images.Media.getBitmap(context.contentResolver, photoUri)
|
||||||
|
//
|
||||||
val fullSizePhotoData = bitmap.getByteArray()
|
// val fullSizePhotoData = bitmap.getByteArray()
|
||||||
bitmap.recycle()
|
// bitmap.recycle()
|
||||||
|
//
|
||||||
return fullSizePhotoData
|
// return fullSizePhotoData
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun convertLocalContactToContact(localContact: LocalContact?, storedGroups: ArrayList<Group>): Contact? {
|
// private fun convertLocalContactToContact(localContact: LocalContact?, storedGroups: ArrayList<Group>): Contact? {
|
||||||
if (localContact == null) {
|
// if (localContact == null) {
|
||||||
return null
|
// return null
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
val contactPhoto = if (localContact.photo == null) {
|
// val contactPhoto = if (localContact.photo == null) {
|
||||||
null
|
// null
|
||||||
} else {
|
// } else {
|
||||||
try {
|
// try {
|
||||||
BitmapFactory.decodeByteArray(localContact.photo, 0, localContact.photo!!.size)
|
// BitmapFactory.decodeByteArray(localContact.photo, 0, localContact.photo!!.size)
|
||||||
} catch (e: OutOfMemoryError) {
|
// } catch (e: OutOfMemoryError) {
|
||||||
null
|
// null
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return context.getEmptyContact().apply {
|
// return context.getEmptyContact().apply {
|
||||||
id = localContact.id!!
|
// id = localContact.id!!
|
||||||
prefix = localContact.prefix
|
// prefix = localContact.prefix
|
||||||
firstName = localContact.firstName
|
// firstName = localContact.firstName
|
||||||
middleName = localContact.middleName
|
// middleName = localContact.middleName
|
||||||
surname = localContact.surname
|
// surname = localContact.surname
|
||||||
suffix = localContact.suffix
|
// suffix = localContact.suffix
|
||||||
nickname = localContact.nickname
|
// nickname = localContact.nickname
|
||||||
phoneNumbers = localContact.phoneNumbers
|
// phoneNumbers = localContact.phoneNumbers
|
||||||
emails = localContact.emails
|
// emails = localContact.emails
|
||||||
addresses = localContact.addresses
|
// addresses = localContact.addresses
|
||||||
events = localContact.events
|
// events = localContact.events
|
||||||
source = SMT_PRIVATE
|
// source = SMT_PRIVATE
|
||||||
starred = localContact.starred
|
// starred = localContact.starred
|
||||||
contactId = localContact.id!!
|
// contactId = localContact.id!!
|
||||||
thumbnailUri = ""
|
// thumbnailUri = ""
|
||||||
photo = contactPhoto
|
// photo = contactPhoto
|
||||||
photoUri = localContact.photoUri
|
// photoUri = localContact.photoUri
|
||||||
notes = localContact.notes
|
// notes = localContact.notes
|
||||||
groups = storedGroups.filter { localContact.groups.contains(it.id) } as ArrayList<Group>
|
// groups = storedGroups.filter { localContact.groups.contains(it.id) } as ArrayList<Group>
|
||||||
organization = Organization(localContact.company, localContact.jobPosition)
|
// organization = Organization(localContact.company, localContact.jobPosition)
|
||||||
websites = localContact.websites
|
// websites = localContact.websites
|
||||||
IMs = localContact.IMs
|
// IMs = localContact.IMs
|
||||||
ringtone = localContact.ringtone
|
// ringtone = localContact.ringtone
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun convertContactToLocalContact(contact: Contact): LocalContact {
|
// private fun convertContactToLocalContact(contact: Contact): LocalContact {
|
||||||
val photoByteArray = if (contact.photoUri.isNotEmpty()) {
|
// val photoByteArray = if (contact.photoUri.isNotEmpty()) {
|
||||||
getPhotoByteArray(contact.photoUri)
|
// getPhotoByteArray(contact.photoUri)
|
||||||
} else {
|
// } else {
|
||||||
contact.photo?.getByteArray()
|
// contact.photo?.getByteArray()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return getEmptyLocalContact().apply {
|
// return getEmptyLocalContact().apply {
|
||||||
id = if (contact.id <= FIRST_CONTACT_ID) null else contact.id
|
// id = if (contact.id <= FIRST_CONTACT_ID) null else contact.id
|
||||||
prefix = contact.prefix
|
// prefix = contact.prefix
|
||||||
firstName = contact.firstName
|
// firstName = contact.firstName
|
||||||
middleName = contact.middleName
|
// middleName = contact.middleName
|
||||||
surname = contact.surname
|
// surname = contact.surname
|
||||||
suffix = contact.suffix
|
// suffix = contact.suffix
|
||||||
nickname = contact.nickname
|
// nickname = contact.nickname
|
||||||
photo = photoByteArray
|
// photo = photoByteArray
|
||||||
phoneNumbers = contact.phoneNumbers
|
// phoneNumbers = contact.phoneNumbers
|
||||||
emails = contact.emails
|
// emails = contact.emails
|
||||||
events = contact.events
|
// events = contact.events
|
||||||
starred = contact.starred
|
// starred = contact.starred
|
||||||
addresses = contact.addresses
|
// addresses = contact.addresses
|
||||||
notes = contact.notes
|
// notes = contact.notes
|
||||||
groups = contact.groups.map { it.id }.toMutableList() as ArrayList<Long>
|
// groups = contact.groups.map { it.id }.toMutableList() as ArrayList<Long>
|
||||||
company = contact.organization.company
|
// company = contact.organization.company
|
||||||
jobPosition = contact.organization.jobPosition
|
// jobPosition = contact.organization.jobPosition
|
||||||
websites = contact.websites
|
// websites = contact.websites
|
||||||
IMs = contact.IMs
|
// IMs = contact.IMs
|
||||||
ringtone = contact.ringtone
|
// ringtone = contact.ringtone
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun convertContactToSimpleContact(contact: Contact?, withPhoneNumbersOnly: Boolean): SimpleContact? {
|
// private fun convertContactToSimpleContact(contact: Contact?, withPhoneNumbersOnly: Boolean): SimpleContact? {
|
||||||
return if (contact == null || (withPhoneNumbersOnly && contact.phoneNumbers.isEmpty())) {
|
// return if (contact == null || (withPhoneNumbersOnly && contact.phoneNumbers.isEmpty())) {
|
||||||
null
|
// null
|
||||||
} else {
|
// } else {
|
||||||
val birthdays = contact.events.filter { it.type == Event.TYPE_BIRTHDAY }.map { it.value }.toMutableList() as ArrayList<String>
|
// val birthdays = contact.events.filter { it.type == Event.TYPE_BIRTHDAY }.map { it.value }.toMutableList() as ArrayList<String>
|
||||||
val anniversaries = contact.events.filter { it.type == Event.TYPE_ANNIVERSARY }.map { it.value }.toMutableList() as ArrayList<String>
|
// val anniversaries = contact.events.filter { it.type == Event.TYPE_ANNIVERSARY }.map { it.value }.toMutableList() as ArrayList<String>
|
||||||
SimpleContact(contact.id, contact.id, contact.getNameToDisplay(), contact.photoUri, contact.phoneNumbers, birthdays, anniversaries)
|
// SimpleContact(contact.id, contact.id, contact.getNameToDisplay(), contact.photoUri, contact.phoneNumbers, birthdays, anniversaries)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getPrivateSimpleContactsSync(favoritesOnly: Boolean, withPhoneNumbersOnly: Boolean) = getAllContacts(favoritesOnly).mapNotNull {
|
// fun getPrivateSimpleContactsSync(favoritesOnly: Boolean, withPhoneNumbersOnly: Boolean) = getAllContacts(favoritesOnly).mapNotNull {
|
||||||
convertContactToSimpleContact(it, withPhoneNumbersOnly)
|
// convertContactToSimpleContact(it, withPhoneNumbersOnly)
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,20 +1,16 @@
|
|||||||
package com.simplemobiletools.contacts.pro.helpers
|
package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Email
|
import android.provider.ContactsContract
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Event
|
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Im
|
|
||||||
import android.provider.ContactsContract.CommonDataKinds.Phone
|
|
||||||
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal
|
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||||
import com.simplemobiletools.commons.extensions.getByteArray
|
import com.simplemobiletools.commons.extensions.getByteArray
|
||||||
import com.simplemobiletools.commons.extensions.getDateTimeFromDateString
|
import com.simplemobiletools.commons.extensions.getDateTimeFromDateString
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.commons.extensions.toast
|
import com.simplemobiletools.commons.extensions.toast
|
||||||
|
import com.simplemobiletools.commons.models.contacts.Contact
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfExporter.ExportResult.EXPORT_FAIL
|
import com.simplemobiletools.contacts.pro.helpers.VcfExporter.ExportResult.EXPORT_FAIL
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
|
||||||
import ezvcard.Ezvcard
|
import ezvcard.Ezvcard
|
||||||
import ezvcard.VCard
|
import ezvcard.VCard
|
||||||
import ezvcard.VCardVersion
|
import ezvcard.VCardVersion
|
||||||
@ -83,7 +79,7 @@ class VcfExporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
contact.events.forEach { event ->
|
contact.events.forEach { event ->
|
||||||
if (event.type == Event.TYPE_ANNIVERSARY || event.type == Event.TYPE_BIRTHDAY) {
|
if (event.type == ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY || event.type == ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) {
|
||||||
val dateTime = event.value.getDateTimeFromDateString(false)
|
val dateTime = event.value.getDateTimeFromDateString(false)
|
||||||
Calendar.getInstance().apply {
|
Calendar.getInstance().apply {
|
||||||
clear()
|
clear()
|
||||||
@ -91,11 +87,10 @@ class VcfExporter {
|
|||||||
set(Calendar.YEAR, 1900)
|
set(Calendar.YEAR, 1900)
|
||||||
} else {
|
} else {
|
||||||
set(Calendar.YEAR, dateTime.year)
|
set(Calendar.YEAR, dateTime.year)
|
||||||
|
|
||||||
}
|
}
|
||||||
set(Calendar.MONTH, dateTime.monthOfYear - 1)
|
set(Calendar.MONTH, dateTime.monthOfYear - 1)
|
||||||
set(Calendar.DAY_OF_MONTH, dateTime.dayOfMonth)
|
set(Calendar.DAY_OF_MONTH, dateTime.dayOfMonth)
|
||||||
if (event.type == Event.TYPE_BIRTHDAY) {
|
if (event.type == ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY) {
|
||||||
card.birthdays.add(Birthday(time))
|
card.birthdays.add(Birthday(time))
|
||||||
} else {
|
} else {
|
||||||
card.anniversaries.add(Anniversary(time))
|
card.anniversaries.add(Anniversary(time))
|
||||||
@ -113,14 +108,14 @@ class VcfExporter {
|
|||||||
|
|
||||||
contact.IMs.forEach {
|
contact.IMs.forEach {
|
||||||
val impp = when (it.type) {
|
val impp = when (it.type) {
|
||||||
Im.PROTOCOL_AIM -> Impp.aim(it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_AIM -> Impp.aim(it.value)
|
||||||
Im.PROTOCOL_YAHOO -> Impp.yahoo(it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_YAHOO -> Impp.yahoo(it.value)
|
||||||
Im.PROTOCOL_MSN -> Impp.msn(it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_MSN -> Impp.msn(it.value)
|
||||||
Im.PROTOCOL_ICQ -> Impp.icq(it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_ICQ -> Impp.icq(it.value)
|
||||||
Im.PROTOCOL_SKYPE -> Impp.skype(it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_SKYPE -> Impp.skype(it.value)
|
||||||
Im.PROTOCOL_GOOGLE_TALK -> Impp(HANGOUTS, it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK -> Impp(HANGOUTS, it.value)
|
||||||
Im.PROTOCOL_QQ -> Impp(QQ, it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ -> Impp(QQ, it.value)
|
||||||
Im.PROTOCOL_JABBER -> Impp(JABBER, it.value)
|
ContactsContract.CommonDataKinds.Im.PROTOCOL_JABBER -> Impp(JABBER, it.value)
|
||||||
else -> Impp(it.label, it.value)
|
else -> Impp(it.label, it.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,29 +171,29 @@ class VcfExporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getPhoneNumberTypeLabel(type: Int, label: String) = when (type) {
|
private fun getPhoneNumberTypeLabel(type: Int, label: String) = when (type) {
|
||||||
Phone.TYPE_MOBILE -> CELL
|
ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE -> CELL
|
||||||
Phone.TYPE_HOME -> HOME
|
ContactsContract.CommonDataKinds.Phone.TYPE_HOME -> HOME
|
||||||
Phone.TYPE_WORK -> WORK
|
ContactsContract.CommonDataKinds.Phone.TYPE_WORK -> WORK
|
||||||
Phone.TYPE_MAIN -> PREF
|
ContactsContract.CommonDataKinds.Phone.TYPE_MAIN -> PREF
|
||||||
Phone.TYPE_FAX_WORK -> WORK_FAX
|
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK -> WORK_FAX
|
||||||
Phone.TYPE_FAX_HOME -> HOME_FAX
|
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME -> HOME_FAX
|
||||||
Phone.TYPE_PAGER -> PAGER
|
ContactsContract.CommonDataKinds.Phone.TYPE_PAGER -> PAGER
|
||||||
Phone.TYPE_OTHER -> OTHER
|
ContactsContract.CommonDataKinds.Phone.TYPE_OTHER -> OTHER
|
||||||
else -> label
|
else -> label
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getEmailTypeLabel(type: Int, label: String) = when (type) {
|
private fun getEmailTypeLabel(type: Int, label: String) = when (type) {
|
||||||
Email.TYPE_HOME -> HOME
|
ContactsContract.CommonDataKinds.Email.TYPE_HOME -> HOME
|
||||||
Email.TYPE_WORK -> WORK
|
ContactsContract.CommonDataKinds.Email.TYPE_WORK -> WORK
|
||||||
Email.TYPE_MOBILE -> MOBILE
|
ContactsContract.CommonDataKinds.Email.TYPE_MOBILE -> MOBILE
|
||||||
Email.TYPE_OTHER -> OTHER
|
ContactsContract.CommonDataKinds.Email.TYPE_OTHER -> OTHER
|
||||||
else -> label
|
else -> label
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getAddressTypeLabel(type: Int, label: String) = when (type) {
|
private fun getAddressTypeLabel(type: Int, label: String) = when (type) {
|
||||||
StructuredPostal.TYPE_HOME -> HOME
|
ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME -> HOME
|
||||||
StructuredPostal.TYPE_WORK -> WORK
|
ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK -> WORK
|
||||||
StructuredPostal.TYPE_OTHER -> OTHER
|
ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER -> OTHER
|
||||||
else -> label
|
else -> label
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,17 +7,19 @@ import android.provider.ContactsContract.CommonDataKinds.Im
|
|||||||
import android.provider.ContactsContract.CommonDataKinds.Phone
|
import android.provider.ContactsContract.CommonDataKinds.Phone
|
||||||
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal
|
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import com.simplemobiletools.commons.extensions.groupsDB
|
||||||
import com.simplemobiletools.commons.extensions.normalizePhoneNumber
|
import com.simplemobiletools.commons.extensions.normalizePhoneNumber
|
||||||
import com.simplemobiletools.commons.extensions.showErrorToast
|
import com.simplemobiletools.commons.extensions.showErrorToast
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
import com.simplemobiletools.commons.extensions.getCachePhoto
|
||||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getCachePhoto
|
|
||||||
import com.simplemobiletools.contacts.pro.extensions.getCachePhotoUri
|
import com.simplemobiletools.contacts.pro.extensions.getCachePhotoUri
|
||||||
import com.simplemobiletools.contacts.pro.extensions.groupsDB
|
import com.simplemobiletools.commons.helpers.ContactsHelper
|
||||||
|
import com.simplemobiletools.commons.helpers.DEFAULT_MIMETYPE
|
||||||
|
import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
|
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_FAIL
|
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_FAIL
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_OK
|
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_OK
|
||||||
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_PARTIAL
|
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.IMPORT_PARTIAL
|
||||||
import com.simplemobiletools.contacts.pro.models.*
|
|
||||||
import ezvcard.Ezvcard
|
import ezvcard.Ezvcard
|
||||||
import ezvcard.VCard
|
import ezvcard.VCard
|
||||||
import ezvcard.util.PartialDate
|
import ezvcard.util.PartialDate
|
||||||
|
@ -1,37 +1,37 @@
|
|||||||
package com.simplemobiletools.contacts.pro.interfaces
|
//package com.simplemobiletools.contacts.pro.interfaces
|
||||||
|
//
|
||||||
import androidx.room.Dao
|
//import androidx.room.Dao
|
||||||
import androidx.room.Insert
|
//import androidx.room.Insert
|
||||||
import androidx.room.OnConflictStrategy
|
//import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
//import androidx.room.Query
|
||||||
import com.simplemobiletools.contacts.pro.models.LocalContact
|
//import com.simplemobiletools.contacts.pro.models.LocalContact
|
||||||
|
//
|
||||||
@Dao
|
//@Dao
|
||||||
interface ContactsDao {
|
//interface ContactsDao {
|
||||||
@Query("SELECT * FROM contacts")
|
// @Query("SELECT * FROM contacts")
|
||||||
fun getContacts(): List<LocalContact>
|
// fun getContacts(): List<LocalContact>
|
||||||
|
//
|
||||||
@Query("SELECT * FROM contacts WHERE starred = 1")
|
// @Query("SELECT * FROM contacts WHERE starred = 1")
|
||||||
fun getFavoriteContacts(): List<LocalContact>
|
// fun getFavoriteContacts(): List<LocalContact>
|
||||||
|
//
|
||||||
@Query("SELECT * FROM contacts WHERE id = :id")
|
// @Query("SELECT * FROM contacts WHERE id = :id")
|
||||||
fun getContactWithId(id: Int): LocalContact?
|
// fun getContactWithId(id: Int): LocalContact?
|
||||||
|
//
|
||||||
@Query("SELECT * FROM contacts WHERE phone_numbers LIKE :number")
|
// @Query("SELECT * FROM contacts WHERE phone_numbers LIKE :number")
|
||||||
fun getContactWithNumber(number: String): LocalContact?
|
// fun getContactWithNumber(number: String): LocalContact?
|
||||||
|
//
|
||||||
@Query("UPDATE contacts SET starred = :isStarred WHERE id = :id")
|
// @Query("UPDATE contacts SET starred = :isStarred WHERE id = :id")
|
||||||
fun updateStarred(isStarred: Int, id: Int)
|
// fun updateStarred(isStarred: Int, id: Int)
|
||||||
|
//
|
||||||
@Query("UPDATE contacts SET ringtone = :ringtone WHERE id = :id")
|
// @Query("UPDATE contacts SET ringtone = :ringtone WHERE id = :id")
|
||||||
fun updateRingtone(ringtone: String, id: Int)
|
// fun updateRingtone(ringtone: String, id: Int)
|
||||||
|
//
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
// @Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
fun insertOrUpdate(contact: LocalContact): Long
|
// fun insertOrUpdate(contact: LocalContact): Long
|
||||||
|
//
|
||||||
@Query("DELETE FROM contacts WHERE id = :id")
|
// @Query("DELETE FROM contacts WHERE id = :id")
|
||||||
fun deleteContactId(id: Int)
|
// fun deleteContactId(id: Int)
|
||||||
|
//
|
||||||
@Query("DELETE FROM contacts WHERE id IN (:ids)")
|
// @Query("DELETE FROM contacts WHERE id IN (:ids)")
|
||||||
fun deleteContactIds(ids: List<Long>)
|
// fun deleteContactIds(ids: List<Long>)
|
||||||
}
|
//}
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
package com.simplemobiletools.contacts.pro.interfaces
|
//package com.simplemobiletools.contacts.pro.interfaces
|
||||||
|
//
|
||||||
import androidx.room.Dao
|
//import androidx.room.Dao
|
||||||
import androidx.room.Insert
|
//import androidx.room.Insert
|
||||||
import androidx.room.OnConflictStrategy
|
//import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
//import androidx.room.Query
|
||||||
import com.simplemobiletools.contacts.pro.models.Group
|
//import com.simplemobiletools.contacts.pro.models.Group
|
||||||
|
//
|
||||||
@Dao
|
//@Dao
|
||||||
interface GroupsDao {
|
//interface GroupsDao {
|
||||||
@Query("SELECT * FROM groups")
|
// @Query("SELECT * FROM groups")
|
||||||
fun getGroups(): List<Group>
|
// fun getGroups(): List<Group>
|
||||||
|
//
|
||||||
@Insert(onConflict = OnConflictStrategy.REPLACE)
|
// @Insert(onConflict = OnConflictStrategy.REPLACE)
|
||||||
fun insertOrUpdate(group: Group): Long
|
// fun insertOrUpdate(group: Group): Long
|
||||||
|
//
|
||||||
@Query("DELETE FROM groups WHERE id = :id")
|
// @Query("DELETE FROM groups WHERE id = :id")
|
||||||
fun deleteGroupId(id: Long)
|
// fun deleteGroupId(id: Long)
|
||||||
}
|
//}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.simplemobiletools.contacts.pro.interfaces
|
package com.simplemobiletools.contacts.pro.interfaces
|
||||||
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
|
|
||||||
interface RefreshContactsListener {
|
interface RefreshContactsListener {
|
||||||
fun refreshContacts(refreshTabsMask: Int)
|
fun refreshContacts(refreshTabsMask: Int)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.simplemobiletools.contacts.pro.interfaces
|
package com.simplemobiletools.contacts.pro.interfaces
|
||||||
|
|
||||||
import com.simplemobiletools.contacts.pro.models.Contact
|
import com.simplemobiletools.commons.models.contacts.*
|
||||||
|
|
||||||
interface RemoveFromGroupListener {
|
interface RemoveFromGroupListener {
|
||||||
fun removeFromGroup(contacts: ArrayList<Contact>)
|
fun removeFromGroup(contacts: ArrayList<Contact>)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class Address(var value: String, var type: Int, var label: String)
|
//data class Address(var value: String, var type: Int, var label: String)
|
||||||
|
@ -1,180 +1,180 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
import android.graphics.Bitmap
|
//import android.graphics.Bitmap
|
||||||
import com.simplemobiletools.commons.extensions.normalizeString
|
//import com.simplemobiletools.commons.extensions.normalizeString
|
||||||
import com.simplemobiletools.commons.helpers.*
|
//import com.simplemobiletools.commons.helpers.*
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
//import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
|
//
|
||||||
data class Contact(
|
//data class Contact(
|
||||||
var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
|
// var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
|
||||||
var photoUri: String, var phoneNumbers: ArrayList<PhoneNumber>, var emails: ArrayList<Email>, var addresses: ArrayList<Address>,
|
// var photoUri: String, var phoneNumbers: ArrayList<PhoneNumber>, var emails: ArrayList<Email>, var addresses: ArrayList<Address>,
|
||||||
var events: ArrayList<Event>, var source: String, var starred: Int, var contactId: Int, var thumbnailUri: String, var photo: Bitmap?, var notes: String,
|
// var events: ArrayList<Event>, var source: String, var starred: Int, var contactId: Int, var thumbnailUri: String, var photo: Bitmap?, var notes: String,
|
||||||
var groups: ArrayList<Group>, var organization: Organization, var websites: ArrayList<String>, var IMs: ArrayList<IM>, var mimetype: String,
|
// var groups: ArrayList<Group>, var organization: Organization, var websites: ArrayList<String>, var IMs: ArrayList<IM>, var mimetype: String,
|
||||||
var ringtone: String?
|
// var ringtone: String?
|
||||||
) :
|
//) :
|
||||||
Comparable<Contact> {
|
// Comparable<Contact> {
|
||||||
companion object {
|
// companion object {
|
||||||
var sorting = 0
|
// var sorting = 0
|
||||||
var startWithSurname = false
|
// var startWithSurname = false
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
override fun compareTo(other: Contact): Int {
|
// override fun compareTo(other: Contact): Int {
|
||||||
var result = when {
|
// var result = when {
|
||||||
sorting and SORT_BY_FIRST_NAME != 0 -> {
|
// sorting and SORT_BY_FIRST_NAME != 0 -> {
|
||||||
val firstString = firstName.normalizeString()
|
// val firstString = firstName.normalizeString()
|
||||||
val secondString = other.firstName.normalizeString()
|
// val secondString = other.firstName.normalizeString()
|
||||||
compareUsingStrings(firstString, secondString, other)
|
// compareUsingStrings(firstString, secondString, other)
|
||||||
}
|
// }
|
||||||
sorting and SORT_BY_MIDDLE_NAME != 0 -> {
|
// sorting and SORT_BY_MIDDLE_NAME != 0 -> {
|
||||||
val firstString = middleName.normalizeString()
|
// val firstString = middleName.normalizeString()
|
||||||
val secondString = other.middleName.normalizeString()
|
// val secondString = other.middleName.normalizeString()
|
||||||
compareUsingStrings(firstString, secondString, other)
|
// compareUsingStrings(firstString, secondString, other)
|
||||||
}
|
// }
|
||||||
sorting and SORT_BY_SURNAME != 0 -> {
|
// sorting and SORT_BY_SURNAME != 0 -> {
|
||||||
val firstString = surname.normalizeString()
|
// val firstString = surname.normalizeString()
|
||||||
val secondString = other.surname.normalizeString()
|
// val secondString = other.surname.normalizeString()
|
||||||
compareUsingStrings(firstString, secondString, other)
|
// compareUsingStrings(firstString, secondString, other)
|
||||||
}
|
// }
|
||||||
sorting and SORT_BY_FULL_NAME != 0 -> {
|
// sorting and SORT_BY_FULL_NAME != 0 -> {
|
||||||
val firstString = getNameToDisplay().normalizeString()
|
// val firstString = getNameToDisplay().normalizeString()
|
||||||
val secondString = other.getNameToDisplay().normalizeString()
|
// val secondString = other.getNameToDisplay().normalizeString()
|
||||||
compareUsingStrings(firstString, secondString, other)
|
// compareUsingStrings(firstString, secondString, other)
|
||||||
}
|
// }
|
||||||
else -> compareUsingIds(other)
|
// else -> compareUsingIds(other)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (sorting and SORT_DESCENDING != 0) {
|
// if (sorting and SORT_DESCENDING != 0) {
|
||||||
result *= -1
|
// result *= -1
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return result
|
// return result
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun compareUsingStrings(firstString: String, secondString: String, other: Contact): Int {
|
// private fun compareUsingStrings(firstString: String, secondString: String, other: Contact): Int {
|
||||||
var firstValue = firstString
|
// var firstValue = firstString
|
||||||
var secondValue = secondString
|
// var secondValue = secondString
|
||||||
|
//
|
||||||
if (firstValue.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty()) {
|
// if (firstValue.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty()) {
|
||||||
val fullCompany = getFullCompany()
|
// val fullCompany = getFullCompany()
|
||||||
if (fullCompany.isNotEmpty()) {
|
// if (fullCompany.isNotEmpty()) {
|
||||||
firstValue = fullCompany.normalizeString()
|
// firstValue = fullCompany.normalizeString()
|
||||||
} else if (emails.isNotEmpty()) {
|
// } else if (emails.isNotEmpty()) {
|
||||||
firstValue = emails.first().value
|
// firstValue = emails.first().value
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
if (secondValue.isEmpty() && other.firstName.isEmpty() && other.middleName.isEmpty() && other.surname.isEmpty()) {
|
// if (secondValue.isEmpty() && other.firstName.isEmpty() && other.middleName.isEmpty() && other.surname.isEmpty()) {
|
||||||
val otherFullCompany = other.getFullCompany()
|
// val otherFullCompany = other.getFullCompany()
|
||||||
if (otherFullCompany.isNotEmpty()) {
|
// if (otherFullCompany.isNotEmpty()) {
|
||||||
secondValue = otherFullCompany.normalizeString()
|
// secondValue = otherFullCompany.normalizeString()
|
||||||
} else if (other.emails.isNotEmpty()) {
|
// } else if (other.emails.isNotEmpty()) {
|
||||||
secondValue = other.emails.first().value
|
// secondValue = other.emails.first().value
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
return if (firstValue.firstOrNull()?.isLetter() == true && secondValue.firstOrNull()?.isLetter() == false) {
|
// return if (firstValue.firstOrNull()?.isLetter() == true && secondValue.firstOrNull()?.isLetter() == false) {
|
||||||
-1
|
// -1
|
||||||
} else if (firstValue.firstOrNull()?.isLetter() == false && secondValue.firstOrNull()?.isLetter() == true) {
|
// } else if (firstValue.firstOrNull()?.isLetter() == false && secondValue.firstOrNull()?.isLetter() == true) {
|
||||||
1
|
// 1
|
||||||
} else {
|
// } else {
|
||||||
if (firstValue.isEmpty() && secondValue.isNotEmpty()) {
|
// if (firstValue.isEmpty() && secondValue.isNotEmpty()) {
|
||||||
1
|
// 1
|
||||||
} else if (firstValue.isNotEmpty() && secondValue.isEmpty()) {
|
// } else if (firstValue.isNotEmpty() && secondValue.isEmpty()) {
|
||||||
-1
|
// -1
|
||||||
} else {
|
// } else {
|
||||||
if (firstValue.equals(secondValue, ignoreCase = true)) {
|
// if (firstValue.equals(secondValue, ignoreCase = true)) {
|
||||||
getNameToDisplay().compareTo(other.getNameToDisplay(), true)
|
// getNameToDisplay().compareTo(other.getNameToDisplay(), true)
|
||||||
} else {
|
// } else {
|
||||||
firstValue.compareTo(secondValue, true)
|
// firstValue.compareTo(secondValue, true)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private fun compareUsingIds(other: Contact): Int {
|
// private fun compareUsingIds(other: Contact): Int {
|
||||||
val firstId = id
|
// val firstId = id
|
||||||
val secondId = other.id
|
// val secondId = other.id
|
||||||
return firstId.compareTo(secondId)
|
// return firstId.compareTo(secondId)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getBubbleText() = when {
|
// fun getBubbleText() = when {
|
||||||
sorting and SORT_BY_FIRST_NAME != 0 -> firstName
|
// sorting and SORT_BY_FIRST_NAME != 0 -> firstName
|
||||||
sorting and SORT_BY_MIDDLE_NAME != 0 -> middleName
|
// sorting and SORT_BY_MIDDLE_NAME != 0 -> middleName
|
||||||
else -> surname
|
// else -> surname
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getNameToDisplay(): String {
|
// fun getNameToDisplay(): String {
|
||||||
val firstMiddle = "$firstName $middleName".trim()
|
// val firstMiddle = "$firstName $middleName".trim()
|
||||||
val firstPart = if (startWithSurname) {
|
// val firstPart = if (startWithSurname) {
|
||||||
if (surname.isNotEmpty() && firstMiddle.isNotEmpty()) {
|
// if (surname.isNotEmpty() && firstMiddle.isNotEmpty()) {
|
||||||
"$surname,"
|
// "$surname,"
|
||||||
} else {
|
// } else {
|
||||||
surname
|
// surname
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
firstMiddle
|
// firstMiddle
|
||||||
}
|
// }
|
||||||
val lastPart = if (startWithSurname) firstMiddle else surname
|
// val lastPart = if (startWithSurname) firstMiddle else surname
|
||||||
val suffixComma = if (suffix.isEmpty()) "" else ", $suffix"
|
// val suffixComma = if (suffix.isEmpty()) "" else ", $suffix"
|
||||||
val fullName = "$prefix $firstPart $lastPart$suffixComma".trim()
|
// val fullName = "$prefix $firstPart $lastPart$suffixComma".trim()
|
||||||
return if (fullName.isEmpty()) {
|
// return if (fullName.isEmpty()) {
|
||||||
if (organization.isNotEmpty()) {
|
// if (organization.isNotEmpty()) {
|
||||||
getFullCompany()
|
// getFullCompany()
|
||||||
} else {
|
// } else {
|
||||||
emails.firstOrNull()?.value?.trim() ?: ""
|
// emails.firstOrNull()?.value?.trim() ?: ""
|
||||||
}
|
// }
|
||||||
} else {
|
// } else {
|
||||||
fullName
|
// fullName
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
// photos stored locally always have different hashcodes. Avoid constantly refreshing the contact lists as the app thinks something changed.
|
// // photos stored locally always have different hashcodes. Avoid constantly refreshing the contact lists as the app thinks something changed.
|
||||||
fun getHashWithoutPrivatePhoto(): Int {
|
// fun getHashWithoutPrivatePhoto(): Int {
|
||||||
val photoToUse = if (isPrivate()) null else photo
|
// val photoToUse = if (isPrivate()) null else photo
|
||||||
return copy(photo = photoToUse).hashCode()
|
// return copy(photo = photoToUse).hashCode()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getStringToCompare(): String {
|
// fun getStringToCompare(): String {
|
||||||
val photoToUse = if (isPrivate()) null else photo
|
// val photoToUse = if (isPrivate()) null else photo
|
||||||
return copy(
|
// return copy(
|
||||||
id = 0,
|
// id = 0,
|
||||||
prefix = "",
|
// prefix = "",
|
||||||
firstName = getNameToDisplay().toLowerCase(),
|
// firstName = getNameToDisplay().toLowerCase(),
|
||||||
middleName = "",
|
// middleName = "",
|
||||||
surname = "",
|
// surname = "",
|
||||||
suffix = "",
|
// suffix = "",
|
||||||
nickname = "",
|
// nickname = "",
|
||||||
photoUri = "",
|
// photoUri = "",
|
||||||
phoneNumbers = ArrayList(),
|
// phoneNumbers = ArrayList(),
|
||||||
emails = ArrayList(),
|
// emails = ArrayList(),
|
||||||
events = ArrayList(),
|
// events = ArrayList(),
|
||||||
source = "",
|
// source = "",
|
||||||
addresses = ArrayList(),
|
// addresses = ArrayList(),
|
||||||
starred = 0,
|
// starred = 0,
|
||||||
contactId = 0,
|
// contactId = 0,
|
||||||
thumbnailUri = "",
|
// thumbnailUri = "",
|
||||||
photo = photoToUse,
|
// photo = photoToUse,
|
||||||
notes = "",
|
// notes = "",
|
||||||
groups = ArrayList(),
|
// groups = ArrayList(),
|
||||||
websites = ArrayList(),
|
// websites = ArrayList(),
|
||||||
organization = Organization("", ""),
|
// organization = Organization("", ""),
|
||||||
IMs = ArrayList(),
|
// IMs = ArrayList(),
|
||||||
ringtone = ""
|
// ringtone = ""
|
||||||
).toString()
|
// ).toString()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun getHashToCompare() = getStringToCompare().hashCode()
|
// fun getHashToCompare() = getStringToCompare().hashCode()
|
||||||
|
//
|
||||||
fun getFullCompany(): String {
|
// fun getFullCompany(): String {
|
||||||
var fullOrganization = if (organization.company.isEmpty()) "" else "${organization.company}, "
|
// var fullOrganization = if (organization.company.isEmpty()) "" else "${organization.company}, "
|
||||||
fullOrganization += organization.jobPosition
|
// fullOrganization += organization.jobPosition
|
||||||
return fullOrganization.trim().trimEnd(',')
|
// return fullOrganization.trim().trimEnd(',')
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
fun isABusinessContact() =
|
// fun isABusinessContact() =
|
||||||
prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty()
|
// prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty()
|
||||||
|
//
|
||||||
fun isPrivate() = source == SMT_PRIVATE
|
// fun isPrivate() = source == SMT_PRIVATE
|
||||||
|
//
|
||||||
fun getSignatureKey() = if (photoUri.isNotEmpty()) photoUri else hashCode()
|
// fun getSignatureKey() = if (photoUri.isNotEmpty()) photoUri else hashCode()
|
||||||
}
|
//}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
//import com.simplemobiletools.commons.helpers.SMT_PRIVATE
|
||||||
|
//
|
||||||
data class ContactSource(var name: String, var type: String, var publicName: String, var count: Int = 0) {
|
//data class ContactSource(var name: String, var type: String, var publicName: String, var count: Int = 0) {
|
||||||
fun getFullIdentifier(): String {
|
// fun getFullIdentifier(): String {
|
||||||
return if (type == SMT_PRIVATE) {
|
// return if (type == SMT_PRIVATE) {
|
||||||
type
|
// type
|
||||||
} else {
|
// } else {
|
||||||
"$name:$type"
|
// "$name:$type"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class Email(var value: String, var type: Int, var label: String)
|
//data class Email(var value: String, var type: Int, var label: String)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class Event(var value: String, var type: Int)
|
//data class Event(var value: String, var type: Int)
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
import androidx.room.ColumnInfo
|
//import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
//import androidx.room.Entity
|
||||||
import androidx.room.Index
|
//import androidx.room.Index
|
||||||
import androidx.room.PrimaryKey
|
//import androidx.room.PrimaryKey
|
||||||
import com.simplemobiletools.contacts.pro.helpers.FIRST_GROUP_ID
|
//import com.simplemobiletools.contacts.pro.helpers.FIRST_GROUP_ID
|
||||||
import java.io.Serializable
|
//import java.io.Serializable
|
||||||
|
//
|
||||||
@Entity(tableName = "groups", indices = [(Index(value = ["id"], unique = true))])
|
//@Entity(tableName = "groups", indices = [(Index(value = ["id"], unique = true))])
|
||||||
data class Group(
|
//data class Group(
|
||||||
@PrimaryKey(autoGenerate = true) var id: Long?,
|
// @PrimaryKey(autoGenerate = true) var id: Long?,
|
||||||
@ColumnInfo(name = "title") var title: String,
|
// @ColumnInfo(name = "title") var title: String,
|
||||||
@ColumnInfo(name = "contacts_count") var contactsCount: Int = 0) : Serializable {
|
// @ColumnInfo(name = "contacts_count") var contactsCount: Int = 0) : Serializable {
|
||||||
|
//
|
||||||
fun addContact() = contactsCount++
|
// fun addContact() = contactsCount++
|
||||||
|
//
|
||||||
fun getBubbleText() = title
|
// fun getBubbleText() = title
|
||||||
|
//
|
||||||
fun isPrivateSecretGroup() = id ?: 0 >= FIRST_GROUP_ID
|
// fun isPrivateSecretGroup() = id ?: 0 >= FIRST_GROUP_ID
|
||||||
}
|
//}
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class IM(var value: String, var type: Int, var label: String)
|
//data class IM(var value: String, var type: Int, var label: String)
|
||||||
|
@ -1,36 +1,36 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
import androidx.room.ColumnInfo
|
//import androidx.room.ColumnInfo
|
||||||
import androidx.room.Entity
|
//import androidx.room.Entity
|
||||||
import androidx.room.Index
|
//import androidx.room.Index
|
||||||
import androidx.room.PrimaryKey
|
//import androidx.room.PrimaryKey
|
||||||
import com.simplemobiletools.commons.models.PhoneNumber
|
//import com.simplemobiletools.commons.models.PhoneNumber
|
||||||
|
//
|
||||||
@Entity(tableName = "contacts", indices = [(Index(value = ["id"], unique = true))])
|
//@Entity(tableName = "contacts", indices = [(Index(value = ["id"], unique = true))])
|
||||||
data class LocalContact(
|
//data class LocalContact(
|
||||||
@PrimaryKey(autoGenerate = true) var id: Int?,
|
// @PrimaryKey(autoGenerate = true) var id: Int?,
|
||||||
@ColumnInfo(name = "prefix") var prefix: String,
|
// @ColumnInfo(name = "prefix") var prefix: String,
|
||||||
@ColumnInfo(name = "first_name") var firstName: String,
|
// @ColumnInfo(name = "first_name") var firstName: String,
|
||||||
@ColumnInfo(name = "middle_name") var middleName: String,
|
// @ColumnInfo(name = "middle_name") var middleName: String,
|
||||||
@ColumnInfo(name = "surname") var surname: String,
|
// @ColumnInfo(name = "surname") var surname: String,
|
||||||
@ColumnInfo(name = "suffix") var suffix: String,
|
// @ColumnInfo(name = "suffix") var suffix: String,
|
||||||
@ColumnInfo(name = "nickname") var nickname: String,
|
// @ColumnInfo(name = "nickname") var nickname: String,
|
||||||
@ColumnInfo(name = "photo", typeAffinity = ColumnInfo.BLOB) var photo: ByteArray?,
|
// @ColumnInfo(name = "photo", typeAffinity = ColumnInfo.BLOB) var photo: ByteArray?,
|
||||||
@ColumnInfo(name = "photo_uri") var photoUri: String,
|
// @ColumnInfo(name = "photo_uri") var photoUri: String,
|
||||||
@ColumnInfo(name = "phone_numbers") var phoneNumbers: ArrayList<PhoneNumber>,
|
// @ColumnInfo(name = "phone_numbers") var phoneNumbers: ArrayList<PhoneNumber>,
|
||||||
@ColumnInfo(name = "emails") var emails: ArrayList<Email>,
|
// @ColumnInfo(name = "emails") var emails: ArrayList<Email>,
|
||||||
@ColumnInfo(name = "events") var events: ArrayList<Event>,
|
// @ColumnInfo(name = "events") var events: ArrayList<Event>,
|
||||||
@ColumnInfo(name = "starred") var starred: Int,
|
// @ColumnInfo(name = "starred") var starred: Int,
|
||||||
@ColumnInfo(name = "addresses") var addresses: ArrayList<Address>,
|
// @ColumnInfo(name = "addresses") var addresses: ArrayList<Address>,
|
||||||
@ColumnInfo(name = "notes") var notes: String,
|
// @ColumnInfo(name = "notes") var notes: String,
|
||||||
@ColumnInfo(name = "groups") var groups: ArrayList<Long>,
|
// @ColumnInfo(name = "groups") var groups: ArrayList<Long>,
|
||||||
@ColumnInfo(name = "company") var company: String,
|
// @ColumnInfo(name = "company") var company: String,
|
||||||
@ColumnInfo(name = "job_position") var jobPosition: String,
|
// @ColumnInfo(name = "job_position") var jobPosition: String,
|
||||||
@ColumnInfo(name = "websites") var websites: ArrayList<String>,
|
// @ColumnInfo(name = "websites") var websites: ArrayList<String>,
|
||||||
@ColumnInfo(name = "ims") var IMs: ArrayList<IM>,
|
// @ColumnInfo(name = "ims") var IMs: ArrayList<IM>,
|
||||||
@ColumnInfo(name = "ringtone") var ringtone: String?
|
// @ColumnInfo(name = "ringtone") var ringtone: String?
|
||||||
) {
|
//) {
|
||||||
override fun equals(other: Any?) = id == (other as? LocalContact?)?.id
|
// override fun equals(other: Any?) = id == (other as? LocalContact?)?.id
|
||||||
|
//
|
||||||
override fun hashCode() = id ?: 0
|
// override fun hashCode() = id ?: 0
|
||||||
}
|
//}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class Organization(var company: String, var jobPosition: String) {
|
//data class Organization(var company: String, var jobPosition: String) {
|
||||||
fun isEmpty() = company.isEmpty() && jobPosition.isEmpty()
|
// fun isEmpty() = company.isEmpty() && jobPosition.isEmpty()
|
||||||
|
//
|
||||||
fun isNotEmpty() = !isEmpty()
|
// fun isNotEmpty() = !isEmpty()
|
||||||
}
|
//}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
// need for hacky parsing of no longer minified PhoneNumber model in Converters.kt
|
//// need for hacky parsing of no longer minified PhoneNumber model in Converters.kt
|
||||||
data class PhoneNumberConverter(var a: String, var b: Int, var c: String, var d: String, var e: Boolean = false)
|
//data class PhoneNumberConverter(var a: String, var b: Int, var c: String, var d: String, var e: Boolean = false)
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
package com.simplemobiletools.contacts.pro.models
|
//package com.simplemobiletools.contacts.pro.models
|
||||||
|
//
|
||||||
data class SocialAction(var actionId: Int, var type: Int, var label: String, var mimetype: String, val dataId: Long, val packageName: String)
|
//data class SocialAction(var actionId: Int, var type: Int, var label: String, var mimetype: String, val dataId: Long, val packageName: String)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user