Merge branch 'master' into prevent-adding-empty-contact

This commit is contained in:
Agnieszka C
2021-11-18 09:52:30 +01:00
50 changed files with 637 additions and 560 deletions

View File

@ -9,8 +9,8 @@ Contains no ads or unnecessary permissions. It is fully opensource, provides cus
This app is just one piece of a bigger series of apps. You can find the rest of them at https://www.simplemobiletools.com
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.contacts.pro'><img src='https://simplemobiletools.com/assets/images/google-play.png' alt='Get it on Google Play' height='45' /></a>
<a href='https://f-droid.org/packages/com.simplemobiletools.contacts.pro'><img src='https://simplemobiletools.com/assets/images/f-droid.png' alt='Get it on F-Droid' height='45' /></a>
<a href='https://play.google.com/store/apps/details?id=com.simplemobiletools.contacts.pro'><img src='https://simplemobiletools.com/images/button-google-play.svg' alt='Get it on Google Play' height='45' /></a>
<a href='https://f-droid.org/packages/com.simplemobiletools.contacts.pro'><img src='https://simplemobiletools.com/images/button-f-droid.png' alt='Get it on F-Droid' height='45' /></a>
<div style="display:flex;">
<img alt="App image" src="fastlane/metadata/android/en-US/images/phoneScreenshots/english/1.jpg" width="30%">

View File

@ -56,7 +56,7 @@ android {
}
dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:c1388a0721'
implementation 'com.github.SimpleMobileTools:Simple-Commons:f86699e092'
implementation 'joda-time:joda-time:2.10.3'
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5'
implementation 'com.github.tibbi:IndicatorFastScroll:c3de1d040a'

View File

@ -199,21 +199,11 @@
android:label="@string/about"
android:parentActivityName=".activities.MainActivity"/>
<activity
android:name="com.simplemobiletools.commons.activities.LicenseActivity"
android:label="@string/third_party_licences"
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
<activity
android:name="com.simplemobiletools.commons.activities.CustomizationActivity"
android:label="@string/customize_colors"
android:parentActivityName=".activities.SettingsActivity"/>
<activity
android:name="com.simplemobiletools.commons.activities.FAQActivity"
android:label="@string/frequently_asked_questions"
android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity"/>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"

View File

@ -65,8 +65,10 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh
fabClicked()
}
val adjustedPrimaryColor = getAdjustedPrimaryColor()
group_contacts_fastscroller?.updateColors(adjustedPrimaryColor, adjustedPrimaryColor.getContrastColor())
group_contacts_placeholder_2.underlineText()
group_contacts_placeholder_2.setTextColor(getAdjustedPrimaryColor())
group_contacts_placeholder_2.setTextColor(adjustedPrimaryColor)
}
override fun onResume() {
@ -108,7 +110,7 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh
groupContacts = it.filter { it.groups.map { it.id }.contains(group.id) } as ArrayList<Contact>
group_contacts_placeholder_2.beVisibleIf(groupContacts.isEmpty())
group_contacts_placeholder.beVisibleIf(groupContacts.isEmpty())
group_contacts_list.beVisibleIf(groupContacts.isNotEmpty())
group_contacts_fastscroller.beVisibleIf(groupContacts.isNotEmpty())
updateContacts(groupContacts)
}
}
@ -133,17 +135,14 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh
private fun updateContacts(contacts: ArrayList<Contact>) {
val currAdapter = group_contacts_list.adapter
if (currAdapter == null) {
ContactsAdapter(this, contacts, this, LOCATION_GROUP_CONTACTS, this, group_contacts_list, group_contacts_fastscroller) {
ContactsAdapter(this, contacts, this, LOCATION_GROUP_CONTACTS, this, group_contacts_list) {
contactClicked(it as Contact)
}.apply {
group_contacts_list.adapter = this
}
group_contacts_list.scheduleLayoutAnimation()
group_contacts_fastscroller.setScrollToY(0)
group_contacts_fastscroller.setViews(group_contacts_list) {
val item = (group_contacts_list.adapter as ContactsAdapter).contactItems.getOrNull(it)
group_contacts_fastscroller.updateBubbleText(item?.getBubbleText() ?: "")
if (areSystemAnimationsEnabled) {
group_contacts_list.scheduleLayoutAnimation()
}
} else {
(currAdapter as ContactsAdapter).updateItems(contacts)
@ -180,9 +179,9 @@ class GroupContactsActivity : SimpleActivity(), RemoveFromGroupListener, Refresh
putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, defaultRingtoneUri)
}
}
private fun setRingtoneOnSelected(uri: Uri) {
groupContacts.forEach{
groupContacts.forEach {
ContactsHelper(this).updateRingtone(it.contactId.toString(), uri.toString())
}
}

View File

@ -386,6 +386,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
skippedTabs++
} else {
val tab = main_tabs_holder.newTab().setIcon(getTabIcon(index))
tab.contentDescription = getTabContentDescription(index)
main_tabs_holder.addTab(tab, index - skippedTabs, getDefaultTab() == index - skippedTabs)
}
}

View File

