Merge pull request #33 from SimpleMobileTools/master

upd
This commit is contained in:
solokot
2020-05-15 17:31:40 +03:00
committed by GitHub
60 changed files with 192 additions and 502 deletions

View File

@@ -1,7 +1,7 @@
Changelog
==========
Version 6.10.1 *(2020-05-06)*
Version 6.10.2 *(2020-05-06)*
----------------------------
* Removing the READ_CALL_LOG permission

View File

@@ -57,9 +57,8 @@ android {
}
dependencies {
implementation 'com.simplemobiletools:commons:5.27.7'
implementation 'com.simplemobiletools:commons:5.28.2'
implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5'
implementation 'com.github.tibbi:IndicatorFastScroll:08f512858a'

View File

@@ -16,7 +16,7 @@ import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.request.target.Target
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.getContactLetterIcon
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.sendEmailIntent
@@ -31,7 +31,7 @@ abstract class ContactActivity : SimpleActivity() {
protected var currentContactPhotoPath = ""
fun showPhotoPlaceholder(photoView: ImageView) {
val placeholder = BitmapDrawable(resources, getContactLetterIcon(contact?.getNameToDisplay() ?: "A"))
val placeholder = BitmapDrawable(resources, SimpleContactsHelper(this).getContactLetterIcon(contact?.getNameToDisplay() ?: "A"))
photoView.setImageDrawable(placeholder)
currentContactPhotoPath = ""
contact?.photo = null

View File

@@ -14,6 +14,7 @@ import android.view.Menu
import android.view.MenuItem
import android.view.View
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.KEY_PHONE
import com.simplemobiletools.commons.helpers.REQUEST_CODE_SET_DEFAULT_DIALER
import com.simplemobiletools.commons.helpers.isOreoPlus
import com.simplemobiletools.contacts.pro.R
@@ -21,7 +22,6 @@ import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
import com.simplemobiletools.contacts.pro.dialogs.CallConfirmationDialog
import com.simplemobiletools.contacts.pro.extensions.*
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
import com.simplemobiletools.contacts.pro.helpers.KEY_PHONE
import com.simplemobiletools.contacts.pro.helpers.LOCATION_DIALPAD
import com.simplemobiletools.contacts.pro.models.Contact
import com.simplemobiletools.contacts.pro.models.SpeedDial

View File

@@ -183,7 +183,7 @@ class EditContactActivity : ContactActivity() {
if (((contact!!.id == 0 && action == Intent.ACTION_INSERT) || action == ADD_NEW_CONTACT_NUMBER) && intent.extras != null) {
val phoneNumber = getPhoneNumberFromIntent(intent)
if (phoneNumber != null) {
contact!!.phoneNumbers.add(PhoneNumber(phoneNumber, DEFAULT_PHONE_NUMBER_TYPE, "", phoneNumber.normalizeNumber()))
contact!!.phoneNumbers.add(PhoneNumber(phoneNumber, DEFAULT_PHONE_NUMBER_TYPE, "", phoneNumber.normalizePhoneNumber()))
if (phoneNumber.isNotEmpty() && action == ADD_NEW_CONTACT_NUMBER) {
highlightLastPhoneNumber = true
}
@@ -911,7 +911,7 @@ class EditContactActivity : ContactActivity() {
val numberLabel = if (numberType == Phone.TYPE_CUSTOM) numberHolder.contact_number_type.value else ""
if (number.isNotEmpty()) {
phoneNumbers.add(PhoneNumber(number, numberType, numberLabel, number.normalizeNumber()))
phoneNumbers.add(PhoneNumber(number, numberType, numberLabel, number.normalizePhoneNumber()))
}
}
return phoneNumbers

View File

@@ -13,6 +13,7 @@ import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.KEY_PHONE
import com.simplemobiletools.commons.helpers.PERMISSION_GET_ACCOUNTS
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS

View File

@@ -36,6 +36,7 @@ import com.simplemobiletools.contacts.pro.extensions.getTempFile
import com.simplemobiletools.contacts.pro.extensions.handleGenericContactClick
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
import com.simplemobiletools.contacts.pro.helpers.*
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.activity_main.*
@@ -71,8 +72,8 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
appLaunched(BuildConfig.APPLICATION_ID)
setupTabColors()
setupTabColors()
checkContactPermissions()
storeStateVariables()
checkWhatsNewDialog()

View File

@@ -6,10 +6,10 @@ import android.graphics.drawable.Drawable
import android.net.Uri
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
import com.simplemobiletools.commons.helpers.KEY_PHONE
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.helpers.KEY_MAILTO
import com.simplemobiletools.contacts.pro.helpers.KEY_PHONE
import com.simplemobiletools.contacts.pro.helpers.LOCATION_CONTACTS_TAB
import com.simplemobiletools.contacts.pro.helpers.LOCATION_FAVORITES_TAB

View File

@@ -244,15 +244,8 @@ class ViewContactActivity : ContactActivity() {
}
private fun openWith() {
Intent().apply {
action = ContactsContract.QuickContact.ACTION_QUICK_CONTACT
data = getContactPublicUri(contact!!)
if (resolveActivity(packageManager) != null) {
startActivity(this)
} else {
toast(R.string.no_app_found)
}
}
val uri = getContactPublicUri(contact!!)
launchViewContactIntent(uri)
}
private fun setupFavorite() {
@@ -345,6 +338,12 @@ class ViewContactActivity : ContactActivity() {
contact_numbers_image.beGone()
contact_numbers_holder.beGone()
}
// make sure the Call and SMS buttons are visible if any phone number is shown
if (phoneNumbers.isNotEmpty()) {
contact_send_sms.beVisible()
contact_start_call.beVisible()
}
}
// a contact cannot have different emails per contact source. Such contacts are handled as separate ones, not duplicates of each other

View File

@@ -5,6 +5,9 @@ import android.util.TypedValue
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
@@ -13,6 +16,7 @@ import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.views.FastScroller
@@ -25,7 +29,6 @@ import com.simplemobiletools.contacts.pro.helpers.*
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.item_contact_with_number.view.*
import java.util.*
class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Contact>, private val refreshListener: RefreshContactsListener?,
@@ -255,26 +258,28 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
override fun onViewRecycled(holder: ViewHolder) {
super.onViewRecycled(holder)
if (!activity.isDestroyed && !activity.isFinishing) {
Glide.with(activity).clear(holder.itemView.contact_tmb)
Glide.with(activity).clear(holder.itemView.findViewById<ImageView>(R.id.item_contact_image))
}
}
private fun setupView(view: View, contact: Contact) {
view.apply {
contact_frame?.isSelected = selectedKeys.contains(contact.id)
findViewById<FrameLayout>(R.id.item_contact_frame)?.isSelected = selectedKeys.contains(contact.id)
val fullName = contact.getNameToDisplay()
contact_name.text = if (textToHighlight.isEmpty()) fullName else {
findViewById<TextView>(R.id.item_contact_name).text = if (textToHighlight.isEmpty()) fullName else {
if (fullName.contains(textToHighlight, true)) {
fullName.highlightTextPart(textToHighlight, adjustedPrimaryColor)
} else {
highlightTextFromNumbers(fullName, textToHighlight, adjustedPrimaryColor)
fullName.highlightTextFromNumbers(textToHighlight, adjustedPrimaryColor)
}
}
contact_name.setTextColor(textColor)
contact_name.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
findViewById<TextView>(R.id.item_contact_name).apply {
setTextColor(textColor)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
}
if (contact_number != null) {
if (findViewById<TextView>(R.id.item_contact_number) != null) {
val phoneNumberToUse = if (textToHighlight.isEmpty()) {
contact.phoneNumbers.firstOrNull()
} else {
@@ -282,17 +287,19 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
}
val numberText = phoneNumberToUse?.value ?: ""
contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true)
contact_number.setTextColor(textColor)
contact_number.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
findViewById<TextView>(R.id.item_contact_number).apply {
text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true)
setTextColor(textColor)
setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize)
}
}
contact_tmb.beVisibleIf(showContactThumbnails)
findViewById<TextView>(R.id.item_contact_image).beVisibleIf(showContactThumbnails)
if (showContactThumbnails) {
val placeholderImage = BitmapDrawable(resources, context.getContactLetterIcon(fullName))
val placeholderImage = BitmapDrawable(resources, SimpleContactsHelper(context).getContactLetterIcon(fullName))
if (contact.photoUri.isEmpty() && contact.photo == null) {
contact_tmb.setImageDrawable(placeholderImage)
findViewById<ImageView>(R.id.item_contact_image).setImageDrawable(placeholderImage)
} else {
val options = RequestOptions()
.signature(ObjectKey(contact.getSignatureKey()))
@@ -310,7 +317,7 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
.load(itemToLoad)
.apply(options)
.apply(RequestOptions.circleCropTransform())
.into(contact_tmb)
.into(findViewById(R.id.item_contact_image))
}
}
}

View File

@@ -6,7 +6,11 @@ import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
import com.simplemobiletools.commons.extensions.getTextSize
import com.simplemobiletools.commons.extensions.highlightTextPart
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
@@ -167,7 +171,7 @@ class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList<Group>, val
group_tmb.beVisibleIf(showContactThumbnails)
if (showContactThumbnails) {
group_tmb.setImageDrawable(activity.getColoredGroupIcon(group.title))
group_tmb.setImageDrawable(SimpleContactsHelper(activity).getColoredGroupIcon(group.title))
}
}
}

View File

@@ -11,12 +11,12 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.signature.ObjectKey
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.helpers.highlightTextFromNumbers
import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
import java.util.*
@@ -109,7 +109,7 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis
if (fullName.contains(textToHighlight, true)) {
fullName.highlightTextPart(textToHighlight, adjustedPrimaryColor)
} else {
highlightTextFromNumbers(fullName, textToHighlight, adjustedPrimaryColor)
fullName.highlightTextFromNumbers(textToHighlight, adjustedPrimaryColor)
}
}
@@ -146,7 +146,7 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis
else -> contact.firstName
}
val placeholderImage = BitmapDrawable(resources, context.getContactLetterIcon(avatarName))
val placeholderImage = BitmapDrawable(resources, SimpleContactsHelper(context).getContactLetterIcon(avatarName))
if (contact.photoUri.isEmpty() && contact.photo == null) {
contact_tmb.setImageDrawable(placeholderImage)

View File

@@ -19,7 +19,7 @@ class SpeedDialAdapter(activity: SimpleActivity, var speedDialValues: ArrayList<
setupDragListener(true)
}
override fun getActionMenuId() = R.menu.cab_speed_dial
override fun getActionMenuId() = R.menu.cab_delete_only
override fun prepareActionMode(menu: Menu) {}

View File

@@ -9,7 +9,6 @@ import android.telecom.TelecomManager
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.PERMISSION_CALL_PHONE
import com.simplemobiletools.commons.helpers.PERMISSION_READ_PHONE_STATE
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.contacts.pro.BuildConfig
@@ -30,25 +29,6 @@ fun SimpleActivity.startCallIntent(recipient: String) {
}
}
fun SimpleActivity.launchCallIntent(recipient: String, handle: PhoneAccountHandle?) {
handlePermission(PERMISSION_CALL_PHONE) {
val action = if (it) Intent.ACTION_CALL else Intent.ACTION_DIAL
Intent(action).apply {
data = Uri.fromParts("tel", recipient, null)
if (handle != null) {
putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, handle)
}
if (resolveActivity(packageManager) != null) {
startActivity(this)
} else {
toast(R.string.no_app_found)
}
}
}
}
fun SimpleActivity.tryStartCall(contact: Contact) {
if (config.showCallConfirmation) {
CallConfirmationDialog(this, contact.getNameToDisplay()) {

View File

@@ -17,6 +17,7 @@ import com.simplemobiletools.commons.extensions.telecomManager
import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.contacts.pro.BuildConfig
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.EditContactActivity
@@ -310,7 +311,7 @@ fun Context.getContactPublicUri(contact: Contact): Uri {
val lookupKey = if (contact.isPrivate()) {
"local_${contact.id}"
} else {
ContactsHelper(this).getContactLookupKey(contact.id.toString())
SimpleContactsHelper(this).getContactLookupKey(contact.id.toString())
}
return Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey)
}

View File

@@ -1,6 +1,5 @@
package com.simplemobiletools.contacts.pro.extensions
import android.telephony.PhoneNumberUtils
import android.widget.TextView
import com.simplemobiletools.commons.helpers.getDateFormats
import org.joda.time.DateTime
@@ -33,5 +32,3 @@ fun String.getDateTimeFromDateString(viewToUpdate: TextView? = null): DateTime {
}
return date
}
fun String.normalizeNumber() = PhoneNumberUtils.normalizeNumber(this)

View File

@@ -1,10 +0,0 @@
package com.simplemobiletools.contacts.pro.fragments
import android.content.Context
import android.util.AttributeSet
class InsertOrEditContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
override fun fabClicked() {}
override fun placeholderClicked() {}
}

View File

@@ -5,8 +5,7 @@ import android.content.Context
import android.net.Uri
import android.telecom.Call
import android.telecom.VideoProfile
import com.simplemobiletools.commons.extensions.getNameFromPhoneNumber
import com.simplemobiletools.commons.extensions.getPhotoUriFromPhoneNumber
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.contacts.pro.extensions.contactsDB
import com.simplemobiletools.contacts.pro.models.CallContact
@@ -63,8 +62,8 @@ class CallManager {
if (uri.startsWith("tel:")) {
val number = uri.substringAfter("tel:")
callContact.number = number
callContact.name = context.getNameFromPhoneNumber(number)
callContact.photoUri = context.getPhotoUriFromPhoneNumber(number)
callContact.name = SimpleContactsHelper(context).getNameFromPhoneNumber(number)
callContact.photoUri = SimpleContactsHelper(context).getPhotoUriFromPhoneNumber(number)
if (callContact.name == callContact.number) {
ensureBackgroundThread {

View File

@@ -1,10 +1,6 @@
package com.simplemobiletools.contacts.pro.helpers
import android.provider.ContactsContract.CommonDataKinds
import android.telephony.PhoneNumberUtils
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import com.simplemobiletools.commons.extensions.normalizeString
import com.simplemobiletools.contacts.pro.models.LocalContact
@@ -40,7 +36,6 @@ const val ACCEPT_CALL = PATH + "accept_call"
const val DECLINE_CALL = PATH + "decline_call"
// extras used at third party intents
const val KEY_PHONE = "phone"
const val KEY_NAME = "name"
const val KEY_EMAIL = "email"
const val KEY_MAILTO = "mailto"
@@ -123,18 +118,3 @@ const val WHATSAPP_PACKAGE = "com.whatsapp"
fun getEmptyLocalContact() = LocalContact(0, "", "", "", "", "", "", null, "", ArrayList(), ArrayList(), ArrayList(), 0, ArrayList(), "", ArrayList(), "", "", ArrayList(), ArrayList())
fun getProperText(text: String, shouldNormalize: Boolean) = if (shouldNormalize) text.normalizeString() else text
fun highlightTextFromNumbers(name: String, textToHighlight: String, adjustedPrimaryColor: Int): SpannableString {
val spannableString = SpannableString(name)
val digits = PhoneNumberUtils.convertKeypadLettersToDigits(name)
if (digits.contains(textToHighlight)) {
val startIndex = digits.indexOf(textToHighlight, 0, true)
val endIndex = Math.min(startIndex + textToHighlight.length, name.length)
try {
spannableString.setSpan(ForegroundColorSpan(adjustedPrimaryColor), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
} catch (ignored: IndexOutOfBoundsException) {
}
}
return spannableString
}

View File

@@ -14,13 +14,13 @@ import android.text.TextUtils
import android.util.SparseArray
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.overloads.times
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.*
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 com.simplemobiletools.contacts.pro.overloads.times
import java.util.*
import kotlin.collections.ArrayList
@@ -265,7 +265,7 @@ class ContactsHelper(val context: Context) {
context.queryCursor(uri, projection, selection, selectionArgs, showErrors = true) { cursor ->
val id = cursor.getIntValue(Data.RAW_CONTACT_ID)
val number = cursor.getStringValue(Phone.NUMBER) ?: return@queryCursor
val normalizedNumber = cursor.getStringValue(Phone.NORMALIZED_NUMBER) ?: number.normalizeNumber()
val normalizedNumber = cursor.getStringValue(Phone.NORMALIZED_NUMBER) ?: number.normalizePhoneNumber()
val type = cursor.getIntValue(Phone.TYPE)
val label = cursor.getStringValue(Phone.LABEL) ?: ""
@@ -516,7 +516,7 @@ class ContactsHelper(val context: Context) {
return groups
}
private fun getQuestionMarks() = "?,".times(displayContactSources.filter { it.isNotEmpty() }.size).trimEnd(',')
private fun getQuestionMarks() = ("?," * displayContactSources.filter { it.isNotEmpty() }.size).trimEnd(',')
private fun getSourcesSelection(addMimeType: Boolean = false, addContactId: Boolean = false, useRawContactId: Boolean = true): String {
val strings = ArrayList<String>()
@@ -1351,24 +1351,6 @@ class ContactsHelper(val context: Context) {
fileDescriptor.close()
}
fun getContactLookupKey(contactId: String): String {
val uri = Data.CONTENT_URI
val projection = arrayOf(Data.CONTACT_ID, Data.LOOKUP_KEY)
val selection = "${Data.MIMETYPE} = ? AND ${Data.RAW_CONTACT_ID} = ?"
val selectionArgs = arrayOf(StructuredName.CONTENT_ITEM_TYPE, contactId)
val cursor = context.contentResolver.query(uri, projection, selection, selectionArgs, null)
cursor?.use {
if (cursor.moveToFirst()) {
val id = cursor.getIntValue(Data.CONTACT_ID)
val lookupKey = cursor.getStringValue(Data.LOOKUP_KEY)
return "$lookupKey/$id"
}
}
return ""
}
fun getContactMimeTypeId(contactId: String, mimeType: String): String {
val uri = Data.CONTENT_URI
val projection = arrayOf(Data._ID, Data.RAW_CONTACT_ID, Data.MIMETYPE)

View File

@@ -5,12 +5,12 @@ import android.graphics.BitmapFactory
import android.provider.ContactsContract.CommonDataKinds
import android.provider.ContactsContract.CommonDataKinds.*
import android.widget.Toast
import com.simplemobiletools.commons.extensions.normalizePhoneNumber
import com.simplemobiletools.commons.extensions.showErrorToast
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.groupsDB
import com.simplemobiletools.contacts.pro.extensions.normalizeNumber
import com.simplemobiletools.contacts.pro.helpers.VcfImporter.ImportResult.*
import com.simplemobiletools.contacts.pro.models.*
import com.simplemobiletools.contacts.pro.models.Email
@@ -60,7 +60,7 @@ class VcfImporter(val activity: SimpleActivity) {
""
}
phoneNumbers.add(PhoneNumber(number, type, label, number.normalizeNumber()))
phoneNumbers.add(PhoneNumber(number, type, label, number.normalizePhoneNumber()))
}
val emails = ArrayList<Email>()

View File

@@ -2,11 +2,11 @@ package com.simplemobiletools.contacts.pro.models
import android.graphics.Bitmap
import android.telephony.PhoneNumberUtils
import com.simplemobiletools.commons.extensions.normalizePhoneNumber
import com.simplemobiletools.commons.extensions.normalizeString
import com.simplemobiletools.commons.helpers.SORT_BY_FIRST_NAME
import com.simplemobiletools.commons.helpers.SORT_BY_MIDDLE_NAME
import com.simplemobiletools.commons.helpers.SORT_DESCENDING
import com.simplemobiletools.contacts.pro.extensions.normalizeNumber
import com.simplemobiletools.contacts.pro.helpers.SMT_PRIVATE
data class Contact(var id: Int, var prefix: String, var firstName: String, var middleName: String, var surname: String, var suffix: String, var nickname: String,
@@ -109,8 +109,8 @@ data class Contact(var id: Int, var prefix: String, var firstName: String, var m
fun getStringToCompare(): String {
return copy(id = 0, prefix = "", firstName = getNameToDisplay().toLowerCase(), middleName = "", surname = "", suffix = "", nickname = "", photoUri = "",
phoneNumbers = ArrayList(), emails = ArrayList(), events = ArrayList(), source = "", addresses = ArrayList(), starred = 0, contactId = 0,
thumbnailUri = "", notes = "", groups = ArrayList(), websites = ArrayList(), organization = Organization("", ""), IMs = ArrayList()).toString()
phoneNumbers = ArrayList(), emails = ArrayList(), events = ArrayList(), source = "", addresses = ArrayList(), starred = 0, contactId = 0,
thumbnailUri = "", notes = "", groups = ArrayList(), websites = ArrayList(), organization = Organization("", ""), IMs = ArrayList()).toString()
}
fun getHashToCompare() = getStringToCompare().hashCode()
@@ -125,12 +125,12 @@ data class Contact(var id: Int, var prefix: String, var firstName: String, var m
fun doesContainPhoneNumber(text: String, convertLetters: Boolean): Boolean {
return if (text.isNotEmpty()) {
val normalizedText = if (convertLetters) text.normalizeNumber() else text
val normalizedText = if (convertLetters) text.normalizePhoneNumber() else text
phoneNumbers.any {
PhoneNumberUtils.compare(it.normalizedNumber, normalizedText) ||
it.value.contains(text) ||
it.normalizedNumber?.contains(normalizedText) == true ||
it.value.normalizeNumber().contains(normalizedText)
it.value.normalizePhoneNumber().contains(normalizedText)
}
} else {
false

View File

@@ -1,9 +0,0 @@
package com.simplemobiletools.contacts.pro.overloads
operator fun String.times(x: Int): String {
val stringBuilder = StringBuilder()
for (i in 1..x) {
stringBuilder.append(this)
}
return stringBuilder.toString()
}

View File

@@ -33,6 +33,29 @@
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_use_english_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_english"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/use_english_language"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_manage_contact_fields_holder"
android:layout_width="match_parent"
@@ -149,29 +172,6 @@
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_use_english_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingStart="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_english"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/use_english_language"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_contact_thumbnails_holder"
android:layout_width="match_parent"

View File

@@ -1,59 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contact_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:foreground="@drawable/selector">
<RelativeLayout
android:id="@+id/contact_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/min_row_height"
android:paddingStart="@dimen/tiny_margin"
android:paddingTop="@dimen/normal_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/normal_margin">
<ImageView
android:id="@+id/contact_tmb"
android:layout_width="@dimen/normal_icon_size"
android:layout_height="@dimen/normal_icon_size"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/small_margin"
android:padding="@dimen/tiny_margin"
android:src="@drawable/ic_person_vector" />
<TextView
android:id="@+id/contact_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/contact_tmb"
android:ellipsize="end"
android:maxLines="1"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/activity_margin"
android:textSize="@dimen/big_text_size"
tools:text="John Doe" />
<TextView
android:id="@+id/contact_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/contact_name"
android:layout_alignStart="@+id/contact_name"
android:layout_toEndOf="@+id/contact_tmb"
android:alpha="0.6"
android:ellipsize="end"
android:maxLines="1"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/activity_margin"
android:textSize="@dimen/big_text_size"
tools:text="0123 456 789" />
</RelativeLayout>
</FrameLayout>

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contact_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:foreground="@drawable/selector">
<RelativeLayout
android:id="@+id/contact_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/min_row_height"
android:paddingStart="@dimen/tiny_margin"
android:paddingTop="@dimen/medium_margin"
android:paddingEnd="@dimen/activity_margin"
android:paddingBottom="@dimen/medium_margin">
<ImageView
android:id="@+id/contact_tmb"
android:layout_width="@dimen/normal_icon_size"
android:layout_height="@dimen/normal_icon_size"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/small_margin"
android:padding="@dimen/tiny_margin"
android:src="@drawable/ic_person_vector" />
<TextView
android:id="@+id/contact_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/contact_tmb"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/activity_margin"
android:textSize="@dimen/big_text_size"
tools:text="John Doe" />
</RelativeLayout>
</FrameLayout>

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete_vector"
android:title="@string/delete"
app:showAsAction="ifRoom" />
</menu>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">إظهار مربع حوار تأكيد الاتصال قبل بدء مكالمة</string>
<string name="show_only_contacts_with_numbers">إظهار جهات الإتصال التي لديها أرقام هواتف فقط</string>
<string name="show_dialpad_letters">عرض الحروف على لوحة الاتصال</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">المنزل</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Zəngə başlamazdan əvvəl zəng təsdiq pəncərəsi göstər</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Ev</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Před zahájením hovoru zobrazit potvrzovací dialog</string>
<string name="show_only_contacts_with_numbers">Zobrazit jen kontakty s telefonními čísly</string>
<string name="show_dialpad_letters">Zobrazit na číselníku písmena</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Domov</string>
@@ -141,13 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kontakt bude vymazán ze všech zdrojů kontaktů.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kontakt</item>
<item quantity="few">%d kontakty</item>
<item quantity="other">%d kontaktů</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d skupinu</item>
<item quantity="few">%d skupiny</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Dangos deialog i gadarnhau cyn gwneud galwad</string>
<string name="show_only_contacts_with_numbers">Dangos dim ond cysylltiadau gyda rhifau ffôn</string>
<string name="show_dialpad_letters">Dangos llythrennau ar y pad deialu</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Cartref</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Vis en opkaldsbekræftelsesdialog før du starter et opkald</string>
<string name="show_only_contacts_with_numbers">Vis kun kontakter med telefonnumre</string>
<string name="show_dialpad_letters">Vis bogstaver på tastaturet</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Hjem</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Bestätigungsdialog zeigen, bevor ein Anruf durchgeführt wird</string>
<string name="show_only_contacts_with_numbers">Nur Kontakte mit Telefonnummern anzeigen</string>
<string name="show_dialpad_letters">Buchstaben im Wahlfeld anzeigen</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Privat</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Der Kontakt wird von allen Kontaktquellen entfernt.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d Kontakt</item>
<item quantity="other">%d Kontakte</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d Gruppe</item>
<item quantity="other">%d Gruppen</item>

View File

@@ -18,7 +18,7 @@
<string name="add_to_existing_contact">Προσθήκη σε μια υπάρχουσα Επαφή</string>
<string name="dialer_moved">
<![CDATA[
The part of the app responsible for Call handling had to be moved into a separate new app Simple Dialer, please download it on <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">this link.</a> Thanks!
Η ενότητα της εφαρμογής που είναι υπεύθυνη για το χειρισμό κλήσεων έπρεπε να μετακινηθεί σε μια ξεχωριστή νέα εφαρμογή Simple Dialer, κάνετε λήψη από αυτόν <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">τον σύνδεσμο.</a> Ευχαριστώ!
]]>
</string>
@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Εμφάνιση διαλόγου επιβεβαίωσης πριν από την έναρξη μιας κλήσης</string>
<string name="show_only_contacts_with_numbers">Προβολή όλων των Επαφών με αριθμούς τηλεφώνου</string>
<string name="show_dialpad_letters">Εμφάνιση γραμμάτων στην πληκτρολόγιο</string>
<string name="show_private_contacts">Εμφάνιση ιδιωτικών επαφών σε Simple Dialer και Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Οικία</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Η επαφή θα καταργηθεί από όλες τις πηγές επαφών.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d επαφή</item>
<item quantity="other">%d επαφές</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d ομάδα</item>
<item quantity="other">%d ομάδες</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Mostrar un cuadro de confirmación antes de iniciar una llamada</string>
<string name="show_only_contacts_with_numbers">Solo mostrar contactos con números telefónicos</string>
<string name="show_dialpad_letters">Mostrar letras en el teclado de marcación</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Casa</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">El contacto será eliminado de todos los orígenes de contactos.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contacto</item>
<item quantity="other">%d contactos</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d groupo</item>
<item quantity="other">%d groupos</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Erakutsi egiaztatze mezua dei bat hasi baino lehen</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Etxea</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Näytä puhelun vahvistusruutu</string>
<string name="show_only_contacts_with_numbers">Näytä ainoastaan numerolliset kontaktit</string>
<string name="show_dialpad_letters">Näytä kirjaimet puhelimessa</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Koti</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Afficher une demande de confirmation avant de démarrer un appel</string>
<string name="show_only_contacts_with_numbers">Afficher uniquement les contacts avec un numéro de téléphone</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Maison</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Pokažite dijaloški okvir za potvrdu poziva prije pokretanja poziva</string>
<string name="show_only_contacts_with_numbers">Prikaži samo kontakte s telefonskim brojevima</string>
<string name="show_dialpad_letters">Prikaži slova na telefonskoj tipkovnici</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Kućni</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Jóváhagyás kérése telefonhívás indítása előtt</string>
<string name="show_only_contacts_with_numbers">Csak telefonszámot tartalmazó névjegyek kijelzése</string>
<string name="show_dialpad_letters">Betűk kijelzése a tárcsázón</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Otthon</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Tampilkan dialog konfirmasi panggilan sebelum melakukan panggilan</string>
<string name="show_only_contacts_with_numbers">Hanya tampilkan kontak dengan nomor telepon</string>
<string name="show_dialpad_letters">Tampilkan huruf pada tombol dial</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Rumah</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kontak akan dihapus dari semua sumber kontak.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kontak</item>
<item quantity="other">%d kontak</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grup</item>
<item quantity="other">%d grup</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Tampilkan dialog konfirmasi panggilan sebelum melakukan panggilan</string>
<string name="show_only_contacts_with_numbers">Hanya tampilkan kontak dengan nomor telepon</string>
<string name="show_dialpad_letters">Tampilkan huruf pada tombol dial</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Rumah</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kontak akan dihapus dari semua sumber kontak.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kontak</item>
<item quantity="other">%d kontak</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grup</item>
<item quantity="other">%d grup</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Mostra un messaggio di conferma prima di iniziare una chiamata</string>
<string name="show_only_contacts_with_numbers">Mostra solamente i contatti con almeno un numero telefonico</string>
<string name="show_dialpad_letters">Mostra lettere nel compositore</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Casa</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">発信する前に確認ダイアログを表示する</string>
<string name="show_only_contacts_with_numbers">電話番号が登録された連絡先のみ表示する</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">自宅</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home"></string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Namų</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -18,7 +18,7 @@
<string name="add_to_existing_contact">Aan bestaand contact toevoegen</string>
<string name="dialer_moved">
<![CDATA[
The part of the app responsible for Call handling had to be moved into a separate new app Simple Dialer, please download it on <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">this link.</a> Thanks!
Het gedeelte om telefoongesprekken te beheren moest worden afgesplitst naar een aparte app genaamd Eenvoudige Telefoon. Download de app via <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">this link.</a> Bedankt!
]]>
</string>
@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Om bevestiging vragen voor het bellen</string>
<string name="show_only_contacts_with_numbers">Alleen contacten met telefoonnummers tonen</string>
<string name="show_dialpad_letters">Letters op het toetsenblok tonen</string>
<string name="show_private_contacts">Privécontacten in Eenvoudige Telefoon en Eenvoudige Berichten tonen</string>
<!-- Emails -->
<string name="home">Thuis</string>
@@ -108,16 +109,16 @@
<!-- Dialer -->
<string name="dialer">Bellen</string>
<string name="accept">Accept</string>
<string name="decline">Decline</string>
<string name="unknown_caller">Unknown Caller</string>
<string name="is_calling">Is Calling</string>
<string name="dialing">Dialing</string>
<string name="call_ended">Call Ended</string>
<string name="call_ending">Call Ending</string>
<string name="ongoing_call">Ongoing Call</string>
<string name="select_sim">Select a SIM for this call</string>
<string name="always_use_this_sim">Always use this SIM for this number</string>
<string name="accept">Beantwoorden</string>
<string name="decline">Weigeren</string>
<string name="unknown_caller">Nummer onbekend</string>
<string name="is_calling">Inkomend gesprek</string>
<string name="dialing">Bellen</string>
<string name="call_ended">Gesprek beëindigd</string>
<string name="call_ending">Gesprek beëindigen</string>
<string name="ongoing_call">Gesprek gaande</string>
<string name="select_sim">Selecteer de SIM-kaart voor dit gesprek</string>
<string name="always_use_this_sim">Voor dit nummer altijd deze SIM-kaart gebruiken</string>
<!-- Speed dial -->
<string name="speed_dial">Snelkiezer</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">De contactpersoon zal worden verwijderd uit alle accounts.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacten</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d groep</item>
<item quantity="other">%d groepen</item>
@@ -160,21 +155,21 @@
<!-- App title has to have less than 50 characters. If you cannot squeeze it, just remove a part of it -->
<string name="app_title">Eenvoudig Adresboek Pro - Snel contacten beheren</string>
<!-- Short description has to have less than 80 chars -->
<string name="app_short_description">Easy and quick contact management with no ads, handles groups and favorites too.</string>
<string name="app_short_description">Eenvoudig en snel contactbeheer met groepen en favorieten, zonder advertenties</string>
<string name="app_long_description">
A lightweight app for managing your contacts loved by millions of people. The contacts can be stored on your device only, but also synchronized via Google, or other accounts.
Een eenvoudige app om contacten aan te maken en te beheren. Contacten kunnen lokaal opgeslagen worden, of gesynchroniseerd via Google en andere accounts.
You can use it for managing user emails and events too. It has the ability to sort/filter by multiple parameters, optionally display surname as the first name.
De app is ook te gebruiken voor het beheren van e-mailadressen en gebeurtenissen gekoppeld aan contacten. Sorteren en filteren is mogelijk op basis van verschillende parameters en zowel voor- als achternaam kan als eerste worden getoond.
You can display your favorite contacts or groups on a separate list. Groups can be used for sending out batch emails or SMS, to save you some time, you can rename them easily.
Favoriete contacten kunnen in een aparte lijst worden getoond. E-mails of sms\'jes kunnen naar hele groepen worden gestuurd om tijd te besparen.
It contains handy buttons for calling, or texting your contacts. All visible fields can be customized as you wish, you can easily hide the unused ones. The search function will search the given string at every visible contact field, to make you find your desired contact easily.
Er zijn knoppen om direct een contacpersoon te bellen of te sms\'en. De zichtbaarheid van de gegevensvelden zijn naar voorkeur aan te passen, zodat ongebruikte velden geen ruimte in beslag nemen. De zoekfunctie zal in alle zichtbare velden speuren naar de opgegeven tekst.
There is a lightweight dialpad at your service too, with smart contact suggestions.
De app bevat ook een lichtgewicht telefoonkiezer met snelle contactsuggesties tijdens het invoeren.
It supports exporting/importing contacts in vCard format to .vcf files, for easy migrations or backing up your data.
Het importeren/exporteren van contacten in vCard-formaat (.vcf) wordt ondersteund voor het gemakkelijk overzetten of backuppen van de gegevens.
With this modern and stable contacts manager you can protect your contacts by not sharing them with other apps, so you can keep your contacts private.
Met deze moderne en stabiele app kunnen contactpersonen worden beschermd door ze niet te delen met andere apps en zo privé te houden.
Like the contact source, you can also easily change the contact name, email, phone number, address, organization, groups and many other customizable fields. You can use it for storing contact events too, like birthdays, anniversaries, or any other custom ones.

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Pokazuj okno potwierdzenia zadzwonienia przed zainicjonowaniem połączenia</string>
<string name="show_only_contacts_with_numbers">Pokazuj wyłącznie kontakty z numerami telefonów</string>
<string name="show_dialpad_letters">Pokazuj litery na panelu wybierania</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Dom</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Mostrar diálogo para confirmar a chamada antes de ligar</string>
<string name="show_only_contacts_with_numbers">Mostar apenas os contatos com número de telefone</string>
<string name="show_dialpad_letters">Mostrar letras no discador</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Residencial</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">O contato será removido de todas removido de todas as fontes de contato.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contato</item>
<item quantity="other">%d contatos</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grupo</item>
<item quantity="other">%d grupos</item>

View File

@@ -15,10 +15,10 @@
<string name="send_email_to_group">Enviar e-mail para o grupo</string>
<string name="call_person">Ligar a %s</string>
<string name="create_new_contact">Criar novo contacto</string>
<string name="add_to_existing_contact">Adicionar a contacto existente</string>
<string name="add_to_existing_contact">Adicionar a um contacto existente</string>
<string name="dialer_moved">
<![CDATA[
The part of the app responsible for Call handling had to be moved into a separate new app Simple Dialer, please download it on <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">this link.</a> Thanks!
A parte da aplicação responsável pela gestão de chamadas foi movida para uma nova aplicação com o nome Simple Dialer. Pode descarregar a aplicação <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">aqui.</a> Obrigado!
]]>
</string>
@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Mostrar diálogo para confirmar a chamada</string>
<string name="show_only_contacts_with_numbers">Mostrar apenas contactos com número de telefone</string>
<string name="show_dialpad_letters">Mostrar letras no marcador</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Pessoal</string>
@@ -104,20 +105,20 @@
<!-- Dialpad -->
<string name="dialpad">Marcador</string>
<string name="add_number_to_contact">Adicionar número a um contacto</string>
<string name="add_number_to_contact">Adicionar número a um contacto existente</string>
<!-- Dialer -->
<string name="dialer">Marcador</string>
<string name="accept">Accept</string>
<string name="decline">Decline</string>
<string name="unknown_caller">Unknown Caller</string>
<string name="is_calling">Is Calling</string>
<string name="dialing">Dialing</string>
<string name="call_ended">Call Ended</string>
<string name="call_ending">Call Ending</string>
<string name="ongoing_call">Ongoing Call</string>
<string name="select_sim">Select a SIM for this call</string>
<string name="always_use_this_sim">Always use this SIM for this number</string>
<string name="accept">Aceitar</string>
<string name="decline">Recusar</string>
<string name="unknown_caller">Desconhecido</string>
<string name="is_calling">Está a chamar</string>
<string name="dialing">A ligar</string>
<string name="call_ended">Chamada terminada</string>
<string name="call_ending">A terminar chamada</string>
<string name="ongoing_call">Chamada em curso</string>
<string name="select_sim">Selecione um SIM para esta chamada</string>
<string name="always_use_this_sim">Utilizar sempre este SIM para ligar a este número</string>
<!-- Speed dial -->
<string name="speed_dial">Ligação rápida</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">O contacto será apagado de todas as origens.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contacto</item>
<item quantity="other">%d contactos</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grupo</item>
<item quantity="other">%d grupos</item>
@@ -190,10 +185,10 @@
Não contém anúncios ou permissões desnecessárias. É totalmente open source e permite personalização de cores.
<b>Check out the full suite of Simple Tools here:</b>
<b>Consulte todas as aplicações Simple Tools aqui:</b>
https://www.simplemobiletools.com
<b>Standalone website of Simple Contacts Pro:</b>
<b>Site da aplicação Simple Contacts Pro:</b>
https://www.simplemobiletools.com/contacts
<b>Facebook:</b>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Показывать диалог подтверждения вызова</string>
<string name="show_only_contacts_with_numbers">Показывать только контакты с номерами телефонов</string>
<string name="show_dialpad_letters">Показывать буквы на кнопках набора номера</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Домашний</string>
@@ -141,13 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Контакт будет удалён из всех источников контактов.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d контакт</item>
<item quantity="few">%d контакта</item>
<item quantity="many">%d контактов</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d группу</item>
<item quantity="few">%d группы</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Zobraziť pred spustením hovoru okno na jeho potvrdenie</string>
<string name="show_only_contacts_with_numbers">Zobraziť iba kontakty s telefónnymi číslami</string>
<string name="show_dialpad_letters">Zobraziť na číselníku písmená</string>
<string name="show_private_contacts">Zobraziť súkromné kontakty Jednoduchému Telefónu a Jednoduchému Správcovi Súborov</string>
<!-- Emails -->
<string name="home">Domov</string>
@@ -141,13 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kontakt bude vymazaný zo všetkých zdrojov kontaktov.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kontakt</item>
<item quantity="few">%d kontakty</item>
<item quantity="other">%d kontaktov</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d skupinu</item>
<item quantity="few">%d skupiny</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Visa en bekräftelsedialogruta före uppringning</string>
<string name="show_only_contacts_with_numbers">Visa bara kontakter med telefonnummer</string>
<string name="show_dialpad_letters">Visa bokstäver på knappsatsen</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Hem</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kontakten kommer att tas bort från alla kontaktkällor.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kontakt</item>
<item quantity="other">%d kontakter</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grupp</item>
<item quantity="other">%d grupper</item>

View File

@@ -18,7 +18,7 @@
<string name="add_to_existing_contact">Mevcut bir kişiye ekle</string>
<string name="dialer_moved">
<![CDATA[
The part of the app responsible for Call handling had to be moved into a separate new app Simple Dialer, please download it on <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">this link.</a> Thanks!
Uygulamanın Çağrı işlemeden sorumlu kısmı, ayrı Basit Çevirici adlı yeni bir uygulamaya taşındı, lütfen <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.dialer">bu bağlantıdan</a> indirin. Teşekkürler!
]]>
</string>
@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Arama başlatmadan önce arama onayı penceresi göster</string>
<string name="show_only_contacts_with_numbers">Sadece telefon numaralarını içeren kişileri göster</string>
<string name="show_dialpad_letters">Tuş takımında harfleri göster</string>
<string name="show_private_contacts">Özel kişileri Basit Çevirici ve Basit SMS Messenger\'a göster</string>
<!-- Emails -->
<string name="home">Ev</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">Kişi tüm kişi kaynaklarından kaldırılacak.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d kişi</item>
<item quantity="other">%d kişi</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d grup</item>
<item quantity="other">%d grup</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Показувати діалог підтвердження виклику</string>
<string name="show_only_contacts_with_numbers">Показувати лише контакти з телефонними номерами</string>
<string name="show_dialpad_letters">Показувати літери на панелі набору</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Домашній</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">开始通话前显示通话确认框</string>
<string name="show_only_contacts_with_numbers">只显示含有电话话码的联系人</string>
<string name="show_dialpad_letters">在拨号界面上显示字母</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">住家</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">開始通話前顯示通話確認框</string>
<string name="show_only_contacts_with_numbers">只顯示含有電話話碼的聯絡人</string>
<string name="show_dialpad_letters">在撥號畫面上顯示字母</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">住家</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">這聯絡人將從全部通訊錄來源移除。</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d個聯絡人</item>
<item quantity="other">%d個聯絡人</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d個群組</item>
<item quantity="other">%d個群組</item>

View File

@@ -3,7 +3,6 @@
<dimen name="contact_photo_size">88dp</dimen>
<dimen name="contact_actions_size">48dp</dimen>
<dimen name="contact_icons_size">40dp</dimen>
<dimen name="min_row_height">60dp</dimen>
<dimen name="dialpad_button_size">60dp</dimen>
<dimen name="incoming_call_button_size">72dp</dimen>
<dimen name="call_notification_button_size">30dp</dimen>

View File

@@ -66,6 +66,7 @@
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<string name="show_private_contacts">Show private contacts to Simple Dialer and Simple SMS Messenger</string>
<!-- Emails -->
<string name="home">Home</string>
@@ -141,12 +142,6 @@
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">The contact will be removed from all contact sources.</string>
<!-- Are you sure you want to delete 5 contacts? -->
<plurals name="delete_contacts">
<item quantity="one">%d contact</item>
<item quantity="other">%d contacts</item>
</plurals>
<plurals name="delete_groups">
<item quantity="one">%d group</item>
<item quantity="other">%d groups</item>

View File

@@ -1,7 +1,39 @@
Простое приложение для создания и управления контактами из любого источника. Контакты могут быть сохранены только на вашем устройстве, а также синхронизированы через Google или другие учётные записи. Вы можете отображать свои любимые контакты в отдельном списке.
Лёгкое приложение для управления контактами, которое нравится миллионам людей. Контакты могут храниться только на устройстве, но также синхронизироваться через Google или другие аккаунты.
Вы можете использовать его для управления электронной почтой и событиями контактов. Приложение имеет возможность сортировать/фильтровать по нескольким параметрам, по желанию отображать фамилию в качестве имени.
Вы также можете использовать его для управления электронной почтой и событиями контактов. Есть возможность сортировать/фильтровать по нескольким параметрам, при необходимости отображать фамилию в качестве имени.
Не содержит рекламы или ненужных разрешений, полностью с открытым исходным кодом. Есть возможность настраивать цвета.
Избранные контакты или группы можно отобразить в отдельном списке. Группы можно использовать для для экономии времени при множественной отправке электронных писем или SMS. Для удобства группы можно переименовывать.
Это приложение — всего лишь частица из большой серии приложений. Вы можете найти остальные на https://www.simplemobiletools.com
В приложении есть удобные кнопки для вызова или отправки текстовых сообщений вашим контактам. Все отображаемые поля настраиваются по вашему усмотрению, можно скрыть неиспользуемые. Функция поиска будет искать заданную строку в каждом отображаемом поле контакта, чтобы вы могли быстро найти нужный контакт.
К вашим услугам также имеется функция простого набора номера с умными предложениями по контактам.
Приложение поддерживает экспорт/импорт контактов в формате vCard в файлы .vcf для облегчения миграции или резервного копирования данных.
С помощью этого современного и стабильного менеджера вы можете защитить свои контакты, не передавая их другим приложениям, что поможет сохранить свои контакты в тайне.
Как и в случае с источником контактов, вы также можете легко изменить имя контакта, его электронную почту, номер телефона, адрес, организацию, группы и многие другие настраиваемые поля. Вы также можете использовать приложение для хранения событий контактов, таких как дни рождения, юбилеи или любые другие пользовательские события.
Этот простой редактор контактов имеет множество удобных настроек, таких как отображение телефонных номеров на главном экране, переключение видимости фотографий контактов, отображение только контактов с телефонными номерами, отображение диалога подтверждения перед началом вызова. Содержит быстрый номеронабиратель, который также использует буквы.
Чтобы улучшить взаимодействие с пользователем, вы можете настроить, что будет происходить при нажатии на контакт. Можно либо инициировать вызов, либо перейти на экран просмотра сведений, либо отредактировать выбранный контакт.
Вы можете легко заблокировать телефонные номера, чтобы избежать нежелательных входящих звонков.
Чтобы избежать отображения потенциально нежелательных контактов, приложение имеет мощную встроенную функцию слияния дубликатов контактов.
Приложение выпускается с материальным дизайном и тёмной темой по умолчанию, что обеспечивает удобное использование. Отсутствие доступа в интернет обеспечивает вам больше приватности, безопасности и стабильности, чем в других приложениях.
Не содержит рекламы или ненужных разрешений, полностью с открытым исходным кодом. Есть возможность настраивать цвета интерфейса.
<b>Ознакомьтесь с полным набором приложений серии Simple здесь:</b>
https://www.simplemobiletools.com
<b>Сайт приложения Simple Contacts Pro:</b>
https://www.simplemobiletools.com/contacts
<b>Facebook:</b>
https://www.facebook.com/simplemobiletools
<b>Reddit:</b>
https://www.reddit.com/r/SimpleMobileTools