@ -12,9 +12,9 @@ import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CONTACTS
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter
import com.simplemobiletools.contacts.pro.dialogs.ChangeSortingDialog
@ -26,6 +26,8 @@ import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
import com.simplemobiletools.contacts.pro.helpers.getProperText
import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.activity_select_contact.*
import java.util.*
import kotlin.collections.ArrayList
class SelectContactActivity : SimpleActivity() {
private var specialMimeType: String? = null
@ -41,7 +43,7 @@ class SelectContactActivity : SimpleActivity() {
return
}
setupPlaceholders()
setupViews()
handlePermission(PERMISSION_READ_CONTACTS) {
if (it) {
@ -195,16 +197,25 @@ class SelectContactActivity : SimpleActivity() {
runOnUiThread {
updatePlaceholderVisibility(contacts)
SelectContactsAdapter(this, contacts, ArrayList(), false, select_contact_list, select_contact_fastscroller) {
SelectContactsAdapter(this, contacts, ArrayList(), false, select_contact_list) {
confirmSelection(it)
}.apply {
select_contact_list.adapter = this
}
select_contact_list.scheduleLayoutAnimation()
select_contact_fastscroller.setViews(select_contact_list) {
select_contact_fastscroller.updateBubbleText(contacts[it].getBubbleText())
if (areSystemAnimationsEnabled) {
select_contact_list.scheduleLayoutAnimation()
}
letter_fastscroller.setupWithRecyclerView(select_contact_list, { position ->
try {
val name = contacts[position].getNameToDisplay()
val character = if (name.isNotEmpty()) name.substring(0, 1) else ""
FastScrollItemIndicator.Text(character.normalizeString().toUpperCase(Locale.getDefault()))
} catch (e: Exception) {
FastScrollItemIndicator.Text("")
}
})
}
}
}
@ -228,25 +239,35 @@ class SelectContactActivity : SimpleActivity() {
}
}
private fun setupPlaceholders() {
private fun setupViews() {
val adjustedPrimaryColor = getAdjustedPrimaryColor()
select_contact_placeholder.setTextColor(config.textColor)
select_contact_placeholder_2.setTextColor(getAdjustedPrimaryColor())
select_contact_placeholder_2.setTextColor(adjustedPrimaryColor)
select_contact_placeholder_2.underlineText()
select_contact_placeholder_2.setOnClickListener {
FilterContactSourcesDialog(this) {
initContacts()
}
}
letter_fastscroller?.textColor = config.textColor.getColorStateList()
letter_fastscroller?.pressedTextColor = adjustedPrimaryColor
letter_fastscroller_thumb?.fontSize = getTextSize()
letter_fastscroller_thumb?.textColor = adjustedPrimaryColor.getContrastColor()
letter_fastscroller_thumb?.thumbColor = adjustedPrimaryColor.getColorStateList()
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
}
private fun updatePlaceholderVisibility(contacts: ArrayList<Contact>) {
select_contact_list.beVisibleIf(contacts.isNotEmpty())
select_contact_placeholder_2.beVisibleIf(contacts.isEmpty())
select_contact_placeholder.beVisibleIf(contacts.isEmpty())
select_contact_placeholder.setText(when (specialMimeType) {
Email.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_emails
Phone.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_phone_numbers
else -> R.string.no_contacts_found
})
select_contact_placeholder.setText(
when (specialMimeType) {
Email.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_emails
Phone.CONTENT_ITEM_TYPE -> R.string.no_contacts_with_phone_numbers
else -> R.string.no_contacts_found
}
)
}
}

View File

@ -3,10 +3,7 @@ package com.simplemobiletools.contacts.pro.activities
import android.os.Bundle
import android.view.Menu
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.baseConfig
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.getFontSizeText
import com.simplemobiletools.commons.extensions.updateTextColors
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.contacts.pro.R
@ -44,6 +41,19 @@ class SettingsActivity : SimpleActivity() {
setupDefaultTab()
updateTextColors(settings_holder)
invalidateOptionsMenu()
arrayOf(settings_color_customization_label, settings_general_settings_label, settings_main_screen_label, settings_list_view_label).forEach {
it.setTextColor(getAdjustedPrimaryColor())
}
arrayOf(
settings_color_customization_holder,
settings_general_settings_holder,
settings_main_screen_holder,
settings_list_view_holder
).forEach {
it.background.applyColorFilter(baseConfig.backgroundColor.getContrastColor())
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
@ -64,7 +74,7 @@ class SettingsActivity : SimpleActivity() {
}
private fun setupManageShownTabs() {
settings_manage_tabs_holder.setOnClickListener {
settings_manage_shown_tabs_holder.setOnClickListener {
ManageVisibleTabsDialog(this)
}
}
@ -76,7 +86,8 @@ class SettingsActivity : SimpleActivity() {
RadioItem(TAB_CONTACTS, getString(R.string.contacts_tab)),
RadioItem(TAB_FAVORITES, getString(R.string.favorites_tab)),
RadioItem(TAB_GROUPS, getString(R.string.groups_tab)),
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) {
config.defaultTab = it as Int
@ -85,12 +96,14 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun getDefaultTabText() = getString(when (baseConfig.defaultTab) {
TAB_CONTACTS -> R.string.contacts_tab
TAB_FAVORITES -> R.string.favorites_tab
TAB_GROUPS -> R.string.groups_tab
else -> R.string.last_used_tab
})
private fun getDefaultTabText() = getString(
when (baseConfig.defaultTab) {
TAB_CONTACTS -> R.string.contacts_tab
TAB_FAVORITES -> R.string.favorites_tab
TAB_GROUPS -> R.string.groups_tab
else -> R.string.last_used_tab
}
)
private fun setupFontSize() {
settings_font_size.text = getFontSizeText()
@ -99,7 +112,8 @@ class SettingsActivity : SimpleActivity() {
RadioItem(FONT_SIZE_SMALL, getString(R.string.small)),
RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)),
RadioItem(FONT_SIZE_LARGE, getString(R.string.large)),
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) {
config.fontSize = it as Int
@ -111,6 +125,11 @@ class SettingsActivity : SimpleActivity() {
private fun setupUseEnglish() {
settings_use_english_holder.beVisibleIf(config.wasUseEnglishToggled || Locale.getDefault().language != "en")
settings_use_english.isChecked = config.useEnglish
if (settings_use_english_holder.isGone()) {
settings_font_size_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme)
}
settings_use_english_holder.setOnClickListener {
settings_use_english.toggle()
config.useEnglish = settings_use_english.isChecked
@ -143,10 +162,10 @@ class SettingsActivity : SimpleActivity() {
}
private fun setupStartNameWithSurname() {
settings_start_with_surname.isChecked = config.startNameWithSurname
settings_start_with_surname_holder.setOnClickListener {
settings_start_with_surname.toggle()
config.startNameWithSurname = settings_start_with_surname.isChecked
settings_start_name_with_surname.isChecked = config.startNameWithSurname
settings_start_name_with_surname_holder.setOnClickListener {
settings_start_name_with_surname.toggle()
config.startNameWithSurname = settings_start_name_with_surname.isChecked
}
}
@ -172,7 +191,8 @@ class SettingsActivity : SimpleActivity() {
val items = arrayListOf(
RadioItem(ON_CLICK_CALL_CONTACT, getString(R.string.call_contact)),
RadioItem(ON_CLICK_VIEW_CONTACT, getString(R.string.view_contact)),
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) {
config.onContactClick = it as Int
@ -181,11 +201,13 @@ class SettingsActivity : SimpleActivity() {
}
}
private fun getOnContactClickText() = getString(when (config.onContactClick) {
ON_CLICK_CALL_CONTACT -> R.string.call_contact
ON_CLICK_VIEW_CONTACT -> R.string.view_contact
else -> R.string.edit_contact
})
private fun getOnContactClickText() = getString(
when (config.onContactClick) {
ON_CLICK_CALL_CONTACT -> R.string.call_contact
ON_CLICK_VIEW_CONTACT -> R.string.view_contact
else -> R.string.edit_contact
}
)
private fun setupShowCallConfirmation() {
settings_show_call_confirmation.isChecked = config.showCallConfirmation

View File

@ -66,10 +66,20 @@ open class SimpleActivity : BaseSimpleActivity() {
protected fun getTabIcon(position: Int): Drawable {
val drawableId = when (position) {
LOCATION_CONTACTS_TAB -> R.drawable.ic_person_vector
LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on_vector
LOCATION_FAVORITES_TAB -> R.drawable.ic_star_vector
else -> R.drawable.ic_people_vector
}
return resources.getColoredDrawableWithColor(drawableId, config.textColor)
}
protected fun getTabContentDescription(position: Int): String {
val stringId = when (position) {
LOCATION_CONTACTS_TAB -> R.string.contacts_tab
LOCATION_FAVORITES_TAB -> R.string.favorites_tab
else -> R.string.groups_tab
}
return resources.getString(stringId)
}
}

View File

@ -757,7 +757,7 @@ class ViewContactActivity : ContactActivity() {
}
}
private fun getStarDrawable(on: Boolean) = resources.getDrawable(if (on) R.drawable.ic_star_on_vector else R.drawable.ic_star_off_vector)
private fun getStarDrawable(on: Boolean) = resources.getDrawable(if (on) R.drawable.ic_star_vector else R.drawable.ic_star_outline_vector)
private fun hideBigContactPhoto() {
contact_photo_big.animate().alpha(0f).withEndAction { contact_photo_big.beGone() }.start()

View File

@ -19,13 +19,13 @@ import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.bumptech.glide.signature.ObjectKey
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
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.*
import com.simplemobiletools.commons.models.RadioItem
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
@ -38,10 +38,11 @@ import com.simplemobiletools.contacts.pro.interfaces.RemoveFromGroupListener
import com.simplemobiletools.contacts.pro.models.Contact
import java.util.*
class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Contact>, private val refreshListener: RefreshContactsListener?,
private val location: Int, private val removeListener: RemoveFromGroupListener?, recyclerView: MyRecyclerView,
fastScroller: FastScroller?, highlightText: String = "", itemClick: (Any) -> Unit) :
MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
class ContactsAdapter(
activity: SimpleActivity, var contactItems: ArrayList<Contact>, private val refreshListener: RefreshContactsListener?,
private val location: Int, private val removeListener: RemoveFromGroupListener?, recyclerView: MyRecyclerView,
highlightText: String = "", itemClick: (Any) -> Unit
) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
private val NEW_GROUP_ID = -1
private var config = activity.config
@ -66,10 +67,13 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
findItem(R.id.cab_remove).isVisible = location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_add_to_favorites).isVisible = location == LOCATION_CONTACTS_TAB
findItem(R.id.cab_add_to_group).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB
findItem(R.id.cab_send_sms_to_contacts).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_send_email_to_contacts).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_send_sms_to_contacts).isVisible =
location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_send_email_to_contacts).isVisible =
location == LOCATION_CONTACTS_TAB || location == LOCATION_FAVORITES_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_delete).isVisible = location == LOCATION_CONTACTS_TAB || location == LOCATION_GROUP_CONTACTS
findItem(R.id.cab_create_shortcut).isVisible = isOreoPlus() && isOneItemSelected() && (location == LOCATION_FAVORITES_TAB || location == LOCATION_CONTACTS_TAB)
findItem(R.id.cab_create_shortcut).isVisible =
isOreoPlus() && isOneItemSelected() && (location == LOCATION_FAVORITES_TAB || location == LOCATION_CONTACTS_TAB)
if (location == LOCATION_GROUP_CONTACTS) {
findItem(R.id.cab_remove).title = activity.getString(R.string.remove_from_group)
@ -133,7 +137,6 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
textToHighlight = highlightText
notifyDataSetChanged()
}
fastScroller?.measureRecyclerView()
}
private fun editContact() {
@ -170,7 +173,8 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
ensureBackgroundThread {
contactsToRemove.forEach {
val contactToRemove = it
val duplicates = allContacts.filter { it.id != contactToRemove.id && it.getHashToCompare() == contactToRemove.getHashToCompare() }.toMutableList() as ArrayList<Contact>
val duplicates = allContacts.filter { it.id != contactToRemove.id && it.getHashToCompare() == contactToRemove.getHashToCompare() }
.toMutableList() as ArrayList<Contact>
duplicates.add(contactToRemove)
ContactsHelper(activity).deleteContacts(duplicates)
}
@ -392,4 +396,6 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
}
}
}
override fun onChange(position: Int) = contactItems.getOrNull(position)?.getBubbleText() ?: ""
}

View File

@ -4,6 +4,7 @@ import android.util.TypedValue
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.beVisibleIf
@ -12,7 +13,6 @@ import com.simplemobiletools.commons.extensions.highlightTextPart
import com.simplemobiletools.commons.helpers.SimpleContactsHelper
import com.simplemobiletools.commons.helpers.TAB_GROUPS
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
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
@ -25,8 +25,10 @@ import com.simplemobiletools.contacts.pro.models.Group
import kotlinx.android.synthetic.main.item_group.view.*
import java.util.*
class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList<Group>, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView,
fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
class GroupsAdapter(
activity: SimpleActivity, var groups: ArrayList<Group>, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView,
itemClick: (Any) -> Unit
) : MyRecyclerViewAdapter(activity, recyclerView, null, itemClick), RecyclerViewFastScroller.OnPopupTextUpdate {
private var textToHighlight = ""
var showContactThumbnails = activity.config.showContactThumbnails
@ -172,4 +174,6 @@ class GroupsAdapter(activity: SimpleActivity, var groups: ArrayList<Group>, val
}
}
}
override fun onChange(position: Int) = groups.getOrNull(position)?.getBubbleText() ?: ""
}

View File

@ -12,7 +12,6 @@ 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
@ -21,9 +20,11 @@ import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.item_add_favorite_with_number.view.*
import java.util.*
class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayList<Contact>, private val selectedContacts: ArrayList<Contact>, private val allowPickMultiple: Boolean,
recyclerView: MyRecyclerView, val fastScroller: FastScroller, private val itemClick: ((Contact) -> Unit)? = null) :
RecyclerView.Adapter<SelectContactsAdapter.ViewHolder>() {
class SelectContactsAdapter(
val activity: SimpleActivity, 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>() {
private val itemViews = SparseArray<View>()
private val selectedPositions = HashSet<Int>()
private val config = activity.config
@ -87,7 +88,6 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis
textToHighlight = highlightText
notifyDataSetChanged()
}
fastScroller.measureRecyclerView()
}
override fun onViewRecycled(holder: ViewHolder) {
@ -124,7 +124,8 @@ class SelectContactsAdapter(val activity: SimpleActivity, var contacts: ArrayLis
}
val numberText = phoneNumberToUse?.value ?: ""
contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true)
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)
}

View File

@ -36,6 +36,7 @@ class RenameGroupDialog(val activity: BaseSimpleActivity, val group: Group, val
}
group.title = newTitle
group.contactsCount = 0
ensureBackgroundThread {
if (group.isPrivateSecretGroup()) {
activity.groupsDB.insertOrUpdate(group)

View File

@ -1,17 +1,23 @@
package com.simplemobiletools.contacts.pro.dialogs
import androidx.appcompat.app.AlertDialog
import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
import com.simplemobiletools.contacts.pro.adapters.SelectContactsAdapter
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
import com.simplemobiletools.contacts.pro.models.Contact
import kotlinx.android.synthetic.main.layout_select_contact.view.*
import java.util.*
import kotlin.collections.ArrayList
class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayList<Contact>, val allowSelectMultiple: Boolean, val showOnlyContactsWithNumber: Boolean,
selectContacts: ArrayList<Contact>? = null, val callback: (addedContacts: ArrayList<Contact>, removedContacts: ArrayList<Contact>) -> Unit) {
class SelectContactsDialog(
val activity: SimpleActivity, initialContacts: ArrayList<Contact>, val allowSelectMultiple: Boolean, val showOnlyContactsWithNumber: Boolean,
selectContacts: ArrayList<Contact>? = null, val callback: (addedContacts: ArrayList<Contact>, removedContacts: ArrayList<Contact>) -> Unit
) {
private var dialog: AlertDialog? = null
private var view = activity.layoutInflater.inflate(R.layout.layout_select_contact, null)
private var initiallySelectedContacts = ArrayList<Contact>()
@ -31,32 +37,33 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL
initiallySelectedContacts = selectContacts
}
activity.runOnUiThread {
// if selecting multiple contacts is disabled, react on first contact click and dismiss the dialog
val contactClickCallback: ((Contact) -> Unit)? = if (allowSelectMultiple) null else { contact ->
callback(arrayListOf(contact), arrayListOf())
dialog!!.dismiss()
}
// if selecting multiple contacts is disabled, react on first contact click and dismiss the dialog
val contactClickCallback: ((Contact) -> Unit)? = if (allowSelectMultiple) null else { contact ->
callback(arrayListOf(contact), arrayListOf())
dialog!!.dismiss()
}
view.apply {
select_contact_list.adapter = SelectContactsAdapter(activity, allContacts, initiallySelectedContacts, allowSelectMultiple,
select_contact_list, select_contact_fastscroller, contactClickCallback)
view.apply {
select_contact_list.adapter = SelectContactsAdapter(
activity, allContacts, initiallySelectedContacts, allowSelectMultiple,
select_contact_list, contactClickCallback
)
if (context.areSystemAnimationsEnabled) {
select_contact_list.scheduleLayoutAnimation()
select_contact_fastscroller.setViews(select_contact_list) {
select_contact_fastscroller.updateBubbleText(allContacts[it].getBubbleText())
}
}
}
val builder = AlertDialog.Builder(activity)
if (allowSelectMultiple) {
builder.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
}
builder.setNegativeButton(R.string.cancel, null)
setupFastscroller(allContacts)
dialog = builder.create().apply {
activity.setupDialogStuff(view, this)
}
val builder = AlertDialog.Builder(activity)
if (allowSelectMultiple) {
builder.setPositiveButton(R.string.ok) { dialog, which -> dialogConfirmed() }
}
builder.setNegativeButton(R.string.cancel, null)
dialog = builder.create().apply {
activity.setupDialogStuff(view, this)
}
}
@ -70,4 +77,26 @@ class SelectContactsDialog(val activity: SimpleActivity, initialContacts: ArrayL
callback(newlySelectedContacts, unselectedContacts)
}
}
private fun setupFastscroller(allContacts: ArrayList<Contact>) {
val adjustedPrimaryColor = activity.getAdjustedPrimaryColor()
view.apply {
letter_fastscroller?.textColor = context.config.textColor.getColorStateList()
letter_fastscroller?.pressedTextColor = adjustedPrimaryColor
letter_fastscroller_thumb?.fontSize = context.getTextSize()
letter_fastscroller_thumb?.textColor = adjustedPrimaryColor.getContrastColor()
letter_fastscroller_thumb?.thumbColor = adjustedPrimaryColor.getColorStateList()
letter_fastscroller_thumb.setupWithFastScroller(letter_fastscroller)
}
view.letter_fastscroller.setupWithRecyclerView(view.select_contact_list, { position ->
try {
val name = allContacts[position].getNameToDisplay()
val character = if (name.isNotEmpty()) name.substring(0, 1) else ""
FastScrollItemIndicator.Text(character.normalizeString().toUpperCase(Locale.getDefault()))
} catch (e: Exception) {
FastScrollItemIndicator.Text("")
}
})
}
}

View File

@ -1,9 +1,10 @@
package com.simplemobiletools.contacts.pro.extensions
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.pm.LauncherApps
import android.database.Cursor
import android.graphics.*
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Handler
@ -26,6 +27,7 @@ import com.simplemobiletools.contacts.pro.models.Organization
import com.simplemobiletools.contacts.pro.models.SocialAction
import java.io.File
val Context.config: Config get() = Config.newInstance(applicationContext)
val Context.contactsDB: ContactsDao get() = ContactsDatabase.getInstance(applicationContext).ContactsDao()
@ -35,8 +37,10 @@ val Context.groupsDB: GroupsDao get() = ContactsDatabase.getInstance(application
fun Context.getEmptyContact(): Contact {
val originalContactSource = if (hasContactPermissions()) config.lastUsedContactSource else SMT_PRIVATE
val organization = Organization("", "")
return Contact(0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "",
null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null)
return Contact(
0, "", "", "", "", "", "", "", ArrayList(), ArrayList(), ArrayList(), ArrayList(), originalContactSource, 0, 0, "",
null, "", ArrayList(), organization, ArrayList(), ArrayList(), DEFAULT_MIMETYPE, null
)
}
fun Context.viewContact(contact: Contact) {
@ -355,22 +359,15 @@ fun Context.getSocialActions(id: Int): ArrayList<SocialAction> {
return socialActions
}
fun Context.getPackageDrawable(packageName: String): Drawable? {
var drawable: Drawable? = null
try {
// try getting the properly colored launcher icons
val launcher = getSystemService(Context.LAUNCHER_APPS_SERVICE) as LauncherApps
val activityList = launcher.getActivityList(packageName, android.os.Process.myUserHandle())[0]
drawable = activityList.getBadgedIcon(0)
} catch (ignored: Exception) {
}
if (drawable == null) {
try {
drawable = packageManager.getApplicationIcon(packageName)
} catch (ignored: Exception) {
}
}
return drawable
@SuppressLint("UseCompatLoadingForDrawables")
fun Context.getPackageDrawable(packageName: String): Drawable {
return resources.getDrawable(
when (packageName) {
TELEGRAM_PACKAGE -> R.drawable.ic_telegram_vector
SIGNAL_PACKAGE -> R.drawable.ic_signal_vector
WHATSAPP_PACKAGE -> R.drawable.ic_whatsapp_vector
VIBER_PACKAGE -> R.drawable.ic_viber_vector
else -> R.drawable.ic_threema_vector
}, theme
)
}

View File

@ -84,8 +84,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
}
context.updateTextColors(fragment_wrapper.parent as ViewGroup)
fragment_fastscroller?.updatePrimaryColor()
fragment_fastscroller?.updateBubblePrimaryColor()
fragment_fastscroller?.updateColors(adjustedPrimaryColor, adjustedPrimaryColor.getContrastColor())
fragment_placeholder_2?.setTextColor(adjustedPrimaryColor)
letter_fastscroller?.textColor = textColor.getColorStateList()
@ -165,11 +164,11 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fragment_placeholder_2.beVisibleIf(storedGroups.isEmpty())
fragment_placeholder.beVisibleIf(storedGroups.isEmpty())
fragment_list.beVisibleIf(storedGroups.isNotEmpty())
fragment_fastscroller.beVisibleIf(storedGroups.isNotEmpty())
val currAdapter = fragment_list.adapter
if (currAdapter == null) {
GroupsAdapter(activity as SimpleActivity, storedGroups, activity as RefreshContactsListener, fragment_list, fragment_fastscroller) {
GroupsAdapter(activity as SimpleActivity, storedGroups, activity as RefreshContactsListener, fragment_list) {
Intent(activity, GroupContactsActivity::class.java).apply {
putExtra(GROUP, it as Group)
activity!!.startActivity(this)
@ -178,11 +177,8 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fragment_list.adapter = this
}
fragment_list.scheduleLayoutAnimation()
fragment_fastscroller.setScrollToY(0)
fragment_fastscroller.setViews(fragment_list) {
val item = (fragment_list.adapter as GroupsAdapter).groups.getOrNull(it)
fragment_fastscroller.updateBubbleText(item?.getBubbleText() ?: "")
if (context.areSystemAnimationsEnabled) {
fragment_list.scheduleLayoutAnimation()
}
} else {
(currAdapter as GroupsAdapter).apply {
@ -206,12 +202,15 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
else -> LOCATION_CONTACTS_TAB
}
ContactsAdapter(activity as SimpleActivity, contacts, activity as RefreshContactsListener, location, null, fragment_list, null) {
ContactsAdapter(activity as SimpleActivity, contacts, activity as RefreshContactsListener, location, null, fragment_list) {
(activity as RefreshContactsListener).contactClicked(it as Contact)
}.apply {
fragment_list.adapter = this
}
fragment_list.scheduleLayoutAnimation()
if (context.areSystemAnimationsEnabled) {
fragment_list.scheduleLayoutAnimation()
}
} else {
(currAdapter as ContactsAdapter).apply {
startNameWithSurname = config.startNameWithSurname
@ -237,14 +236,15 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
}
private fun setupLetterFastscroller(contacts: ArrayList<Contact>) {
val sorting = context.config.sorting
letter_fastscroller.setupWithRecyclerView(fragment_list, { position ->
try {
val contact = contacts[position]
var name = when {
contact.isABusinessContact() -> contact.getFullCompany()
context.config.sorting and SORT_BY_SURNAME != 0 && contact.surname.isNotEmpty() -> contact.surname
context.config.sorting and SORT_BY_MIDDLE_NAME != 0 && contact.middleName.isNotEmpty() -> contact.middleName
context.config.sorting and SORT_BY_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName
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_FIRST_NAME != 0 && contact.firstName.isNotEmpty() -> contact.firstName
context.config.startNameWithSurname -> contact.surname
else -> contact.firstName
}

View File

@ -28,7 +28,12 @@ class ContactsHelper(val context: Context) {
private val BATCH_SIZE = 50
private var displayContactSources = ArrayList<String>()
fun getContacts(getAll: Boolean = false, gettingDuplicates: Boolean = false, ignoredContactSources: HashSet<String> = HashSet(), callback: (ArrayList<Contact>) -> Unit) {
fun getContacts(
getAll: Boolean = false,
gettingDuplicates: Boolean = false,
ignoredContactSources: HashSet<String> = HashSet(),
callback: (ArrayList<Contact>) -> Unit
) {
ensureBackgroundThread {
val contacts = SparseArray<Contact>()
displayContactSources = context.getVisibleContactSources()
@ -187,8 +192,10 @@ class ContactsHelper(val context: Context) {
val organization = Organization("", "")
val websites = ArrayList<String>()
val ims = ArrayList<IM>()
val contact = Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses,
events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone)
val contact = Contact(
id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, numbers, emails, addresses,
events, accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone
)
contacts.put(id, contact)
}
@ -733,8 +740,10 @@ class ContactsHelper(val context: Context) {
val organization = getOrganizations(id)[id] ?: Organization("", "")
val websites = getWebsites(id)[id] ?: ArrayList()
val ims = getIMs(id)[id] ?: ArrayList()
return Contact(id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, number, emails, addresses, events,
accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone)
return Contact(
id, prefix, firstName, middleName, surname, suffix, nickname, photoUri, number, emails, addresses, events,
accountName, starred, contactId, thumbnailUri, null, notes, groups, organization, websites, ims, mimetype, ringtone
)
}
}
@ -1499,7 +1508,8 @@ class ContactsHelper(val context: Context) {
fun getDuplicatesOfContact(contact: Contact, addOriginal: Boolean, callback: (ArrayList<Contact>) -> Unit) {
ensureBackgroundThread {
getContacts(true, true) { contacts ->
val duplicates = contacts.filter { it.id != contact.id && it.getHashToCompare() == contact.getHashToCompare() }.toMutableList() as ArrayList<Contact>
val duplicates =
contacts.filter { it.id != contact.id && it.getHashToCompare() == contact.getHashToCompare() }.toMutableList() as ArrayList<Contact>
if (addOriginal) {
duplicates.add(contact)
}

View File

@ -1,9 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3,5v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2L5,3c-1.11,0 -2,0.9 -2,2zM15,9c0,1.66 -1.34,3 -3,3s-3,-1.34 -3,-3 1.34,-3 3,-3 3,1.34 3,3zM6,17c0,-2 4,-3.1 6,-3.1s6,1.1 6,3.1v1L6,18v-1z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:fillColor="#FFFFFFFF" android:pathData="M3 5v14c0 1.1 0.89 2 2 2h14c1.1 0 2-0.9 2-2V5c0-1.1-0.9-2-2-2H5C3.89 3 3 3.9 3 5zm12 4c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3zm-9 8c0-2 4-3.1 6-3.1s6 1.1 6 3.1v1H6v-1z"/>
</vector>

View File

@ -1,9 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M12,6c1.11,0 2,-0.9 2,-2 0,-0.38 -0.1,-0.73 -0.29,-1.03L12,0l-1.71,2.97c-0.19,0.3 -0.29,0.65 -0.29,1.03 0,1.1 0.9,2 2,2zM16.6,15.99l-1.07,-1.07 -1.08,1.07c-1.3,1.3 -3.58,1.31 -4.89,0l-1.07,-1.07 -1.09,1.07C6.75,16.64 5.88,17 4.96,17c-0.73,0 -1.4,-0.23 -1.96,-0.61L3,21c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1v-4.61c-0.56,0.38 -1.23,0.61 -1.96,0.61 -0.92,0 -1.79,-0.36 -2.44,-1.01zM18,9h-5L13,7h-2v2L6,9c-1.66,0 -3,1.34 -3,3v1.54c0,1.08 0.88,1.96 1.96,1.96 0.52,0 1.02,-0.2 1.38,-0.57l2.14,-2.13 2.13,2.13c0.74,0.74 2.03,0.74 2.77,0l2.14,-2.13 2.13,2.13c0.37,0.37 0.86,0.57 1.38,0.57 1.08,0 1.96,-0.88 1.96,-1.96L20.99,12C21,10.34 19.66,9 18,9z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:fillColor="#FFFFFFFF" android:pathData="M12 6c1.11 0 2-0.9 2-2 0-0.38-0.1-0.73-0.29-1.03L12 0l-1.71 2.97C10.1 3.27 10 3.62 10 4c0 1.1 0.9 2 2 2zm4.6 9.99l-1.07-1.07-1.08 1.07c-1.3 1.3-3.58 1.31-4.89 0l-1.07-1.07-1.09 1.07C6.75 16.64 5.88 17 4.96 17c-0.73 0-1.4-0.23-1.96-0.61V21c0 0.55 0.45 1 1 1h16c0.55 0 1-0.45 1-1v-4.61C20.44 16.77 19.77 17 19.04 17c-0.92 0-1.79-0.36-2.44-1.01zM18 9h-5V7h-2v2H6c-1.66 0-3 1.34-3 3v1.54c0 1.08 0.88 1.96 1.96 1.96 0.52 0 1.02-0.2 1.38-0.57l2.14-2.13 2.13 2.13c0.74 0.74 2.03 0.74 2.77 0l2.14-2.13 2.13 2.13c0.37 0.37 0.86 0.57 1.38 0.57 1.08 0 1.96-0.88 1.96-1.96V12C21 10.34 19.66 9 18 9z"/>
</vector>

View File

@ -1,9 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="96dp"
android:height="96dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M8,10L5,10L5,7L3,7v3L0,10v2h3v3h2v-3h3v-2zM18,11c1.66,0 2.99,-1.34 2.99,-3S19.66,5 18,5c-0.32,0 -0.63,0.05 -0.91,0.14 0.57,0.81 0.9,1.79 0.9,2.86s-0.34,2.04 -0.9,2.86c0.28,0.09 0.59,0.14 0.91,0.14zM13,11c1.66,0 2.99,-1.34 2.99,-3S14.66,5 13,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM19.62,13.16c0.83,0.73 1.38,1.66 1.38,2.84v2h3v-2c0,-1.54 -2.37,-2.49 -4.38,-2.84zM13,13c-2,0 -6,1 -6,3v2h12v-2c0,-2 -4,-3 -6,-3z" />
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="96dp" android:height="96dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:fillColor="#FFFFFF" android:pathData="M8 10H5V7H3v3H0v2h3v3h2v-3h3v-2zm10 1c1.66 0 2.99-1.34 2.99-3S19.66 5 18 5c-0.32 0-0.63 0.05-0.91 0.14 0.57 0.81 0.9 1.79 0.9 2.86s-0.34 2.04-0.9 2.86C17.37 10.95 17.68 11 18 11zm-5 0c1.66 0 2.99-1.34 2.99-3S14.66 5 13 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm6.62 2.16C20.45 13.89 21 14.82 21 16v2h3v-2c0-1.54-2.37-2.49-4.38-2.84zM13 13c-2 0-6 1-6 3v2h12v-2c0-2-4-3-6-3z"/>
</vector>

View File

@ -1,9 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M17 7h-3c-0.55 0-1 0.45-1 1s0.45 1 1 1h3c1.65 0 3 1.35 3 3s-1.35 3-3 3h-3c-0.55 0-1 0.45-1 1s0.45 1 1 1h3c2.76 0 5-2.24 5-5s-2.24-5-5-5zm-9 5c0 0.55 0.45 1 1 1h6c0.55 0 1-0.45 1-1s-0.45-1-1-1H9c-0.55 0-1 0.45-1 1zm2 3H7c-1.65 0-3-1.35-3-3s1.35-3 3-3h3c0.55 0 1-0.45 1-1s-0.45-1-1-1H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h3c0.55 0 1-0.45 1-1s-0.45-1-1-1z" android:fillColor="#FFFFFFFF"/>
</vector>

View File

@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="1024" android:viewportWidth="1024" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#3a76f0" android:pathData="M0 0v1024h1024V0H0z"/>
<path android:fillColor="#ffffff" android:pathData="M442.08 229.27l6.54 26.48a264.44 264.44 0 0 0-73.14 30.28l-13.99-23.41a287.61 287.61 0 0 1 80.59-33.34zm139.84 0l-6.54 26.48a264.44 264.44 0 0 1 73.14 30.28l14.15-23.41a289.68 289.68 0 0 0-80.75-33.35zm-319.3 132.14a289.18 289.18 0 0 0-33.34 80.67l26.48 6.54a264.44 264.44 0 0 1 30.28-73.14zM248.05 512a263.53 263.53 0 0 1 2.98-39.55l-26.97-4.14a291.25 291.25 0 0 0 0 87.29l26.97-4.05a264.36 264.36 0 0 1-2.98-39.55zm414.46 249.3l-13.99-23.33a262.95 262.95 0 0 1-73.06 30.28l6.54 26.48a289.84 289.84 0 0 0 80.51-33.43zM775.95 512a264.36 264.36 0 0 1-2.98 39.55l26.97 4.05a291.25 291.25 0 0 0 0-87.29l-26.97 4.14a263.53 263.53 0 0 1 2.98 39.55zm18.78 69.83l-26.48-6.53a263.95 263.95 0 0 1-30.28 73.23l23.42 14.07a288.68 288.68 0 0 0 33.34-80.77zM551.55 772.97a264.03 264.03 0 0 1-79.1 0l-4.05 26.97a290.67 290.67 0 0 0 87.21 0zm172.93-104.42a263.2 263.2 0 0 1-55.93 55.85l16.22 22.01a293.81 293.81 0 0 0 61.73-61.48zm-55.93-369.03a263.61 263.61 0 0 1 55.93 55.93l22.01-16.38a293.4 293.4 0 0 0-61.56-61.56zm-369.03 55.93a263.61 263.61 0 0 1 55.93-55.93l-16.38-22.01a293.4 293.4 0 0 0-61.56 61.56zm461.86 5.96l-23.41 14.07a262.95 262.95 0 0 1 30.28 73.06l26.48-6.54a288.68 288.68 0 0 0-33.35-80.59zM472.45 251.03a264.03 264.03 0 0 1 79.1 0l4.05-26.97a290.67 290.67 0 0 0-87.21 0zM313.5 753.69l-56.34 13.07 13.15-56.35-26.56-6.2-13.15 56.35a27.3 27.3 0 0 0 20.35 32.85 28.55 28.55 0 0 0 12.41 0l56.35-12.99zm-64.12-73.81l26.64 6.13 9.1-39.06a261.63 261.63 0 0 1-29.37-71.65l-26.48 6.54a292.33 292.33 0 0 0 26.81 69.25zm127.42 59.08l-39.05 9.1 6.2 26.64 28.71-6.7a288.77 288.77 0 0 0 69.25 26.81l6.54-26.48a262.04 262.04 0 0 1-71.41-29.54zM512 275.36c-130.73 0.08-236.56 106.07-236.56 236.72a237.22 237.22 0 0 0 36.32 125.77l-22.75 97.14 97.06-22.75c110.62 69.58 256.74 36.4 326.33-74.14 69.59-110.54 36.49-256.67-74.05-326.33A237.22 237.22 0 0 0 512 275.36" android:strokeWidth="0.82741475"/>
</vector>

View File

@ -0,0 +1,4 @@
<vector android:height="24dp" android:viewportHeight="455.731" android:viewportWidth="455.731" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#36a6de" android:pathData="M0 0h455.731v455.731H0z"/>
<path android:fillColor="#ffffff" android:pathData="M107.812 223.206l148.606-61.208c14.664-6.376 64.396-26.779 64.396-26.779s22.953-8.926 21.04 12.752c-0.638 8.926-5.738 40.168-10.839 74.009l-15.94 100.15s-1.275 14.664-12.114 17.215c-10.839 2.55-28.691-8.926-31.879-11.477-2.55-1.913-47.819-30.604-64.396-44.631-4.463-3.826-9.564-11.477 0.638-20.403 22.953-21.04 50.369-47.181 66.946-63.758 7.651-7.651 15.302-25.503-16.577-3.826l-89.948 60.472s-10.201 6.376-29.329 0.638-41.443-13.389-41.443-13.389-15.302-9.564 10.839-19.765z" android:strokeWidth="0.49044925"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="512" android:viewportWidth="512" android:width="24dp" xmlns:aapt="http://schemas.android.com/aapt" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#3b3b3b" android:pathData="M0 0h512v512H0z"/>
<path android:fillColor="#ffffff" android:pathData="M193.916 316.176l-70.308 17.36 14.756-59.892c-14.756-19.096-23.436-43.4-23.436-68.572 0-68.572 63.364-124.123 141.483-124.123s141.483 55.552 141.483 124.123c0 68.572-63.364 124.123-141.483 124.123-21.7 0-43.4-4.34-61.628-12.152zm21.7-122.388h-1.736c-3.472 0-6.076 2.604-5.208 6.076v56.42c0 3.472 2.604 6.076 6.076 6.076h83.327c3.472 0 6.076-2.604 6.076-6.076v-56.42c0-3.472-2.604-6.076-6.076-6.076h-1.736v-15.624c0-21.7-18.228-39.928-39.928-39.928-21.7 0-39.928 18.228-39.928 39.928v15.624zm64.232 0h-47.74v-15.624c0-13.02 10.416-24.304 24.304-24.304 13.02 0 24.304 10.416 24.304 24.304v15.624z" android:strokeWidth="0.86799389"/>
<path android:fillColor="#3fe669" android:pathData="M144.951 384.747a24.304 24.304 0 1 1 48.608 0 24.304 24.304 0 1 1-48.608 0m86.799 0a24.304 24.304 0 1 1 48.608 0 24.304 24.304 0 1 1-48.608 0m86.8 0a24.304 24.304 0 1 1 48.608 0 24.304 24.304 0 1 1-48.608 0" android:strokeWidth="0.86799389"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector android:height="24dp" android:viewportHeight="512" android:viewportWidth="512" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#7b519d" android:pathData="M0 0h512v512H0z"/>
<path android:fillColor="#ffffff" android:pathData="M407.294 186.94l-0.092-0.369c-7.477-30.229-41.188-62.664-72.145-69.412l-0.349-0.072c-50.073-9.552-100.844-9.552-150.905 0l-0.36 0.072c-30.947 6.748-64.658 39.186-72.145 69.412l-0.083 0.369c-9.244 42.214-9.244 85.026 0 127.24l0.083 0.369c7.169 28.938 38.368 59.885 68.171 68.395v33.743c0 12.214 14.883 18.212 23.346 9.398l34.188-35.537c7.416 0.414 14.835 0.646 22.252 0.646 25.205 0 50.421-2.384 75.452-7.159l0.349-0.072c30.958-6.748 64.668-39.186 72.145-69.412l0.092-0.369c9.244-42.215 9.244-85.025 0.001-127.241zm-27.056 121.12c-4.992 19.721-30.587 44.238-50.924 48.768-26.624 5.063-53.459 7.227-80.267 6.484-0.533-0.016-1.046 0.192-1.417 0.575l-24.962 25.625-26.55 27.25c-1.941 2.025-5.352 0.646-5.352-2.147v-55.899c0-0.924-0.659-1.707-1.566-1.887-0.005-0.002-0.011-0.002-0.016-0.003-20.337-4.53-45.923-29.047-50.924-48.768-8.32-38.157-8.32-76.839 0-114.996 5.001-19.721 30.587-44.238 50.924-48.768 46.498-8.844 93.643-8.844 140.131 0 20.347 4.53 45.932 29.047 50.924 48.768 8.329 38.158 8.329 76.84-0.001 114.998z" android:strokeWidth="1.09314275"/>
<path android:fillColor="#ffffff" android:pathData="M303.493 333.862c-3.126-0.95-6.105-1.587-8.874-2.734-28.674-11.897-55.063-27.244-75.965-50.77-11.887-13.378-21.191-28.482-29.055-44.466-3.73-7.58-6.873-15.456-10.077-23.283-2.921-7.136 1.382-14.508 5.912-19.886 4.251-5.047 9.722-8.908 15.647-11.756 4.624-2.221 9.185-0.94 12.562 2.979 7.3 8.474 14.008 17.381 19.436 27.204 3.34 6.042 2.423 13.427-3.629 17.538-1.471 0.999-2.812 2.173-4.181 3.301-1.202 0.989-2.333 1.988-3.157 3.328-1.505 2.45-1.577 5.341-0.609 8.005 7.463 20.508 20.042 36.457 40.686 45.048 3.303 1.374 6.62 2.973 10.426 2.531 6.373-0.744 8.437-7.736 12.903-11.388 4.365-3.569 9.944-3.616 14.646-0.641 4.704 2.978 9.262 6.172 13.794 9.402 4.449 3.17 8.877 6.269 12.98 9.884 3.946 3.475 5.305 8.034 3.083 12.748-4.067 8.637-9.986 15.82-18.522 20.407-2.41 1.292-5.29 1.711-8.007 2.548-3.126-0.95 2.718-0.837 0 0zm-44.162-162.77c37.505 1.052 68.31 25.941 74.912 63.021 1.125 6.318 1.525 12.777 2.026 19.19 0.211 2.697-1.317 5.259-4.227 5.295-3.006 0.037-4.358-2.48-4.555-5.175-0.386-5.337-0.654-10.699-1.389-15.989-3.882-27.94-26.16-51.054-53.97-56.014-4.186-0.747-8.466-0.942-12.707-1.387-2.679-0.281-6.188-0.442-6.782-3.775-0.497-2.793 1.859-5.016 4.519-5.16 0.72-0.043 1.447-0.011 2.173-0.005 37.507 1.052-0.726-0.002 0 0z" android:strokeWidth="1.09314275"/>
<path android:fillColor="#ffffff" android:pathData="M316.328 244.981c-0.063 0.469-0.094 1.57-0.369 2.606-0.995 3.765-6.705 4.236-8.018 0.437-0.39-1.127-0.448-2.41-0.45-3.624-0.011-7.943-1.739-15.879-5.746-22.791-4.118-7.104-10.41-13.074-17.788-16.689-4.462-2.184-9.286-3.543-14.177-4.351-2.137-0.354-4.297-0.567-6.445-0.867-2.603-0.362-3.993-2.02-3.869-4.585 0.115-2.403 1.871-4.133 4.491-3.983 8.606 0.487 16.921 2.35 24.574 6.401 15.56 8.241 24.449 21.247 27.044 38.616 0.117 0.788 0.305 1.566 0.365 2.356 0.146 1.948 0.239 3.899 0.388 6.472-0.063 0.467-0.149-2.573 0 0z" android:strokeWidth="1.09314275"/>
<path android:fillColor="#ffffff" android:pathData="M293.001 244.072c-3.137 0.057-4.816-1.681-5.141-4.556-0.224-2.005-0.404-4.038-0.882-5.99-0.942-3.845-2.985-7.406-6.219-9.762-1.526-1.112-3.256-1.922-5.068-2.446-2.301-0.666-4.693-0.482-6.987-1.044-2.493-0.611-3.873-2.631-3.481-4.969 0.357-2.129 2.427-3.791 4.754-3.622 14.541 1.049 24.933 8.567 26.417 25.686 0.106 1.208 0.228 2.484-0.037 3.641-0.461 1.975-1.926 2.967-3.354 3.063-3.138 0.056 1.428-0.096 0 0zm10.492 89.79c2.718-0.837-3.126-0.95 0 0z" android:strokeWidth="1.09314275"/>
<path android:fillColor="#ffffff" android:pathData="M259.427 171.097c-0.032 0-0.062-0.003-0.094-0.003-0.031-0.002 0.009 0 0.094 0.003zm-0.095-0.005c0.032 0 0.062 0.003 0.094 0.003 2.081 0.074 35.934 1.007-0.094-0.003zm56.996 73.889c-0.149-2.573-0.062 0.467 0 0zm-23.327-0.909c0.049-0.003 0.096-0.028 0.143-0.034-0.132 0-0.336 0.003-0.544 0.011 0.136 0.003 0.259 0.024 0.401 0.023z"/>
<path android:fillColor="#ffffff" android:pathData="M293.001 244.072c-0.141 0.002-0.266-0.019-0.401-0.023-0.679 0.019-1.38 0.055 0.401 0.023zm0.143-0.033c-0.049 0.005-0.096 0.031-0.143 0.034 0.367-0.025 0.336-0.034 0.143-0.034z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:viewportHeight="455.731" android:viewportWidth="455.731" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#1BD741" android:pathData="M0 0h455.731v455.731H0z"/>
<path android:fillColor="#ffffff" android:pathData="M89.713 366.168l19.351-68.728c-12.444-21.14-18.996-45.193-18.996-69.902 0-76.08 61.896-137.976 137.976-137.976s137.975 61.896 137.975 137.976-61.895 137.976-137.975 137.976c-23.706 0-46.919-6.068-67.454-17.59zm74.5-43.346l4.224 2.579c17.904 10.93 38.516 16.708 59.607 16.708 63.174 0 114.569-51.396 114.569-114.57 0-63.174-51.395-114.57-114.569-114.57s-114.57 51.396-114.57 114.57c0 22.012 6.256 43.388 18.091 61.817l2.844 4.429-11.143 39.579z"/>
<path android:fillColor="#ffffff" android:pathData="M189.285 163.32l-8.953-0.488c-2.812-0.153-5.57 0.786-7.696 2.633-4.34 3.769-11.28 11.056-13.412 20.552-3.179 14.158 1.734 31.496 14.448 48.833s36.408 45.077 78.306 56.924c13.501 3.818 24.122 1.244 32.317-3.998 6.49-4.151 10.964-10.815 12.576-18.348l1.429-6.677c0.454-2.122-0.623-4.275-2.595-5.184l-30.257-13.947c-1.964-0.905-4.294-0.333-5.615 1.379l-11.879 15.399c-0.897 1.163-2.433 1.624-3.82 1.137-8.135-2.859-35.383-14.271-50.335-43.072-0.648-1.249-0.487-2.765 0.433-3.831l11.352-13.133c1.16-1.341 1.453-3.226 0.756-4.856l-13.043-30.514c-0.694-1.624-2.25-2.713-4.013-2.809z"/>
</vector>

View File

@ -43,7 +43,7 @@
android:layout_marginBottom="@dimen/medium_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/tiny_margin"
android:src="@drawable/ic_star_off_vector" />
android:src="@drawable/ic_star_outline_vector" />
<ImageView
android:id="@+id/contact_change_photo"
@ -217,7 +217,7 @@
android:paddingTop="@dimen/medium_margin"
android:paddingEnd="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin"
android:src="@drawable/ic_email_vector" />
android:src="@drawable/ic_mail_vector" />
<LinearLayout
android:id="@+id/contact_emails_holder"

View File

@ -38,25 +38,21 @@
android:textSize="@dimen/bigger_text_size"
android:visibility="gone" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/group_contacts_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
<com.simplemobiletools.commons.views.FastScroller
<com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
android:id="@+id/group_contacts_fastscroller"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:paddingStart="@dimen/normal_margin">
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/fastscroller_handle_vertical" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/group_contacts_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
</com.simplemobiletools.commons.views.FastScroller>
</com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller>
</RelativeLayout>
<com.simplemobiletools.commons.views.MyFloatingActionButton

View File

@ -42,16 +42,21 @@
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
<com.simplemobiletools.commons.views.FastScroller
android:id="@+id/select_contact_fastscroller"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignTop="@+id/select_contact_list"
android:layout_alignBottom="@+id/select_contact_list"
<com.reddit.indicatorfastscroll.FastScrollerView
android:id="@+id/letter_fastscroller"
android:layout_width="32dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingStart="@dimen/normal_margin">
android:paddingTop="@dimen/big_margin"
android:paddingBottom="@dimen/big_margin" />
<include layout="@layout/fastscroller_handle_vertical" />
<com.reddit.indicatorfastscroll.FastScrollerThumbView
android:id="@+id/letter_fastscroller_thumb"
android:layout_width="@dimen/fab_size"
android:layout_height="match_parent"
android:layout_alignTop="@+id/letter_fastscroller"
android:layout_alignBottom="@+id/letter_fastscroller"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_toStartOf="@+id/letter_fastscroller" />
</com.simplemobiletools.commons.views.FastScroller>
</RelativeLayout>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/settings_scrollview"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@ -11,348 +11,317 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/settings_customize_colors_holder"
<TextView
android:id="@+id/settings_color_customization_label"
style="@style/SettingsSectionLabelStyle"
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">
android:text="@string/color_customization" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_customize_colors"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingStart="@dimen/medium_margin"
android:text="@string/customize_colors" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_use_english_holder"
<LinearLayout
android:id="@+id/settings_color_customization_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">
android:layout_margin="@dimen/medium_margin"
android:background="@drawable/section_holder_stroke"
android:orientation="vertical">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_english"
<RelativeLayout
android:id="@+id/settings_customize_colors_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
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" />
android:background="@drawable/ripple_all_corners">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_customize_colors_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/customize_colors" />
<RelativeLayout
android:id="@+id/settings_manage_contact_fields_holder"
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/settings_general_settings_label"
style="@style/SettingsSectionLabelStyle"
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">
android:text="@string/general_settings" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_contact_fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingStart="@dimen/medium_margin"
android:text="@string/manage_shown_contact_fields" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_manage_tabs_holder"
<LinearLayout
android:id="@+id/settings_general_settings_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">
android:layout_margin="@dimen/medium_margin"
android:background="@drawable/section_holder_stroke"
android:orientation="vertical">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_tabs"
<RelativeLayout
android:id="@+id/settings_use_english_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:paddingStart="@dimen/medium_margin"
android:text="@string/manage_shown_tabs" />
android:background="@drawable/ripple_top_corners">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_use_english"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/use_english_language" />
<RelativeLayout
android:id="@+id/settings_default_tab_holder"
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_font_size_holder"
style="@style/SettingsHolderTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_font_size_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/font_size" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_font_size"
style="@style/SettingsTextValueStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_font_size_label"
tools:text="@string/medium" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_manage_contact_fields_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_contact_fields_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manage_shown_contact_fields" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_call_confirmation_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_call_confirmation"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_call_confirmation_dialog" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_private_contacts_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_bottom_corners">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_private_contacts"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_private_contacts" />
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/settings_main_screen_label"
style="@style/SettingsSectionLabelStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
android:text="@string/main_screen" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_tab_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/settings_default_tab"
android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin"
android:text="@string/default_tab_to_open" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/medium_margin"
android:background="@null"
android:clickable="false" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_font_size_holder"
<LinearLayout
android:id="@+id/settings_main_screen_holder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:background="?attr/selectableItemBackground"
android:paddingLeft="@dimen/normal_margin"
android:paddingTop="@dimen/activity_margin"
android:paddingRight="@dimen/normal_margin"
android:paddingBottom="@dimen/activity_margin">
android:layout_margin="@dimen/medium_margin"
android:background="@drawable/section_holder_stroke"
android:orientation="vertical">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_font_size_label"
<RelativeLayout
android:id="@+id/settings_manage_shown_tabs_holder"
style="@style/SettingsHolderTextViewOneLinerStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/settings_font_size"
android:paddingLeft="@dimen/medium_margin"
android:paddingRight="@dimen/medium_margin"
android:text="@string/font_size" />
android:background="@drawable/ripple_top_corners">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_font_size"
android:layout_width="wrap_content"
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_manage_shown_tabs_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manage_shown_tabs" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_default_tab_holder"
style="@style/SettingsHolderTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/medium_margin"
android:background="@null"
android:clickable="false" />
android:background="@drawable/ripple_background">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_tab_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/default_tab_to_open" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_default_tab"
style="@style/SettingsTextValueStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_default_tab_label"
tools:text="@string/contacts_tab" />
<RelativeLayout
android:id="@+id/settings_on_contact_click_holder"
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_on_contact_click_holder"
style="@style/SettingsHolderTextViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_on_contact_click_label"
style="@style/SettingsTextLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/on_contact_click" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_on_contact_click"
style="@style/SettingsTextValueStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/settings_on_contact_click_label"
tools:text="@string/contacts_tab" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_dialpad_button_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_background">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_dialpad_button"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_dialpad_button" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_only_contacts_with_numbers_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ripple_bottom_corners">
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_only_contacts_with_numbers"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_only_contacts_with_numbers" />
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/settings_list_view_label"
style="@style/SettingsSectionLabelStyle"
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/bigger_margin"
android:paddingEnd="@dimen/normal_margin"
android:paddingBottom="@dimen/bigger_margin">
android:text="@string/list_view" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_on_contact_click_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toStartOf="@+id/settings_on_contact_click"
android:paddingStart="@dimen/medium_margin"
android:paddingEnd="@dimen/medium_margin"
android:text="@string/on_contact_click" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/settings_on_contact_click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/small_margin"
android:background="@null"
android:clickable="false" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_contact_thumbnails_holder"
<LinearLayout
android:id="@+id/settings_list_view_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">
android:layout_margin="@dimen/medium_margin"
android:background="@drawable/section_holder_stroke"
android:orientation="vertical">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_show_contact_thumbnails"
<RelativeLayout
android:id="@+id/settings_show_contact_thumbnails_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_contact_thumbnails"
app:switchPadding="@dimen/medium_margin" />
android:background="@drawable/ripple_top_corners">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_contact_thumbnails"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_contact_thumbnails" />
<RelativeLayout
android:id="@+id/settings_show_phone_numbers_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">
</RelativeLayout>
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_show_phone_numbers"
<RelativeLayout
android:id="@+id/settings_show_phone_numbers_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_phone_numbers"
app:switchPadding="@dimen/medium_margin" />
android:background="@drawable/ripple_background">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_show_phone_numbers"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/show_phone_numbers" />
<RelativeLayout
android:id="@+id/settings_show_only_contacts_with_numbers_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">
</RelativeLayout>
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_show_only_contacts_with_numbers"
<RelativeLayout
android:id="@+id/settings_start_name_with_surname_holder"
style="@style/SettingsHolderCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_only_contacts_with_numbers"
app:switchPadding="@dimen/medium_margin" />
android:background="@drawable/ripple_bottom_corners">
</RelativeLayout>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/settings_start_name_with_surname"
style="@style/SettingsCheckboxStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/start_name_with_surname" />
<RelativeLayout
android:id="@+id/settings_start_with_surname_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_start_with_surname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/start_name_with_surname"
app:switchPadding="@dimen/medium_margin" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_call_confirmation_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_show_call_confirmation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_call_confirmation_dialog"
app:switchPadding="@dimen/medium_margin" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_dialpad_button_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_show_dialpad_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_dialpad_button"
app:switchPadding="@dimen/medium_margin" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_private_contacts_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_show_private_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:text="@string/show_private_contacts"
app:switchPadding="@dimen/medium_margin" />
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@ -42,7 +42,7 @@
android:layout_margin="@dimen/medium_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/tiny_margin"
android:src="@drawable/ic_star_off_vector"
android:src="@drawable/ic_star_outline_vector"
android:visibility="gone" />
<LinearLayout
@ -64,7 +64,7 @@
android:paddingStart="@dimen/small_margin"
android:paddingEnd="@dimen/small_margin"
android:scaleType="fitCenter"
android:src="@drawable/ic_email_vector" />
android:src="@drawable/ic_mail_vector" />
<ImageView
android:id="@+id/contact_start_call"
@ -142,7 +142,7 @@
android:paddingTop="@dimen/medium_margin"
android:paddingEnd="@dimen/small_margin"
android:paddingBottom="@dimen/small_margin"
android:src="@drawable/ic_email_vector"
android:src="@drawable/ic_mail_vector"
android:visibility="gone" />
<ImageView

View File

@ -35,25 +35,21 @@
android:textSize="@dimen/bigger_text_size"
android:visibility="gone" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/fragment_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
<com.simplemobiletools.commons.views.FastScroller
<com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
android:id="@+id/fragment_fastscroller"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:paddingStart="@dimen/normal_margin">
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/fastscroller_handle_vertical" />
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/fragment_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
</com.simplemobiletools.commons.views.FastScroller>
</com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller>
</RelativeLayout>
<com.simplemobiletools.commons.views.MyFloatingActionButton

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_social_holder"
android:layout_width="match_parent"
@ -7,12 +8,14 @@
android:background="?attr/selectableItemBackground"
android:padding="@dimen/medium_margin">
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/item_social_image"
android:layout_width="@dimen/normal_icon_size"
android:layout_height="@dimen/normal_icon_size"
android:padding="@dimen/medium_margin"
android:src="@drawable/ic_phone_vector" />
android:padding="@dimen/small_margin"
android:scaleType="centerCrop"
app:shapeAppearanceOverlay="@style/roundedImageView"
tools:src="@drawable/ic_whatsapp_vector" />
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/item_social_label"

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contact_source_holder"
android:layout_width="match_parent"
@ -22,7 +23,7 @@
android:singleLine="true"
android:textSize="@dimen/bigger_text_size" />
<ImageView
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/contact_source_image"
android:layout_width="@dimen/normal_icon_size"
android:layout_height="@dimen/normal_icon_size"
@ -32,7 +33,8 @@
android:layout_marginEnd="@dimen/normal_margin"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="@dimen/small_margin"
android:visibility="gone"
tools:src="@drawable/ic_phone_vector" />
android:scaleType="centerCrop"
app:shapeAppearanceOverlay="@style/roundedImageView"
tools:src="@drawable/ic_whatsapp_vector" />
</RelativeLayout>

View File

@ -11,19 +11,25 @@
android:layout_height="wrap_content"
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:paddingEnd="@dimen/big_margin"
android:scrollbars="none"
app:layoutManager="com.simplemobiletools.commons.views.MyLinearLayoutManager" />
<com.simplemobiletools.commons.views.FastScroller
android:id="@+id/select_contact_fastscroller"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignTop="@+id/select_contact_list"
android:layout_alignBottom="@+id/select_contact_list"
<com.reddit.indicatorfastscroll.FastScrollerView
android:id="@+id/letter_fastscroller"
android:layout_width="32dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingStart="@dimen/normal_margin">
android:paddingTop="@dimen/big_margin"
android:paddingBottom="@dimen/big_margin" />
<include layout="@layout/fastscroller_handle_vertical" />
<com.reddit.indicatorfastscroll.FastScrollerThumbView
android:id="@+id/letter_fastscroller_thumb"
android:layout_width="@dimen/fab_size"
android:layout_height="match_parent"
android:layout_alignTop="@+id/letter_fastscroller"
android:layout_alignBottom="@+id/letter_fastscroller"
android:layout_marginEnd="@dimen/activity_margin"
android:layout_toStartOf="@+id/letter_fastscroller" />
</com.simplemobiletools.commons.views.FastScroller>
</RelativeLayout>

View File

@ -8,7 +8,7 @@
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_add_to_favorites"
android:icon="@drawable/ic_star_on_vector"
android:icon="@drawable/ic_star_vector"
android:title="@string/add_to_favorites"
app:showAsAction="ifRoom" />
<item
@ -28,7 +28,7 @@
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_send_email_to_contacts"
android:icon="@drawable/ic_email_vector"
android:icon="@drawable/ic_mail_vector"
android:title="@string/send_email_to_contacts"
app:showAsAction="ifRoom" />
<item

View File

@ -1,19 +1,19 @@
<?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">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/cab_rename"
android:icon="@drawable/ic_rename_new"
android:icon="@drawable/ic_rename_vector"
android:title="@string/rename"
app:showAsAction="ifRoom"/>
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all_vector"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
app:showAsAction="ifRoom" />
<item
android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete_vector"
android:title="@string/delete"
app:showAsAction="ifRoom"/>
app:showAsAction="ifRoom" />
</menu>

View File

@ -1,41 +1,43 @@
<?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">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search"
android:icon="@drawable/ic_search_vector"
android:title="@string/search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="collapseActionView|always"/>
app:showAsAction="collapseActionView|always" />
<item
android:id="@+id/sort"
android:icon="@drawable/ic_sort_vector"
android:title="@string/sort_by"
app:showAsAction="always"/>
app:showAsAction="always" />
<item
android:id="@+id/filter"
android:icon="@drawable/ic_filter_vector"
android:title="@string/filter"
app:showAsAction="always"/>
app:showAsAction="always" />
<item
android:id="@+id/dialpad"
android:icon="@drawable/ic_dialpad_vector"
android:title="@string/dialpad"
app:showAsAction="ifRoom"/>
app:showAsAction="ifRoom" />
<item
android:id="@+id/import_contacts"
android:title="@string/import_contacts_from_vcf"
app:showAsAction="never"/>
app:showAsAction="never" />
<item
android:id="@+id/export_contacts"
android:title="@string/export_contacts_to_vcf"
app:showAsAction="never"/>
app:showAsAction="never" />
<item
android:id="@+id/settings"
android:icon="@drawable/ic_settings_cog_vector"
android:title="@string/settings"
app:showAsAction="never"/>
app:showAsAction="ifRoom" />
<item
android:id="@+id/about"
android:icon="@drawable/ic_info_vector"
android:title="@string/about"
app:showAsAction="never"/>
app:showAsAction="ifRoom" />
</menu>

View File

@ -13,7 +13,7 @@
app:showAsAction="ifRoom"/>
<item
android:id="@+id/send_email_to_group"
android:icon="@drawable/ic_email_vector"
android:icon="@drawable/ic_mail_vector"
android:title="@string/send_email_to_group"
app:showAsAction="ifRoom"/>
</menu>

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Odstranit fotku</string>
<!-- Settings -->
<string name="show_phone_numbers">Zobrazit telefonní čísla na hlavní obrazovce</string>
<string name="show_phone_numbers">Zobrazit telefonní čísla</string>
<string name="show_contact_thumbnails">Zobrazit obrázky kontaktů</string>
<string name="show_dialpad_button">Zobrazit tlačítko číselníku na hlavní obrazovce</string>
<string name="on_contact_click">Po klepnutí na kontakt</string>

View File

@ -12,7 +12,6 @@
<string name="send_email_to_contacts">Enviar e-mail aos contactos</string>
<string name="send_sms_to_group">Enviar SMS para o grupo</string>
<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 um contacto existente</string>
@ -74,7 +73,6 @@
<!-- Favorites -->
<string name="no_favorites">Parece que aínda non engadiu contactos aos favoritos</string>
<string name="must_be_at_edit">Ten que estar na pantalla de edición para cambiar un contacto</string>
<!-- Search -->
<string name="search_contacts">Buscar nos contactos</string>
@ -106,6 +104,7 @@
<string name="groups">Grupos</string>
<string name="contact_source">Orixe do contacto</string>
<string name="instant_messaging">Mensaxe instantánea (IM)</string>
<string name="ringtone">Ringtone</string>
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">O contacto será eliminado de todas as orixes.</string>
@ -132,7 +131,7 @@
Podes amosar os teus contactos ou grupos favoritos nunha lista separada. Os grupos pódense usar para enviar correos electrónicos por lotes ou SMS. Para aforrar tempo, podes renomealos facilmente.
Contén botóns para chamar ou enviar mensaxes de texto aos teus contactos. Todos os campos visibles pódense personalizar como queiras e podes ocultar facilmente os que non uses. A función de busca buscará a cadea dada en todos os campos de contacto visibles para que poida atopar facilmente o contacto desexado.
Tamén hai un teclado de marcación lixeiro ao teu servizo e con suxestións de contactos intelixentes.
Dá soporte a exportación / importación de contactos en formato vCard a ficheiros .vcf e para migracións sinxelas ou facer copias de seguridade dos teus datos.
@ -152,7 +151,7 @@
Vén cun deseño material e un tema escuro de xeito predeterminado, fornece unha excelente experiencia de usuario cun uso sinxelo. Como non necesita acceso a Internet, tes máis privacidade, seguridade e estabilidade.
Non contén anuncios nin permisos innecesarios. Dispón dun tema escuro e é totalmente de código aberto.
<b>Visita a páxina a través desta ligazón:</b>
https://www.simplemobiletools.com

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Remove photo</string>
<!-- Settings -->
<string name="show_phone_numbers">Show phone numbers on the main screen</string>
<string name="show_phone_numbers">Show phone numbers</string>
<string name="show_contact_thumbnails">Show contact thumbnails</string>
<string name="show_dialpad_button">Show a dialpad button on the main screen</string>
<string name="on_contact_click">On contact click</string>

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Ukloni fotografiju</string>
<!-- Settings -->
<string name="show_phone_numbers">Prikaži telefonske brojeve na glavnom zaslonu</string>
<string name="show_phone_numbers">Prikaži telefonske brojeve</string>
<string name="show_contact_thumbnails">Prikaži sličice kontakata</string>
<string name="show_dialpad_button">Show a dialpad button on the main screen</string>
<string name="on_contact_click">Prilikom dodira kontakta</string>

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Usuń zdjęcie</string>
<!-- Settings -->
<string name="show_phone_numbers">Pokazuj numery telefonów na ekranie głównym</string>
<string name="show_phone_numbers">Pokazuj numery telefonów</string>
<string name="show_contact_thumbnails">Pokazuj miniaturki kontaktów</string>
<string name="show_dialpad_button">Pokazuj przycisk panelu wybierania numeru na ekranie głównym</string>
<string name="on_contact_click">Przy naciśnięciu kontaktu</string>

View File

@ -103,7 +103,7 @@
<string name="groups">Grupos</string>
<string name="contact_source">Origem do contacto</string>
<string name="instant_messaging">Mensagem instantânea (IM)</string>
<string name="ringtone">Ringtone</string>
<string name="ringtone">Toque de chamada</string>
<!-- Confirmation dialog -->
<string name="delete_from_all_sources">O contacto será apagado de todas as origens.</string>

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Odstrániť foto</string>
<!-- Settings -->
<string name="show_phone_numbers">Zobraziť telefónne čísla na hlavnej obrazovke</string>
<string name="show_phone_numbers">Zobraziť telefónne čísla</string>
<string name="show_contact_thumbnails">Zobraziť obrázky kontaktov</string>
<string name="show_dialpad_button">Zobraziť tlačidlo pre číselník na hlavnej obrazovke</string>
<string name="on_contact_click">Po kliknutí na kontakt</string>

View File

@ -42,7 +42,7 @@
<string name="remove_photo">Remove photo</string>
<!-- Settings -->
<string name="show_phone_numbers">Show phone numbers on the main screen</string>
<string name="show_phone_numbers">Show phone numbers</string>
<string name="show_contact_thumbnails">Show contact thumbnails</string>
<string name="show_dialpad_button">Show a dialpad button on the main screen</string>
<string name="on_contact_click">On contact click</string>

View File

@ -2,4 +2,9 @@
<style name="AppTheme" parent="AppTheme.Base" />
<style name="roundedImageView">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
</style>
</resources>

View File

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.5.30'
ext.kotlin_version = '1.5.31'
repositories {
google()
@ -9,7 +9,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:4.2.2'
classpath 'com.android.tools.build:gradle:7.0.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong

View File

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip