Merge pull request #22 from SimpleMobileTools/master

upd
This commit is contained in:
solokot 2019-01-09 11:53:18 +03:00 committed by GitHub
commit a972fd213a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 296 additions and 747 deletions

View file

@ -1,6 +1,14 @@
Changelog Changelog
========== ==========
Version 6.2.0 *(2019-01-06)*
----------------------------
* Removed the Recents tab due to Googles' latest security policies
* Allow showing letters on the dialpad
* Fixed some contact filtering issues
* Couple other smaller improvements
Version 6.1.2 *(2018-12-28)* Version 6.1.2 *(2018-12-28)*
---------------------------- ----------------------------

View file

@ -15,8 +15,8 @@ android {
applicationId "com.simplemobiletools.contacts.pro" applicationId "com.simplemobiletools.contacts.pro"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 28 targetSdkVersion 28
versionCode 39 versionCode 40
versionName "6.1.2" versionName "6.2.0"
setProperty("archivesBaseName", "contacts") setProperty("archivesBaseName", "contacts")
} }
@ -51,10 +51,10 @@ android {
} }
dependencies { dependencies {
implementation 'com.simplemobiletools:commons:5.6.2' implementation 'com.simplemobiletools:commons:5.6.5'
implementation 'joda-time:joda-time:2.10.1' implementation 'joda-time:joda-time:2.10.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.4' implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5'
kapt "androidx.room:room-compiler:2.0.0" kapt "androidx.room:room-compiler:2.0.0"
implementation "androidx.room:room-runtime:2.0.0" implementation "androidx.room:room-runtime:2.0.0"

View file

@ -12,10 +12,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/> <uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/> <uses-permission android:name="android.permission.MANAGE_OWN_CALLS"/>
@ -59,15 +56,6 @@
<category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.DEFAULT"/>
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:mimeType="vnd.android.cursor.dir/calls"/>
</intent-filter>
</activity> </activity>
<activity <activity

View file

@ -7,6 +7,7 @@ import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.Telephony.Sms.Intents.SECRET_CODE_ACTION import android.provider.Telephony.Sms.Intents.SECRET_CODE_ACTION
import android.telephony.PhoneNumberUtils
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.view.KeyEvent import android.view.KeyEvent
import android.view.Menu import android.view.Menu
@ -58,6 +59,11 @@ class DialpadActivity : SimpleActivity() {
val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_huge, if (isBlackAndWhiteTheme()) Color.BLACK else Color.WHITE) val callIcon = resources.getColoredDrawableWithColor(R.drawable.ic_phone_huge, if (isBlackAndWhiteTheme()) Color.BLACK else Color.WHITE)
dialpad_call_button.setImageDrawable(callIcon) dialpad_call_button.setImageDrawable(callIcon)
dialpad_call_button.background.applyColorFilter(getAdjustedPrimaryColor()) dialpad_call_button.background.applyColorFilter(getAdjustedPrimaryColor())
val showLetters = config.showDialpadLetters
arrayOf(dialpad_2_letters, dialpad_3_letters, dialpad_4_letters, dialpad_5_letters, dialpad_6_letters, dialpad_7_letters, dialpad_8_letters, dialpad_9_letters).forEach {
it.beVisibleIf(showLetters)
}
} }
override fun onResume() { override fun onResume() {
@ -159,8 +165,18 @@ class DialpadActivity : SimpleActivity() {
return return
} }
val showLetters = config.showDialpadLetters
(dialpad_list.adapter as? ContactsAdapter)?.finishActMode() (dialpad_list.adapter as? ContactsAdapter)?.finishActMode()
val filtered = contacts.filter { it.doesContainPhoneNumber(text) } as ArrayList<Contact> val filtered = contacts.filter {
val convertedName = PhoneNumberUtils.convertKeypadLettersToDigits(it.getNameToDisplay())
it.doesContainPhoneNumber(text, showLetters) || (showLetters && convertedName.contains(text, true))
}.sortedWith(compareBy {
if (showLetters) {
!it.doesContainPhoneNumber(text, showLetters)
} else {
true
}
}).toMutableList() as ArrayList<Contact>
ContactsAdapter(this, filtered, null, LOCATION_DIALPAD, null, dialpad_list, dialpad_fastscroller, text) { ContactsAdapter(this, filtered, null, LOCATION_DIALPAD, null, dialpad_list, dialpad_fastscroller, text) {
callContact(it as Contact) callContact(it as Contact)

View file

@ -37,10 +37,8 @@ import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.fragment_contacts.* import kotlinx.android.synthetic.main.fragment_contacts.*
import kotlinx.android.synthetic.main.fragment_favorites.* import kotlinx.android.synthetic.main.fragment_favorites.*
import kotlinx.android.synthetic.main.fragment_groups.* import kotlinx.android.synthetic.main.fragment_groups.*
import kotlinx.android.synthetic.main.fragment_recents.*
import java.io.FileOutputStream import java.io.FileOutputStream
class MainActivity : SimpleActivity(), RefreshContactsListener { class MainActivity : SimpleActivity(), RefreshContactsListener {
private var isSearchOpen = false private var isSearchOpen = false
private var searchMenuItem: MenuItem? = null private var searchMenuItem: MenuItem? = null
@ -64,16 +62,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
appLaunched(BuildConfig.APPLICATION_ID) appLaunched(BuildConfig.APPLICATION_ID)
setupTabColors() setupTabColors()
handlePermission(PERMISSION_READ_CALL_LOG) { checkContactPermissions()
if (it) {
handlePermission(PERMISSION_WRITE_CALL_LOG) {
checkContactPermissions()
}
} else {
checkContactPermissions()
}
}
storeStateVariables() storeStateVariables()
checkWhatsNewDialog() checkWhatsNewDialog()
} }
@ -84,12 +73,10 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
if (it) { if (it) {
handlePermission(PERMISSION_WRITE_CONTACTS) { handlePermission(PERMISSION_WRITE_CONTACTS) {
handlePermission(PERMISSION_GET_ACCOUNTS) { handlePermission(PERMISSION_GET_ACCOUNTS) {
storeLocalAccountData()
initFragments() initFragments()
} }
} }
} else { } else {
storeLocalAccountData()
initFragments() initFragments()
} }
} }
@ -189,9 +176,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
val currentFragment = getCurrentFragment() val currentFragment = getCurrentFragment()
menu.apply { menu.apply {
findItem(R.id.search).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment findItem(R.id.search).isVisible = currentFragment != groups_fragment
findItem(R.id.sort).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment findItem(R.id.sort).isVisible = currentFragment != groups_fragment
findItem(R.id.filter).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment findItem(R.id.filter).isVisible = currentFragment != groups_fragment
} }
setupSearch(menu) setupSearch(menu)
return true return true
@ -268,10 +255,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
fragments.add(favorites_fragment) fragments.add(favorites_fragment)
} }
if (showTabs and RECENTS_TAB_MASK != 0) {
fragments.add(recents_fragment)
}
if (showTabs and GROUPS_TAB_MASK != 0) { if (showTabs and GROUPS_TAB_MASK != 0) {
fragments.add(groups_fragment) fragments.add(groups_fragment)
} }
@ -294,24 +277,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
} }
} }
private fun storeLocalAccountData() {
if (config.localAccountType == "-1") {
ContactsHelper(this).getContactSources { sources ->
var localAccountType = ""
var localAccountName = ""
sources.forEach {
if (localAccountTypes.contains(it.type)) {
localAccountType = it.type
localAccountName = it.name
}
}
config.localAccountType = localAccountType
config.localAccountName = localAccountName
}
}
}
private fun getInactiveTabIndexes(activeIndex: Int) = (0 until tabsList.size).filter { it != activeIndex } private fun getInactiveTabIndexes(activeIndex: Int) = (0 until tabsList.size).filter { it != activeIndex }
private fun initFragments() { private fun initFragments() {
@ -371,11 +336,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
// selecting the proper tab sometimes glitches, add an extra selector to make sure we have it right // selecting the proper tab sometimes glitches, add an extra selector to make sure we have it right
main_tabs_holder.onGlobalLayout { main_tabs_holder.onGlobalLayout {
Handler().postDelayed({ Handler().postDelayed({
if (intent?.action == Intent.ACTION_VIEW && intent.type == "vnd.android.cursor.dir/calls") { main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
main_tabs_holder.getTabAt(getRecentsTabIndex())?.select()
} else {
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
}
invalidateOptionsMenu() invalidateOptionsMenu()
}, 100L) }, 100L)
} }
@ -392,7 +353,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
val drawableId = when (position) { val drawableId = when (position) {
LOCATION_CONTACTS_TAB -> R.drawable.ic_person LOCATION_CONTACTS_TAB -> R.drawable.ic_person
LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on
LOCATION_RECENTS_TAB -> R.drawable.ic_clock
else -> R.drawable.ic_group else -> R.drawable.ic_group
} }
@ -529,52 +489,16 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
favorites_fragment?.refreshContacts(contacts) favorites_fragment?.refreshContacts(contacts)
} }
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
recents_fragment?.refreshContacts(contacts)
}
if (refreshTabsMask and GROUPS_TAB_MASK != 0) { if (refreshTabsMask and GROUPS_TAB_MASK != 0) {
if (refreshTabsMask == GROUPS_TAB_MASK) { if (refreshTabsMask == GROUPS_TAB_MASK) {
groups_fragment.skipHashComparing = true groups_fragment.skipHashComparing = true
} }
groups_fragment?.refreshContacts(contacts) groups_fragment?.refreshContacts(contacts)
} }
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
ContactsHelper(this).getRecents {
it.filter { it.name == null }.forEach {
val namelessCall = it
val contact = contacts.firstOrNull { it.doesContainPhoneNumber(namelessCall.number) }
if (contact != null) {
it.name = contact.getNameToDisplay()
}
}
runOnUiThread {
recents_fragment?.updateRecentCalls(it)
}
}
}
} }
} }
private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, recents_fragment, groups_fragment) private fun getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
private fun getRecentsTabIndex(): Int {
var index = 0
if (config.showTabs and RECENTS_TAB_MASK == 0) {
return index
}
if (config.showTabs and CONTACTS_TAB_MASK != 0) {
index++
}
if (config.showTabs and FAVORITES_TAB_MASK != 0) {
index++
}
return index
}
private fun checkWhatsNewDialog() { private fun checkWhatsNewDialog() {
arrayListOf<Release>().apply { arrayListOf<Release>().apply {
@ -587,6 +511,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
add(Release(32, R.string.release_32)) add(Release(32, R.string.release_32))
add(Release(34, R.string.release_34)) add(Release(34, R.string.release_34))
add(Release(39, R.string.release_39)) add(Release(39, R.string.release_39))
add(Release(40, R.string.release_40))
checkWhatsNew(this, BuildConfig.VERSION_CODE) checkWhatsNew(this, BuildConfig.VERSION_CODE)
} }
} }

View file

@ -38,10 +38,10 @@ class SettingsActivity : SimpleActivity() {
setupShowPhoneNumbers() setupShowPhoneNumbers()
setupShowContactsWithNumbers() setupShowContactsWithNumbers()
setupStartNameWithSurname() setupStartNameWithSurname()
setupUse24HourTimeFormat()
setupFilterDuplicates() setupFilterDuplicates()
setupShowCallConfirmation() setupShowCallConfirmation()
setupShowDialpadButton() setupShowDialpadButton()
setupShowDialpadLetters()
setupOnContactClick() setupOnContactClick()
updateTextColors(settings_holder) updateTextColors(settings_holder)
} }
@ -123,14 +123,6 @@ class SettingsActivity : SimpleActivity() {
} }
} }
private fun setupUse24HourTimeFormat() {
settings_use_24_hour_time_format.isChecked = config.use24HourFormat
settings_use_24_hour_time_format_holder.setOnClickListener {
settings_use_24_hour_time_format.toggle()
config.use24HourFormat = settings_use_24_hour_time_format.isChecked
}
}
private fun setupFilterDuplicates() { private fun setupFilterDuplicates() {
settings_filter_duplicates.isChecked = config.filterDuplicates settings_filter_duplicates.isChecked = config.filterDuplicates
settings_filter_duplicates_holder.setOnClickListener { settings_filter_duplicates_holder.setOnClickListener {
@ -147,6 +139,14 @@ class SettingsActivity : SimpleActivity() {
} }
} }
private fun setupShowDialpadLetters() {
settings_show_dialpad_letters.isChecked = config.showDialpadLetters
settings_show_dialpad_letters_holder.setOnClickListener {
settings_show_dialpad_letters.toggle()
config.showDialpadLetters = settings_show_dialpad_letters.isChecked
}
}
private fun setupOnContactClick() { private fun setupOnContactClick() {
settings_on_contact_click.text = getOnContactClickText() settings_on_contact_click.text = getOnContactClickText()
settings_on_contact_click_holder.setOnClickListener { settings_on_contact_click_holder.setOnClickListener {

View file

@ -1,6 +1,10 @@
package com.simplemobiletools.contacts.pro.adapters package com.simplemobiletools.contacts.pro.adapters
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.telephony.PhoneNumberUtils
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.Menu import android.view.Menu
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
@ -255,7 +259,14 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
view.apply { view.apply {
contact_frame?.isSelected = selectedKeys.contains(contact.id) contact_frame?.isSelected = selectedKeys.contains(contact.id)
val fullName = contact.getNameToDisplay() val fullName = contact.getNameToDisplay()
contact_name.text = if (textToHighlight.isEmpty()) fullName else fullName.highlightTextPart(textToHighlight, adjustedPrimaryColor) contact_name.text = if (textToHighlight.isEmpty()) fullName else {
if (fullName.contains(textToHighlight, true)) {
fullName.highlightTextPart(textToHighlight, adjustedPrimaryColor)
} else {
highlightTextFromNumbers(fullName, textToHighlight)
}
}
contact_name.setTextColor(textColor) contact_name.setTextColor(textColor)
contact_name.setPadding(if (showContactThumbnails) smallPadding else bigPadding, smallPadding, smallPadding, 0) contact_name.setPadding(if (showContactThumbnails) smallPadding else bigPadding, smallPadding, smallPadding, 0)
@ -267,7 +278,7 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
} }
val numberText = phoneNumberToUse?.value ?: "" val numberText = phoneNumberToUse?.value ?: ""
contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor) contact_number.text = if (textToHighlight.isEmpty()) numberText else numberText.highlightTextPart(textToHighlight, adjustedPrimaryColor, false, true)
contact_number.setTextColor(textColor) contact_number.setTextColor(textColor)
contact_number.setPadding(if (showContactThumbnails) smallPadding else bigPadding, 0, smallPadding, 0) contact_number.setPadding(if (showContactThumbnails) smallPadding else bigPadding, 0, smallPadding, 0)
} }
@ -300,4 +311,19 @@ class ContactsAdapter(activity: SimpleActivity, var contactItems: ArrayList<Cont
} }
} }
} }
private fun highlightTextFromNumbers(name: String, textToHighlight: String): SpannableString {
val spannableString = SpannableString(name)
val digits = PhoneNumberUtils.convertKeypadLettersToDigits(name)
if (digits.contains(textToHighlight)) {
val startIndex = digits.indexOf(textToHighlight, 0, true)
val endIndex = Math.min(startIndex + textToHighlight.length, name.length)
try {
spannableString.setSpan(ForegroundColorSpan(adjustedPrimaryColor), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
} catch (ignored: IndexOutOfBoundsException) {
}
}
return spannableString
}
} }

View file

@ -22,10 +22,6 @@ class FilterContactSourcesAdapter(val activity: SimpleActivity, private val cont
selectedKeys.add(contactSource.hashCode()) selectedKeys.add(contactSource.hashCode())
} }
if (contactSource.name == activity.config.localAccountName && contactSource.type == activity.config.localAccountType) {
contactSource.name = activity.getString(R.string.phone_storage)
}
if (contactSource.type == SMT_PRIVATE && displayContactSources.contains(SMT_PRIVATE)) { if (contactSource.type == SMT_PRIVATE && displayContactSources.contains(SMT_PRIVATE)) {
selectedKeys.add(contactSource.hashCode()) selectedKeys.add(contactSource.hashCode())
} }

View file

@ -1,150 +0,0 @@
package com.simplemobiletools.contacts.pro.adapters
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.helpers.isNougatPlus
import com.simplemobiletools.commons.views.FastScroller
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
import com.simplemobiletools.contacts.pro.extensions.addBlockedNumber
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.extensions.startCallIntent
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
import com.simplemobiletools.contacts.pro.helpers.RECENTS_TAB_MASK
import com.simplemobiletools.contacts.pro.interfaces.RefreshContactsListener
import com.simplemobiletools.contacts.pro.models.RecentCall
import kotlinx.android.synthetic.main.item_recent_call.view.*
import java.util.*
class RecentCallsAdapter(activity: SimpleActivity, var recentCalls: ArrayList<RecentCall>, val refreshListener: RefreshContactsListener?, recyclerView: MyRecyclerView,
fastScroller: FastScroller, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) {
private val showPhoneNumbers = activity.config.showPhoneNumbers
init {
setupDragListener(true)
}
override fun getActionMenuId() = R.menu.cab_recent_calls
override fun prepareActionMode(menu: Menu) {
val selectedItems = getSelectedItems()
if (selectedItems.isEmpty()) {
return
}
menu.apply {
findItem(R.id.cab_block_number).isVisible = isNougatPlus()
findItem(R.id.cab_block_number).title = activity.getString(if (isOneItemSelected()) R.string.block_number else R.string.block_numbers)
findItem(R.id.cab_call_number).isVisible = isOneItemSelected() && selectedItems.first().name == null
}
}
override fun actionItemPressed(id: Int) {
if (selectedKeys.isEmpty()) {
return
}
when (id) {
R.id.cab_call_number -> callNumber()
R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
R.id.cab_block_number -> blockNumber()
}
}
override fun getSelectableItemCount() = recentCalls.size
override fun getIsItemSelectable(position: Int) = true
override fun getItemSelectionKey(position: Int) = recentCalls.getOrNull(position)?.id
override fun getItemKeyPosition(key: Int) = recentCalls.indexOfFirst { it.id == key }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_recent_call, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val recentCall = recentCalls[position]
holder.bindView(recentCall, true, true) { itemView, layoutPosition ->
setupView(itemView, recentCall)
}
bindViewHolder(holder)
}
override fun getItemCount() = recentCalls.size
fun updateItems(newItems: ArrayList<RecentCall>) {
recentCalls = newItems
notifyDataSetChanged()
finishActMode()
fastScroller?.measureRecyclerView()
}
private fun callNumber() {
(activity as SimpleActivity).startCallIntent(getSelectedItems().first().number)
}
private fun askConfirmDelete() {
ConfirmationDialog(activity) {
deleteRecentCalls()
}
}
private fun deleteRecentCalls() {
if (selectedKeys.isEmpty()) {
return
}
val callsToRemove = getSelectedItems()
val positions = getSelectedItemPositions()
ContactsHelper(activity).removeRecentCalls(callsToRemove.map { it.id } as ArrayList<Int>)
recentCalls.removeAll(callsToRemove)
if (recentCalls.isEmpty()) {
refreshListener?.refreshContacts(RECENTS_TAB_MASK)
finishActMode()
} else {
removeSelectedItems(positions)
}
}
private fun blockNumber() {
Thread {
getSelectedItems().forEach {
activity.addBlockedNumber(it.number)
}
refreshListener?.refreshContacts(RECENTS_TAB_MASK)
activity.runOnUiThread {
finishActMode()
}
}.start()
}
private fun getSelectedItems() = recentCalls.filter { selectedKeys.contains(it.id) } as ArrayList<RecentCall>
private fun setupView(view: View, recentCall: RecentCall) {
view.apply {
recent_call_frame?.isSelected = selectedKeys.contains(recentCall.id)
recent_call_name.apply {
text = recentCall.name ?: recentCall.number
setTextColor(textColor)
}
recent_call_number.apply {
beVisibleIf(showPhoneNumbers && recentCall.name != null)
text = recentCall.number
setTextColor(textColor)
}
recent_call_date_time.apply {
text = recentCall.dateTime
setTextColor(textColor)
}
}
}
}

View file

@ -7,7 +7,10 @@ import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.activities.MainActivity import com.simplemobiletools.contacts.pro.activities.MainActivity
import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment import com.simplemobiletools.contacts.pro.fragments.MyViewPagerFragment
import com.simplemobiletools.contacts.pro.helpers.* import com.simplemobiletools.contacts.pro.helpers.CONTACTS_TAB_MASK
import com.simplemobiletools.contacts.pro.helpers.FAVORITES_TAB_MASK
import com.simplemobiletools.contacts.pro.helpers.GROUPS_TAB_MASK
import com.simplemobiletools.contacts.pro.helpers.tabsList
class ViewPagerAdapter(val activity: MainActivity) : PagerAdapter() { class ViewPagerAdapter(val activity: MainActivity) : PagerAdapter() {
private val showTabs = activity.config.showTabs private val showTabs = activity.config.showTabs
@ -42,10 +45,6 @@ class ViewPagerAdapter(val activity: MainActivity) : PagerAdapter() {
fragments.add(R.layout.fragment_favorites) fragments.add(R.layout.fragment_favorites)
} }
if (showTabs and RECENTS_TAB_MASK != 0) {
fragments.add(R.layout.fragment_recents)
}
if (showTabs and GROUPS_TAB_MASK != 0) { if (showTabs and GROUPS_TAB_MASK != 0) {
fragments.add(R.layout.fragment_groups) fragments.add(R.layout.fragment_groups)
} }

View file

@ -10,7 +10,6 @@ import com.simplemobiletools.commons.extensions.toast
import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.extensions.value
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.helpers.ContactsHelper import com.simplemobiletools.contacts.pro.helpers.ContactsHelper
import com.simplemobiletools.contacts.pro.helpers.SMT_PRIVATE import com.simplemobiletools.contacts.pro.helpers.SMT_PRIVATE
import com.simplemobiletools.contacts.pro.models.ContactSource import com.simplemobiletools.contacts.pro.models.ContactSource
@ -35,11 +34,6 @@ class CreateNewGroupDialog(val activity: BaseSimpleActivity, val callback: (newG
} }
val contactSources = ArrayList<ContactSource>() val contactSources = ArrayList<ContactSource>()
if (activity.config.localAccountName.isNotEmpty()) {
val localAccountName = activity.config.localAccountName
contactSources.add(ContactSource(localAccountName, activity.config.localAccountType, localAccountName))
}
ContactsHelper(activity).getContactSources { ContactsHelper(activity).getContactSources {
it.filter { it.type.contains("google", true) }.mapTo(contactSources) { ContactSource(it.name, it.type, it.name) } it.filter { it.type.contains("google", true) }.mapTo(contactSources) { ContactSource(it.name, it.type, it.name) }
val phoneSecret = activity.getString(R.string.phone_storage_hidden) val phoneSecret = activity.getString(R.string.phone_storage_hidden)

View file

@ -30,7 +30,7 @@ class FilterContactSourcesDialog(val activity: SimpleActivity, private val callb
view.filter_contact_sources_list.adapter = FilterContactSourcesAdapter(activity, it, selectedSources) view.filter_contact_sources_list.adapter = FilterContactSourcesAdapter(activity, it, selectedSources)
dialog = AlertDialog.Builder(activity) dialog = AlertDialog.Builder(activity)
.setPositiveButton(R.string.ok) { dialogInterface, i -> confirmEventTypes() } .setPositiveButton(R.string.ok) { dialogInterface, i -> confirmContactSources() }
.setNegativeButton(R.string.cancel, null) .setNegativeButton(R.string.cancel, null)
.create().apply { .create().apply {
activity.setupDialogStuff(view, this) activity.setupDialogStuff(view, this)
@ -39,7 +39,7 @@ class FilterContactSourcesDialog(val activity: SimpleActivity, private val callb
} }
} }
private fun confirmEventTypes() { private fun confirmContactSources() {
val selectedContactSources = (view.filter_contact_sources_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources() val selectedContactSources = (view.filter_contact_sources_list.adapter as FilterContactSourcesAdapter).getSelectedContactSources()
val ignoredContactSources = contactSources.filter { !selectedContactSources.contains(it) }.map { val ignoredContactSources = contactSources.filter { !selectedContactSources.contains(it) }.map {
if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.getFullIdentifier() if (it.type == SMT_PRIVATE) SMT_PRIVATE else it.getFullIdentifier()

View file

@ -6,7 +6,10 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.views.MyAppCompatCheckbox import com.simplemobiletools.commons.views.MyAppCompatCheckbox
import com.simplemobiletools.contacts.pro.R import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.helpers.* import com.simplemobiletools.contacts.pro.helpers.ALL_TABS_MASK
import com.simplemobiletools.contacts.pro.helpers.CONTACTS_TAB_MASK
import com.simplemobiletools.contacts.pro.helpers.FAVORITES_TAB_MASK
import com.simplemobiletools.contacts.pro.helpers.GROUPS_TAB_MASK
class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) { class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null) private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
@ -16,7 +19,6 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
tabs.apply { tabs.apply {
put(CONTACTS_TAB_MASK, R.id.manage_visible_tabs_contacts) put(CONTACTS_TAB_MASK, R.id.manage_visible_tabs_contacts)
put(FAVORITES_TAB_MASK, R.id.manage_visible_tabs_favorites) put(FAVORITES_TAB_MASK, R.id.manage_visible_tabs_favorites)
put(RECENTS_TAB_MASK, R.id.manage_visible_tabs_recents)
put(GROUPS_TAB_MASK, R.id.manage_visible_tabs_groups) put(GROUPS_TAB_MASK, R.id.manage_visible_tabs_groups)
} }

View file

@ -71,12 +71,7 @@ fun SimpleActivity.showContactSourcePicker(currentSource: String, callback: (new
sources = filteredSources.map { it.publicName } sources = filteredSources.map { it.publicName }
sources.forEachIndexed { index, account -> sources.forEachIndexed { index, account ->
var publicAccount = account items.add(RadioItem(index, account))
if (account == config.localAccountName) {
publicAccount = getString(R.string.phone_storage)
}
items.add(RadioItem(index, publicAccount))
if (currentSource == SMT_PRIVATE && account == getString(R.string.phone_storage_hidden)) { if (currentSource == SMT_PRIVATE && account == getString(R.string.phone_storage_hidden)) {
currentSourceIndex = index currentSourceIndex = index
} }

View file

@ -197,7 +197,6 @@ fun Context.hasContactPermissions() = hasPermission(PERMISSION_READ_CONTACTS) &&
fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) { fun Context.getPublicContactSource(source: String, callback: (String) -> Unit) {
when (source) { when (source) {
config.localAccountName -> callback(getString(R.string.phone_storage))
SMT_PRIVATE -> callback(getString(R.string.phone_storage_hidden)) SMT_PRIVATE -> callback(getString(R.string.phone_storage_hidden))
else -> { else -> {
Thread { Thread {

View file

@ -15,7 +15,6 @@ import com.simplemobiletools.contacts.pro.activities.MainActivity
import com.simplemobiletools.contacts.pro.activities.SimpleActivity import com.simplemobiletools.contacts.pro.activities.SimpleActivity
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter import com.simplemobiletools.contacts.pro.adapters.GroupsAdapter
import com.simplemobiletools.contacts.pro.adapters.RecentCallsAdapter
import com.simplemobiletools.contacts.pro.extensions.config import com.simplemobiletools.contacts.pro.extensions.config
import com.simplemobiletools.contacts.pro.extensions.contactClicked import com.simplemobiletools.contacts.pro.extensions.contactClicked
import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources import com.simplemobiletools.contacts.pro.extensions.getVisibleContactSources
@ -59,11 +58,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fragment_placeholder.text = activity.getString(R.string.no_group_created) fragment_placeholder.text = activity.getString(R.string.no_group_created)
fragment_placeholder_2.text = activity.getString(R.string.create_group) fragment_placeholder_2.text = activity.getString(R.string.create_group)
} }
this is RecentsFragment -> {
fragment_fab.beGone()
fragment_placeholder.text = activity.getString(R.string.no_recent_calls_found)
fragment_placeholder_2.text = activity.getString(R.string.request_the_required_permissions)
}
} }
} }
} }
@ -71,7 +65,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fun textColorChanged(color: Int) { fun textColorChanged(color: Int) {
when { when {
this is GroupsFragment -> (fragment_list.adapter as GroupsAdapter).updateTextColor(color) this is GroupsFragment -> (fragment_list.adapter as GroupsAdapter).updateTextColor(color)
this is RecentsFragment -> (fragment_list.adapter as RecentCallsAdapter).updateTextColor(color)
else -> (fragment_list.adapter as ContactsAdapter).apply { else -> (fragment_list.adapter as ContactsAdapter).apply {
updateTextColor(color) updateTextColor(color)
initDrawables() initDrawables()
@ -88,7 +81,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
} }
fun startNameWithSurnameChanged(startNameWithSurname: Boolean) { fun startNameWithSurnameChanged(startNameWithSurname: Boolean) {
if (this !is GroupsFragment && this !is RecentsFragment) { if (this !is GroupsFragment) {
(fragment_list.adapter as? ContactsAdapter)?.apply { (fragment_list.adapter as? ContactsAdapter)?.apply {
config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME
this@MyViewPagerFragment.activity!!.refreshContacts(CONTACTS_TAB_MASK or FAVORITES_TAB_MASK) this@MyViewPagerFragment.activity!!.refreshContacts(CONTACTS_TAB_MASK or FAVORITES_TAB_MASK)
@ -99,7 +92,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fun refreshContacts(contacts: ArrayList<Contact>) { fun refreshContacts(contacts: ArrayList<Contact>) {
if ((config.showTabs and CONTACTS_TAB_MASK == 0 && this is ContactsFragment) || if ((config.showTabs and CONTACTS_TAB_MASK == 0 && this is ContactsFragment) ||
(config.showTabs and FAVORITES_TAB_MASK == 0 && this is FavoritesFragment) || (config.showTabs and FAVORITES_TAB_MASK == 0 && this is FavoritesFragment) ||
(config.showTabs and RECENTS_TAB_MASK == 0 && this is RecentsFragment) ||
(config.showTabs and GROUPS_TAB_MASK == 0 && this is GroupsFragment)) { (config.showTabs and GROUPS_TAB_MASK == 0 && this is GroupsFragment)) {
return return
} }
@ -114,7 +106,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
val filtered = when { val filtered = when {
this is GroupsFragment -> contacts this is GroupsFragment -> contacts
this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList<Contact> this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList<Contact>
this is RecentsFragment -> ArrayList()
else -> { else -> {
val contactSources = activity!!.getVisibleContactSources() val contactSources = activity!!.getVisibleContactSources()
contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact> contacts.filter { contactSources.contains(it.source) } as ArrayList<Contact>
@ -133,7 +124,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
private fun setupContacts(contacts: ArrayList<Contact>) { private fun setupContacts(contacts: ArrayList<Contact>) {
if (this is GroupsFragment) { if (this is GroupsFragment) {
setupGroupsAdapter(contacts) setupGroupsAdapter(contacts)
} else if (this !is RecentsFragment) { } else {
setupContactsFavoritesAdapter(contacts) setupContactsFavoritesAdapter(contacts)
} }
@ -219,7 +210,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
showContactThumbnails = showThumbnails showContactThumbnails = showThumbnails
notifyDataSetChanged() notifyDataSetChanged()
} }
} else if (this !is RecentsFragment) { } else {
(fragment_list.adapter as? ContactsAdapter)?.apply { (fragment_list.adapter as? ContactsAdapter)?.apply {
showContactThumbnails = showThumbnails showContactThumbnails = showThumbnails
notifyDataSetChanged() notifyDataSetChanged()
@ -237,11 +228,12 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
fun onSearchQueryChanged(text: String) { fun onSearchQueryChanged(text: String) {
val shouldNormalize = text.normalizeString() == text val shouldNormalize = text.normalizeString() == text
val convertLetters = config.showDialpadLetters
(fragment_list.adapter as? ContactsAdapter)?.apply { (fragment_list.adapter as? ContactsAdapter)?.apply {
val filtered = contactsIgnoringSearch.filter { val filtered = contactsIgnoringSearch.filter {
getProperText(it.getNameToDisplay(), shouldNormalize).contains(text, true) || getProperText(it.getNameToDisplay(), shouldNormalize).contains(text, true) ||
getProperText(it.nickname, shouldNormalize).contains(text, true) || getProperText(it.nickname, shouldNormalize).contains(text, true) ||
it.doesContainPhoneNumber(text) || it.doesContainPhoneNumber(text, convertLetters) ||
it.emails.any { it.value.contains(text, true) } || it.emails.any { it.value.contains(text, true) } ||
it.addresses.any { getProperText(it.value, shouldNormalize).contains(text, true) } || it.addresses.any { getProperText(it.value, shouldNormalize).contains(text, true) } ||
it.IMs.any { it.value.contains(text, true) } || it.IMs.any { it.value.contains(text, true) } ||
@ -251,7 +243,10 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
it.websites.any { it.contains(text, true) } it.websites.any { it.contains(text, true) }
} as ArrayList } as ArrayList
filtered.sortBy { !getProperText(it.getNameToDisplay(), shouldNormalize).startsWith(text, true) } filtered.sortBy {
val nameToDisplay = it.getNameToDisplay()
!getProperText(nameToDisplay, shouldNormalize).startsWith(text, true) && !nameToDisplay.contains(text, true)
}
if (filtered.isEmpty() && this@MyViewPagerFragment is FavoritesFragment) { if (filtered.isEmpty() && this@MyViewPagerFragment is FavoritesFragment) {
fragment_placeholder.text = activity.getString(R.string.no_items_found) fragment_placeholder.text = activity.getString(R.string.no_items_found)

View file

@ -1,89 +0,0 @@
package com.simplemobiletools.contacts.pro.fragments
import android.annotation.TargetApi
import android.content.Context
import android.content.Intent
import android.os.Build
import android.telecom.TelecomManager
import android.util.AttributeSet
import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.commons.extensions.hasPermission
import com.simplemobiletools.commons.helpers.PERMISSION_READ_CALL_LOG
import com.simplemobiletools.commons.helpers.PERMISSION_WRITE_CALL_LOG
import com.simplemobiletools.commons.helpers.isMarshmallowPlus
import com.simplemobiletools.contacts.pro.activities.InsertOrEditContactActivity
import com.simplemobiletools.contacts.pro.adapters.RecentCallsAdapter
import com.simplemobiletools.contacts.pro.extensions.contactClicked
import com.simplemobiletools.contacts.pro.extensions.isDefaultDialer
import com.simplemobiletools.contacts.pro.extensions.normalizeNumber
import com.simplemobiletools.contacts.pro.helpers.IS_FROM_SIMPLE_CONTACTS
import com.simplemobiletools.contacts.pro.helpers.KEY_PHONE
import com.simplemobiletools.contacts.pro.helpers.RECENTS_TAB_MASK
import com.simplemobiletools.contacts.pro.models.Contact
import com.simplemobiletools.contacts.pro.models.RecentCall
import kotlinx.android.synthetic.main.fragment_layout.view.*
class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet) {
override fun fabClicked() {}
@TargetApi(Build.VERSION_CODES.M)
override fun placeholderClicked() {
if (!isMarshmallowPlus() || (isMarshmallowPlus() && context.isDefaultDialer())) {
activity!!.handlePermission(PERMISSION_WRITE_CALL_LOG) {
if (it) {
activity!!.handlePermission(PERMISSION_READ_CALL_LOG) {
activity?.refreshContacts(RECENTS_TAB_MASK)
}
}
}
} else {
val intent = Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER).putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, context.packageName)
context.startActivity(intent)
}
}
fun updateRecentCalls(recentCalls: ArrayList<RecentCall>) {
if (activity == null || activity!!.isDestroyed) {
return
}
fragment_placeholder.beVisibleIf(recentCalls.isEmpty())
fragment_placeholder_2.beVisibleIf(recentCalls.isEmpty() && !activity!!.hasPermission(PERMISSION_WRITE_CALL_LOG))
fragment_list.beVisibleIf(recentCalls.isNotEmpty())
val currAdapter = fragment_list.adapter
if (currAdapter == null) {
RecentCallsAdapter(activity!!, recentCalls, activity, fragment_list, fragment_fastscroller) {
val recentCall = (it as RecentCall).number.normalizeNumber()
var selectedContact: Contact? = null
for (contact in allContacts) {
if (contact.doesContainPhoneNumber(recentCall)) {
selectedContact = contact
break
}
}
if (selectedContact != null) {
activity?.contactClicked(selectedContact)
} else {
Intent(context, InsertOrEditContactActivity::class.java).apply {
action = Intent.ACTION_INSERT_OR_EDIT
putExtra(KEY_PHONE, recentCall)
putExtra(IS_FROM_SIMPLE_CONTACTS, true)
context.startActivity(this)
}
}
}.apply {
addVerticalDividers(true)
fragment_list.adapter = this
}
fragment_fastscroller.setViews(fragment_list) {
val item = (fragment_list.adapter as RecentCallsAdapter).recentCalls.getOrNull(it)
fragment_fastscroller.updateBubbleText(item?.name ?: item?.number ?: "")
}
} else {
(currAdapter as RecentCallsAdapter).updateItems(recentCalls)
}
}
}

View file

@ -32,14 +32,6 @@ class Config(context: Context) : BaseConfig(context) {
get() = prefs.getString(LAST_USED_CONTACT_SOURCE, "") get() = prefs.getString(LAST_USED_CONTACT_SOURCE, "")
set(lastUsedContactSource) = prefs.edit().putString(LAST_USED_CONTACT_SOURCE, lastUsedContactSource).apply() set(lastUsedContactSource) = prefs.edit().putString(LAST_USED_CONTACT_SOURCE, lastUsedContactSource).apply()
var localAccountName: String
get() = prefs.getString(LOCAL_ACCOUNT_NAME, "-1")
set(localAccountName) = prefs.edit().putString(LOCAL_ACCOUNT_NAME, localAccountName).apply()
var localAccountType: String
get() = prefs.getString(LOCAL_ACCOUNT_TYPE, "-1")
set(localAccountType) = prefs.edit().putString(LOCAL_ACCOUNT_TYPE, localAccountType).apply()
var onContactClick: Int var onContactClick: Int
get() = prefs.getInt(ON_CONTACT_CLICK, ON_CLICK_VIEW_CONTACT) get() = prefs.getInt(ON_CONTACT_CLICK, ON_CLICK_VIEW_CONTACT)
set(onContactClick) = prefs.edit().putInt(ON_CONTACT_CLICK, onContactClick).apply() set(onContactClick) = prefs.edit().putInt(ON_CONTACT_CLICK, onContactClick).apply()
@ -64,4 +56,8 @@ class Config(context: Context) : BaseConfig(context) {
var showDialpadButton: Boolean var showDialpadButton: Boolean
get() = prefs.getBoolean(SHOW_DIALPAD_BUTTON, true) get() = prefs.getBoolean(SHOW_DIALPAD_BUTTON, true)
set(showDialpadButton) = prefs.edit().putBoolean(SHOW_DIALPAD_BUTTON, showDialpadButton).apply() set(showDialpadButton) = prefs.edit().putBoolean(SHOW_DIALPAD_BUTTON, showDialpadButton).apply()
var showDialpadLetters: Boolean
get() = prefs.getBoolean(SHOW_DIALPAD_LETTERS, false)
set(showDialpadLetters) = prefs.edit().putBoolean(SHOW_DIALPAD_LETTERS, showDialpadLetters).apply()
} }

View file

@ -10,14 +10,13 @@ const val SHOW_ONLY_CONTACTS_WITH_NUMBERS = "show_only_contacts_with_numbers"
const val IGNORED_CONTACT_SOURCES = "ignored_contact_sources_2" const val IGNORED_CONTACT_SOURCES = "ignored_contact_sources_2"
const val START_NAME_WITH_SURNAME = "start_name_with_surname" const val START_NAME_WITH_SURNAME = "start_name_with_surname"
const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source" const val LAST_USED_CONTACT_SOURCE = "last_used_contact_source"
const val LOCAL_ACCOUNT_NAME = "local_account_name"
const val LOCAL_ACCOUNT_TYPE = "local_account_type"
const val ON_CONTACT_CLICK = "on_contact_click" const val ON_CONTACT_CLICK = "on_contact_click"
const val SHOW_CONTACT_FIELDS = "show_contact_fields" const val SHOW_CONTACT_FIELDS = "show_contact_fields"
const val SHOW_TABS = "show_tabs" const val SHOW_TABS = "show_tabs"
const val FILTER_DUPLICATES = "filter_duplicates" const val FILTER_DUPLICATES = "filter_duplicates"
const val SHOW_CALL_CONFIRMATION = "show_call_confirmation" const val SHOW_CALL_CONFIRMATION = "show_call_confirmation"
const val SHOW_DIALPAD_BUTTON = "show_dialpad_button" const val SHOW_DIALPAD_BUTTON = "show_dialpad_button"
const val SHOW_DIALPAD_LETTERS = "show_dialpad_letters"
const val CONTACT_ID = "contact_id" const val CONTACT_ID = "contact_id"
const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps const val SMT_PRIVATE = "smt_private" // used at the contact source of local contacts hidden from other apps
@ -35,21 +34,17 @@ const val KEY_NAME = "name"
const val LOCATION_CONTACTS_TAB = 0 const val LOCATION_CONTACTS_TAB = 0
const val LOCATION_FAVORITES_TAB = 1 const val LOCATION_FAVORITES_TAB = 1
const val LOCATION_RECENTS_TAB = 2 const val LOCATION_GROUP_CONTACTS = 2
const val LOCATION_GROUPS_TAB = 3 const val LOCATION_DIALPAD = 3
const val LOCATION_GROUP_CONTACTS = 4 const val LOCATION_INSERT_OR_EDIT = 4
const val LOCATION_DIALPAD = 5
const val LOCATION_INSERT_OR_EDIT = 6
const val CONTACTS_TAB_MASK = 1 const val CONTACTS_TAB_MASK = 1
const val FAVORITES_TAB_MASK = 2 const val FAVORITES_TAB_MASK = 2
const val RECENTS_TAB_MASK = 4
const val GROUPS_TAB_MASK = 8 const val GROUPS_TAB_MASK = 8
const val ALL_TABS_MASK = 15 const val ALL_TABS_MASK = CONTACTS_TAB_MASK or FAVORITES_TAB_MASK or GROUPS_TAB_MASK
val tabsList = arrayListOf(CONTACTS_TAB_MASK, val tabsList = arrayListOf(CONTACTS_TAB_MASK,
FAVORITES_TAB_MASK, FAVORITES_TAB_MASK,
RECENTS_TAB_MASK,
GROUPS_TAB_MASK GROUPS_TAB_MASK
) )
@ -107,17 +102,6 @@ const val DEFAULT_ORGANIZATION_TYPE = CommonDataKinds.Organization.TYPE_WORK
const val DEFAULT_WEBSITE_TYPE = CommonDataKinds.Website.TYPE_HOMEPAGE const val DEFAULT_WEBSITE_TYPE = CommonDataKinds.Website.TYPE_HOMEPAGE
const val DEFAULT_IM_TYPE = CommonDataKinds.Im.PROTOCOL_SKYPE const val DEFAULT_IM_TYPE = CommonDataKinds.Im.PROTOCOL_SKYPE
// some manufacturer contact account types from https://stackoverflow.com/a/44802016/1967672
val localAccountTypes = arrayListOf("vnd.sec.contact.phone",
"com.htc.android.pcsc",
"com.sonyericsson.localcontacts",
"com.lge.sync",
"com.lge.phone",
"vnd.tmobileus.contact.phone",
"com.android.huawei.phone",
"Local Phone Account"
)
// apps with special handling // apps with special handling
const val TELEGRAM_PACKAGE = "org.telegram.messenger" const val TELEGRAM_PACKAGE = "org.telegram.messenger"
const val SIGNAL_PACKAGE = "org.thoughtcrime.securesms" const val SIGNAL_PACKAGE = "org.thoughtcrime.securesms"

View file

@ -2,14 +2,12 @@ package com.simplemobiletools.contacts.pro.helpers
import android.accounts.Account import android.accounts.Account
import android.accounts.AccountManager import android.accounts.AccountManager
import android.annotation.SuppressLint
import android.content.* import android.content.*
import android.database.Cursor import android.database.Cursor
import android.graphics.Bitmap import android.graphics.Bitmap
import android.net.Uri import android.net.Uri
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.provider.CallLog
import android.provider.ContactsContract import android.provider.ContactsContract
import android.provider.ContactsContract.CommonDataKinds import android.provider.ContactsContract.CommonDataKinds
import android.provider.ContactsContract.CommonDataKinds.Nickname import android.provider.ContactsContract.CommonDataKinds.Nickname
@ -23,7 +21,6 @@ import com.simplemobiletools.contacts.pro.R
import com.simplemobiletools.contacts.pro.extensions.* import com.simplemobiletools.contacts.pro.extensions.*
import com.simplemobiletools.contacts.pro.models.* import com.simplemobiletools.contacts.pro.models.*
import com.simplemobiletools.contacts.pro.overloads.times import com.simplemobiletools.contacts.pro.overloads.times
import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@ -673,7 +670,7 @@ class ContactsHelper(val context: Context) {
return groups return groups
} }
fun getDeviceStoredGroups(): ArrayList<Group> { private fun getDeviceStoredGroups(): ArrayList<Group> {
val groups = ArrayList<Group>() val groups = ArrayList<Group>()
if (!context.hasContactPermissions()) { if (!context.hasContactPermissions()) {
return groups return groups
@ -865,10 +862,6 @@ class ContactsHelper(val context: Context) {
} }
sources.addAll(contentResolverAccounts) sources.addAll(contentResolverAccounts)
if (sources.isEmpty() && context.config.localAccountName.isEmpty() && context.config.localAccountType.isEmpty()) {
sources.add(ContactSource("", "", ""))
}
return sources return sources
} }
@ -1246,7 +1239,7 @@ class ContactsHelper(val context: Context) {
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).apply { ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI).apply {
withValue(ContactsContract.RawContacts.ACCOUNT_NAME, contact.source) withValue(ContactsContract.RawContacts.ACCOUNT_NAME, contact.source)
withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, getContactSourceType(contact.source)) withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, getContactSourceType(contact.source))
withValue(ContactsContract.RawContacts.DIRTY, false) withValue(ContactsContract.RawContacts.DIRTY, 1)
operations.add(build()) operations.add(build())
} }
@ -1552,93 +1545,4 @@ class ContactsHelper(val context: Context) {
context.showErrorToast(e) context.showErrorToast(e)
} }
} }
@SuppressLint("MissingPermission")
fun getRecents(callback: (ArrayList<RecentCall>) -> Unit) {
Thread {
val calls = ArrayList<RecentCall>()
if (!context.hasPermission(PERMISSION_WRITE_CALL_LOG) || !context.hasPermission(PERMISSION_READ_CALL_LOG)) {
callback(calls)
return@Thread
}
val blockedNumbers = context.getBlockedNumbers()
val uri = CallLog.Calls.CONTENT_URI
val projection = arrayOf(
CallLog.Calls._ID,
CallLog.Calls.NUMBER,
CallLog.Calls.DATE,
CallLog.Calls.CACHED_NAME
)
val sorting = "${CallLog.Calls._ID} DESC LIMIT 100"
val currentDate = Date(System.currentTimeMillis())
val currentYear = SimpleDateFormat("yyyy", Locale.getDefault()).format(currentDate)
val todayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(currentDate)
val yesterdayDate = SimpleDateFormat("dd MMM yyyy", Locale.getDefault()).format(Date(System.currentTimeMillis() - DAY_SECONDS * 1000))
val yesterday = context.getString(R.string.yesterday)
val timeFormat = if (context.config.use24HourFormat) "HH:mm" else "h:mm a"
var prevNumber = ""
var cursor: Cursor? = null
try {
cursor = context.contentResolver.query(uri, projection, null, null, sorting)
if (cursor?.moveToFirst() == true) {
do {
val id = cursor.getIntValue(CallLog.Calls._ID)
val number = cursor.getStringValue(CallLog.Calls.NUMBER)
val date = cursor.getLongValue(CallLog.Calls.DATE)
val name = cursor.getStringValue(CallLog.Calls.CACHED_NAME)
if (number == prevNumber) {
continue
}
if (blockedNumbers.any { it.number == number || it.normalizedNumber == number }) {
continue
}
var formattedDate = SimpleDateFormat("dd MMM yyyy, $timeFormat", Locale.getDefault()).format(Date(date))
val datePart = formattedDate.substring(0, 11)
when {
datePart == todayDate -> formattedDate = formattedDate.substring(12)
datePart == yesterdayDate -> formattedDate = yesterday + formattedDate.substring(11)
formattedDate.substring(7, 11) == currentYear -> formattedDate = formattedDate.substring(0, 6) + formattedDate.substring(11)
}
prevNumber = number
val recentCall = RecentCall(id, number, formattedDate, name)
calls.add(recentCall)
} while (cursor.moveToNext())
}
} finally {
cursor?.close()
}
callback(calls)
}.start()
}
fun removeRecentCalls(ids: ArrayList<Int>) {
Thread {
try {
val operations = ArrayList<ContentProviderOperation>()
val selection = "${CallLog.Calls._ID} = ?"
ids.forEach {
ContentProviderOperation.newDelete(CallLog.Calls.CONTENT_URI).apply {
val selectionArgs = arrayOf(it.toString())
withSelection(selection, selectionArgs)
operations.add(build())
}
if (operations.size % BATCH_SIZE == 0) {
context.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
operations.clear()
}
}
context.contentResolver.applyBatch(CallLog.AUTHORITY, operations)
} catch (e: Exception) {
context.showErrorToast(e)
}
}.start()
}
} }

View file

@ -127,9 +127,9 @@ data class Contact(var id: Int, var prefix: String, var firstName: String, var m
fun isABusinessContact() = prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty() fun isABusinessContact() = prefix.isEmpty() && firstName.isEmpty() && middleName.isEmpty() && surname.isEmpty() && suffix.isEmpty() && organization.isNotEmpty()
fun doesContainPhoneNumber(text: String): Boolean { fun doesContainPhoneNumber(text: String, convertLetters: Boolean): Boolean {
return if (text.isNotEmpty()) { return if (text.isNotEmpty()) {
val normalizedText = text.normalizeNumber() val normalizedText = if (convertLetters) text.normalizeNumber() else text
phoneNumbers.any { phoneNumbers.any {
PhoneNumberUtils.compare(it.normalizedNumber, normalizedText) || PhoneNumberUtils.compare(it.normalizedNumber, normalizedText) ||
it.value.contains(text) || it.value.contains(text) ||

View file

@ -1,3 +0,0 @@
package com.simplemobiletools.contacts.pro.models
data class RecentCall(var id: Int, var number: String, var dateTime: String, var name: String?)

View file

@ -90,6 +90,17 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_1"/> app:layout_constraintStart_toEndOf="@+id/dialpad_1"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_2_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="ABC"
app:layout_constraintBottom_toTopOf="@+id/dialpad_5"
app:layout_constraintEnd_toStartOf="@+id/dialpad_3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_1"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_3" android:id="@+id/dialpad_3"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -102,6 +113,18 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_2"/> app:layout_constraintStart_toEndOf="@+id/dialpad_2"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_3_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/activity_margin"
android:text="DEF"
app:layout_constraintBottom_toTopOf="@+id/dialpad_6"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_2"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_4" android:id="@+id/dialpad_4"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -114,6 +137,18 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"/> app:layout_constraintStart_toStartOf="parent"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_4_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_margin"
android:text="GHI"
app:layout_constraintBottom_toTopOf="@+id/dialpad_7"
app:layout_constraintEnd_toStartOf="@+id/dialpad_5"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_5" android:id="@+id/dialpad_5"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -125,6 +160,17 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_4"/> app:layout_constraintStart_toEndOf="@+id/dialpad_4"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_5_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="JKL"
app:layout_constraintBottom_toTopOf="@+id/dialpad_8"
app:layout_constraintEnd_toStartOf="@+id/dialpad_6"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_4"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_6" android:id="@+id/dialpad_6"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -137,6 +183,18 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_5"/> app:layout_constraintStart_toEndOf="@+id/dialpad_5"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_6_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/activity_margin"
android:text="MNO"
app:layout_constraintBottom_toTopOf="@+id/dialpad_9"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_5"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_7" android:id="@+id/dialpad_7"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -149,6 +207,18 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"/> app:layout_constraintStart_toStartOf="parent"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_7_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/activity_margin"
android:text="PQRS"
app:layout_constraintBottom_toTopOf="@+id/dialpad_asterisk"
app:layout_constraintEnd_toStartOf="@+id/dialpad_8"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_8" android:id="@+id/dialpad_8"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -160,6 +230,17 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_7"/> app:layout_constraintStart_toEndOf="@+id/dialpad_7"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_8_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TUV"
app:layout_constraintBottom_toTopOf="@+id/dialpad_0_holder"
app:layout_constraintEnd_toStartOf="@+id/dialpad_9"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_7"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_9" android:id="@+id/dialpad_9"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"
@ -172,6 +253,18 @@
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_8"/> app:layout_constraintStart_toEndOf="@+id/dialpad_8"/>
<com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_9_letters"
style="@style/DialpadLetterStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="@dimen/activity_margin"
android:text="WXYZ"
app:layout_constraintBottom_toTopOf="@+id/dialpad_hashtag"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/dialpad_8"/>
<com.simplemobiletools.commons.views.MyTextView <com.simplemobiletools.commons.views.MyTextView
android:id="@+id/dialpad_asterisk" android:id="@+id/dialpad_asterisk"
style="@style/DialpadNumberStyle" style="@style/DialpadNumberStyle"

View file

@ -244,30 +244,6 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_use_24_hour_time_format_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">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_use_24_hour_time_format"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/use_24_hour_time_format"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_filter_duplicates_holder" android:id="@+id/settings_filter_duplicates_holder"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -340,6 +316,30 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout
android:id="@+id/settings_show_dialpad_letters_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">
<com.simplemobiletools.commons.views.MySwitchCompat
android:id="@+id/settings_show_dialpad_letters"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:paddingStart="@dimen/medium_margin"
android:paddingLeft="@dimen/medium_margin"
android:text="@string/show_dialpad_letters"
app:switchPadding="@dimen/medium_margin"/>
</RelativeLayout>
<RelativeLayout <RelativeLayout
android:id="@+id/settings_on_contact_click_holder" android:id="@+id/settings_on_contact_click_holder"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -30,14 +30,6 @@
android:paddingTop="@dimen/activity_margin" android:paddingTop="@dimen/activity_margin"
android:text="@string/favorites"/> android:text="@string/favorites"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/manage_visible_tabs_recents"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_margin"
android:paddingTop="@dimen/activity_margin"
android:text="@string/recent_calls"/>
<com.simplemobiletools.commons.views.MyAppCompatCheckbox <com.simplemobiletools.commons.views.MyAppCompatCheckbox
android:id="@+id/manage_visible_tabs_groups" android:id="@+id/manage_visible_tabs_groups"
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<com.simplemobiletools.contacts.pro.fragments.RecentsFragment
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recents_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/fragment_layout"/>
</com.simplemobiletools.contacts.pro.fragments.RecentsFragment>

View file

@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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/recent_call_frame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:foreground="@drawable/selector">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/recent_call_holder"
android:layout_width="match_parent"
android:layout_height="@dimen/contact_item_with_number_height"
android:paddingLeft="@dimen/activity_margin"
android:paddingRight="@dimen/activity_margin">
<TextView
android:id="@+id/recent_call_name"
android:layout_width="0dp"
android:layout_height="0dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingRight="@dimen/activity_margin"
android:textSize="@dimen/big_text_size"
app:layout_constraintBottom_toTopOf="@+id/recent_call_number"
app:layout_constraintEnd_toStartOf="@+id/recent_call_date_time"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="John Doe"/>
<TextView
android:id="@+id/recent_call_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_below="@+id/recent_call_name"
android:maxLines="1"
android:paddingBottom="@dimen/tiny_margin"
android:textSize="@dimen/bigger_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/recent_call_date_time"
app:layout_constraintStart_toStartOf="parent"
tools:text="0123 456 789"/>
<TextView
android:id="@+id/recent_call_date_time"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:maxLines="1"
android:textSize="@dimen/normal_text_size"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteY="0dp"
tools:text="Yesterday, 17:00"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View file

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/cab_call_number"
android:icon="@drawable/ic_phone"
android:title="@string/call_number"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_select_all"
android:icon="@drawable/ic_select_all"
android:title="@string/select_all"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_block_number"
android:icon="@drawable/ic_block"
android:title="@string/block_number"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/cab_delete"
android:icon="@drawable/ic_delete"
android:title="@string/delete"
app:showAsAction="ifRoom"/>
</menu>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Yeni kontakt</string> <string name="new_contact">Yeni kontakt</string>
<string name="edit_contact">Redaktə et</string> <string name="edit_contact">Redaktə et</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Göstərilən nişanları idarə et</string> <string name="manage_shown_tabs">Göstərilən nişanları idarə et</string>
<string name="contacts">Kontaktlar</string> <string name="contacts">Kontaktlar</string>
<string name="favorites">Sevimlilər</string> <string name="favorites">Sevimlilər</string>
<string name="recent_calls">Hazırki zənglər</string>
<string name="show_call_confirmation_dialog">Zəngə başlamazdan əvvəl zəng təsdiq pəncərəsi göstər</string> <string name="show_call_confirmation_dialog">Zəngə başlamazdan əvvəl zəng təsdiq pəncərəsi göstər</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-poçt</string> <string name="email">E-poçt</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Zu einem existierenden Kontakt hinzufügen</string> <string name="add_to_existing_contact">Zu einem existierenden Kontakt hinzufügen</string>
<string name="must_make_default_dialer">Du musst diese App als Standardtelefonie-App einstellen, um Nummern blockieren zu können.</string> <string name="must_make_default_dialer">Du musst diese App als Standardtelefonie-App einstellen, um Nummern blockieren zu können.</string>
<string name="set_to_default">Als Standard auswählen</string> <string name="set_to_default">Als Standard auswählen</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Keine Kontakte gefunden</string> <string name="no_contacts_found">Keine Kontakte gefunden</string>
<string name="no_contacts_with_emails">Keine Kontakte mit E-Mailadressen gefunden</string> <string name="no_contacts_with_emails">Keine Kontakte mit E-Mailadressen gefunden</string>
<string name="no_contacts_with_phone_numbers">Keine Kontakte mit Telefonnummern gefunden</string> <string name="no_contacts_with_phone_numbers">Keine Kontakte mit Telefonnummern gefunden</string>
<string name="no_recent_calls_found">Keine kürzlichen Anrufe gefunden</string>
<string name="new_contact">Neuer Kontakt</string> <string name="new_contact">Neuer Kontakt</string>
<string name="edit_contact">Kontakt bearbeiten</string> <string name="edit_contact">Kontakt bearbeiten</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Anzuzeigende Tabs festlegen</string> <string name="manage_shown_tabs">Anzuzeigende Tabs festlegen</string>
<string name="contacts">Kontakte</string> <string name="contacts">Kontakte</string>
<string name="favorites">Favoriten</string> <string name="favorites">Favoriten</string>
<string name="recent_calls">Anrufliste</string>
<string name="show_call_confirmation_dialog">Bestätigungsdialog zeigen, bevor ein Anruf durchgeführt wird</string> <string name="show_call_confirmation_dialog">Bestätigungsdialog zeigen, bevor ein Anruf durchgeführt wird</string>
<string name="show_only_contacts_with_numbers">Nur Kontakte mit Telefonnummern anzeigen</string> <string name="show_only_contacts_with_numbers">Nur Kontakte mit Telefonnummern anzeigen</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-Mail</string> <string name="email">E-Mail</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Προσθήκη σε μια υπάρχουσα Επαφή</string> <string name="add_to_existing_contact">Προσθήκη σε μια υπάρχουσα Επαφή</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Νέα επαφή</string> <string name="new_contact">Νέα επαφή</string>
<string name="edit_contact">Επεξεργασία επαφής</string> <string name="edit_contact">Επεξεργασία επαφής</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Διαχείριση εμφανιζόμενων καρτελών</string> <string name="manage_shown_tabs">Διαχείριση εμφανιζόμενων καρτελών</string>
<string name="contacts">Επαφές</string> <string name="contacts">Επαφές</string>
<string name="favorites">Αγαπημένες</string> <string name="favorites">Αγαπημένες</string>
<string name="recent_calls">Πρόσφατες Κλήσεις</string>
<string name="show_call_confirmation_dialog">Εμφάνιση διαλόγου επιβεβαίωσης πριν από την έναρξη μιας κλήσης</string> <string name="show_call_confirmation_dialog">Εμφάνιση διαλόγου επιβεβαίωσης πριν από την έναρξη μιας κλήσης</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Email</string> <string name="email">Email</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Kontaktu berria</string> <string name="new_contact">Kontaktu berria</string>
<string name="edit_contact">Editatu taldea</string> <string name="edit_contact">Editatu taldea</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Kudeatu erakutsitako fitxak</string> <string name="manage_shown_tabs">Kudeatu erakutsitako fitxak</string>
<string name="contacts">Kontaktuak</string> <string name="contacts">Kontaktuak</string>
<string name="favorites">Gogokoak</string> <string name="favorites">Gogokoak</string>
<string name="recent_calls">Azken deiak</string>
<string name="show_call_confirmation_dialog">Erakutsi egiaztatze mezua dei bat hasi baino lehen</string> <string name="show_call_confirmation_dialog">Erakutsi egiaztatze mezua dei bat hasi baino lehen</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Emaila</string> <string name="email">Emaila</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Ajouter à un contact existant</string> <string name="add_to_existing_contact">Ajouter à un contact existant</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Aucun contact n\'a été trouvé</string> <string name="no_contacts_found">Aucun contact n\'a été trouvé</string>
<string name="no_contacts_with_emails">Aucun contact avec une adresse de courriel n\'a été trouvé</string> <string name="no_contacts_with_emails">Aucun contact avec une adresse de courriel n\'a été trouvé</string>
<string name="no_contacts_with_phone_numbers">Aucun contact avec un numéro de téléphone n\'a été trouvé</string> <string name="no_contacts_with_phone_numbers">Aucun contact avec un numéro de téléphone n\'a été trouvé</string>
<string name="no_recent_calls_found">Aucun appel récent n\'a été trouvé</string>
<string name="new_contact">Nouveau contact</string> <string name="new_contact">Nouveau contact</string>
<string name="edit_contact">Modifier contact</string> <string name="edit_contact">Modifier contact</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Gérer les onglets affichés</string> <string name="manage_shown_tabs">Gérer les onglets affichés</string>
<string name="contacts">Contacts</string> <string name="contacts">Contacts</string>
<string name="favorites">Favoris</string> <string name="favorites">Favoris</string>
<string name="recent_calls">Appels récents</string>
<string name="show_call_confirmation_dialog">Afficher une demande de confirmation avant de démarrer un appel</string> <string name="show_call_confirmation_dialog">Afficher une demande de confirmation avant de démarrer un appel</string>
<string name="show_only_contacts_with_numbers">Afficher uniquement les contacts avec un numéro de téléphone</string> <string name="show_only_contacts_with_numbers">Afficher uniquement les contacts avec un numéro de téléphone</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Adresse de courriel</string> <string name="email">Adresse de courriel</string>

View file

@ -15,17 +15,15 @@
<string name="send_email_to_group">Pošalji e-poštu grupi</string> <string name="send_email_to_group">Pošalji e-poštu grupi</string>
<string name="call_person">Nazovi %s</string> <string name="call_person">Nazovi %s</string>
<string name="request_the_required_permissions">Zatraži potrebna dopuštenja</string> <string name="request_the_required_permissions">Zatraži potrebna dopuštenja</string>
<string name="create_new_contact">Create new contact</string> <string name="create_new_contact">Stvori novi kontakt</string>
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Dodaj postojećem kontaktu</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">Morate napraviti ovu aplikaciju zadanom aplikacijom za biranje da biste bili u mogućnosti koristiti blokirane brojeve.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Postavi na zadano</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">Nisu pronađeni kontakti</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">Nije pronađen nijedan kontakt s e-poštom</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">Nisu pronađeni kontakti s telefonskim brojevima</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Novi kontakt</string> <string name="new_contact">Novi kontakt</string>
<string name="edit_contact">Uredi kontakt</string> <string name="edit_contact">Uredi kontakt</string>
@ -34,7 +32,7 @@
<string name="first_name">Ime</string> <string name="first_name">Ime</string>
<string name="middle_name">Srednje ime</string> <string name="middle_name">Srednje ime</string>
<string name="surname">Prezime</string> <string name="surname">Prezime</string>
<string name="nickname">Nickname</string> <string name="nickname">Nadimak</string>
<!-- Groups --> <!-- Groups -->
<string name="no_groups">Nema grupa</string> <string name="no_groups">Nema grupa</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Upravljaj prikazanim karticama</string> <string name="manage_shown_tabs">Upravljaj prikazanim karticama</string>
<string name="contacts">Kontakti</string> <string name="contacts">Kontakti</string>
<string name="favorites">Favoriti</string> <string name="favorites">Favoriti</string>
<string name="recent_calls">Nedavni pozivi</string>
<string name="show_call_confirmation_dialog">Pokažite dijaloški okvir za potvrdu poziva prije pokretanja poziva</string> <string name="show_call_confirmation_dialog">Pokažite dijaloški okvir za potvrdu poziva prije pokretanja poziva</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Prikaži samo kontakte s telefonskim brojevima</string>
<string name="show_dialpad_letters">Prikaži slova na telefonskoj tipkovnici</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-pošta</string> <string name="email">E-pošta</string>
@ -109,18 +107,18 @@
<string name="filename_without_vcf">Naziv datoteke (bez .vcf)</string> <string name="filename_without_vcf">Naziv datoteke (bez .vcf)</string>
<!-- Dialpad --> <!-- Dialpad -->
<string name="dialpad">Dialpad</string> <string name="dialpad">Telefonska tipkovnica</string>
<string name="add_number_to_contact">Add number to contact</string> <string name="add_number_to_contact">Dodaj broj u kontakt</string>
<!-- Dialer --> <!-- Dialer -->
<string name="dialer">Dialer</string> <string name="dialer">Birač broja</string>
<string name="calling">Calling</string> <string name="calling">Pozivanje</string>
<string name="incoming_call">Incoming call</string> <string name="incoming_call">Dolazni poziv</string>
<string name="incoming_call_from">Incoming call from…</string> <string name="incoming_call_from">Dolazni poziv od...</string>
<string name="ongoing_call">Ongoing call</string> <string name="ongoing_call">Poziv u tijeku</string>
<string name="disconnected">Disconnected</string> <string name="disconnected">Prekinuto</string>
<string name="decline_call">Decline</string> <string name="decline_call">Odbij</string>
<string name="answer_call">Answer</string> <string name="answer_call">Odgovori</string>
<!-- Visible fields --> <!-- Visible fields -->
<string name="select_fields_to_show">Odaberi polja za prikaz</string> <string name="select_fields_to_show">Odaberi polja za prikaz</string>
@ -138,12 +136,12 @@
<string name="instant_messaging">Brzo slanje poruka (IM)</string> <string name="instant_messaging">Brzo slanje poruka (IM)</string>
<!-- Blocked numbers --> <!-- Blocked numbers -->
<string name="manage_blocked_numbers">Manage blocked numbers</string> <string name="manage_blocked_numbers">Upravljanje blokiranim brojevima</string>
<string name="not_blocking_anyone">You are not blocking anyone.</string> <string name="not_blocking_anyone">Ne blokirate nikoga.</string>
<string name="add_a_blocked_number">Add a blocked number</string> <string name="add_a_blocked_number">Dodaj blokirani broj</string>
<string name="block_number">Block number</string> <string name="block_number">Blokiraj broj</string>
<string name="block_numbers">Block numbers</string> <string name="block_numbers">Blokiraj brojeve</string>
<string name="blocked_numbers">Blocked numbers</string> <string name="blocked_numbers">Blokirani brojevi</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">Želim promijeniti polja koja su vidljiva na kontaktima. Mogu li to napraviti?</string> <string name="faq_1_title">Želim promijeniti polja koja su vidljiva na kontaktima. Mogu li to napraviti?</string>
@ -151,7 +149,7 @@
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">An app for managing your contacts without ads, respecting your privacy.</string> <string name="app_short_description">Aplikacija za upravljanje kontaktima, bez oglasa, poštujući Vašu privatnost.</string>
<string name="app_long_description"> <string name="app_long_description">
Jednostavna aplikacija za izradu ili upravljanje kontaktima iz bilo kojeg izvora. Kontakti mogu biti pohranjeni samo na Vašem uređaju, ali i sinkronizirani putem Googlea ili drugih računa. Možete prikazati svoje omiljene kontakte na zasebnom popisu. Jednostavna aplikacija za izradu ili upravljanje kontaktima iz bilo kojeg izvora. Kontakti mogu biti pohranjeni samo na Vašem uređaju, ali i sinkronizirani putem Googlea ili drugih računa. Možete prikazati svoje omiljene kontakte na zasebnom popisu.

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Aggiungi a un contatto esistente</string> <string name="add_to_existing_contact">Aggiungi a un contatto esistente</string>
<string name="must_make_default_dialer">È necessario impostare quest\'app come predefinita per utilizzare i numeri bloccati.</string> <string name="must_make_default_dialer">È necessario impostare quest\'app come predefinita per utilizzare i numeri bloccati.</string>
<string name="set_to_default">Imposta come predefinita</string> <string name="set_to_default">Imposta come predefinita</string>
<string name="call_number">Chiama numero</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Nessun contatto trovato</string> <string name="no_contacts_found">Nessun contatto trovato</string>
<string name="no_contacts_with_emails">Nessun contatto trovato con un\'email</string> <string name="no_contacts_with_emails">Nessun contatto trovato con un\'email</string>
<string name="no_contacts_with_phone_numbers">Nessun contatto trovato con un numero di telefono</string> <string name="no_contacts_with_phone_numbers">Nessun contatto trovato con un numero di telefono</string>
<string name="no_recent_calls_found">Nessuna chiamata recente trovata</string>
<string name="new_contact">Nuovo contatto</string> <string name="new_contact">Nuovo contatto</string>
<string name="edit_contact">Modifica contatto</string> <string name="edit_contact">Modifica contatto</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Gestisci le schede mostrate</string> <string name="manage_shown_tabs">Gestisci le schede mostrate</string>
<string name="contacts">Contatti</string> <string name="contacts">Contatti</string>
<string name="favorites">Preferiti</string> <string name="favorites">Preferiti</string>
<string name="recent_calls">Chiamate recenti</string>
<string name="show_call_confirmation_dialog">Mostra un messaggio di conferma prima di iniziare una chiamata</string> <string name="show_call_confirmation_dialog">Mostra un messaggio di conferma prima di iniziare una chiamata</string>
<string name="show_only_contacts_with_numbers">Mostra solamente i contatti con almeno un numero telefonico</string> <string name="show_only_contacts_with_numbers">Mostra solamente i contatti con almeno un numero telefonico</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Email</string> <string name="email">Email</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">既存の連絡先に追加</string> <string name="add_to_existing_contact">既存の連絡先に追加</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">連絡先が見つかりません</string> <string name="no_contacts_found">連絡先が見つかりません</string>
<string name="no_contacts_with_emails">メールアドレスが登録された連絡先が見つかりません</string> <string name="no_contacts_with_emails">メールアドレスが登録された連絡先が見つかりません</string>
<string name="no_contacts_with_phone_numbers">電話番号が登録された連絡先が見つかりません</string> <string name="no_contacts_with_phone_numbers">電話番号が登録された連絡先が見つかりません</string>
<string name="no_recent_calls_found">通話履歴はありません</string>
<string name="new_contact">新しい連絡先</string> <string name="new_contact">新しい連絡先</string>
<string name="edit_contact">連絡先を編集</string> <string name="edit_contact">連絡先を編集</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">表示するタブを管理</string> <string name="manage_shown_tabs">表示するタブを管理</string>
<string name="contacts">連絡先</string> <string name="contacts">連絡先</string>
<string name="favorites">お気に入り</string> <string name="favorites">お気に入り</string>
<string name="recent_calls">通話履歴</string>
<string name="show_call_confirmation_dialog">発信する前に確認ダイアログを表示する</string> <string name="show_call_confirmation_dialog">発信する前に確認ダイアログを表示する</string>
<string name="show_only_contacts_with_numbers">電話番号が登録された連絡先のみ表示する</string> <string name="show_only_contacts_with_numbers">電話番号が登録された連絡先のみ表示する</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">メール</string> <string name="email">メール</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">새로운 연락처</string> <string name="new_contact">새로운 연락처</string>
<string name="edit_contact">연락처 수정</string> <string name="edit_contact">연락처 수정</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Manage shown tabs</string> <string name="manage_shown_tabs">Manage shown tabs</string>
<string name="contacts">Contacts</string> <string name="contacts">Contacts</string>
<string name="favorites">Favorites</string> <string name="favorites">Favorites</string>
<string name="recent_calls">Recent calls</string>
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string> <string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">이메일</string> <string name="email">이메일</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Naujas kontaktas</string> <string name="new_contact">Naujas kontaktas</string>
<string name="edit_contact">Redaguoti kontaktą</string> <string name="edit_contact">Redaguoti kontaktą</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Manage shown tabs</string> <string name="manage_shown_tabs">Manage shown tabs</string>
<string name="contacts">Contacts</string> <string name="contacts">Contacts</string>
<string name="favorites">Favorites</string> <string name="favorites">Favorites</string>
<string name="recent_calls">Recent calls</string>
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string> <string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Elektroninis paštas</string> <string name="email">Elektroninis paštas</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Adicionar a contacto existente</string> <string name="add_to_existing_contact">Adicionar a contacto existente</string>
<string name="must_make_default_dialer">Tem que tornar esta a aplicação padrão para poder bloquear números.</string> <string name="must_make_default_dialer">Tem que tornar esta a aplicação padrão para poder bloquear números.</string>
<string name="set_to_default">Definir como padrão</string> <string name="set_to_default">Definir como padrão</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Não existem contactos</string> <string name="no_contacts_found">Não existem contactos</string>
<string name="no_contacts_with_emails">Não existem contactos com endereço de e-mail</string> <string name="no_contacts_with_emails">Não existem contactos com endereço de e-mail</string>
<string name="no_contacts_with_phone_numbers">Não existem contactos com número de telefone</string> <string name="no_contacts_with_phone_numbers">Não existem contactos com número de telefone</string>
<string name="no_recent_calls_found">Não existem chamadas recentes</string>
<string name="new_contact">Novo contacto</string> <string name="new_contact">Novo contacto</string>
<string name="edit_contact">Editar contacto</string> <string name="edit_contact">Editar contacto</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Gerir separadores a exibir</string> <string name="manage_shown_tabs">Gerir separadores a exibir</string>
<string name="contacts">Contactos</string> <string name="contacts">Contactos</string>
<string name="favorites">Favoritos</string> <string name="favorites">Favoritos</string>
<string name="recent_calls">Chamadas recentes</string>
<string name="show_call_confirmation_dialog">Mostrar diálogo para confirmar a chamada</string> <string name="show_call_confirmation_dialog">Mostrar diálogo para confirmar a chamada</string>
<string name="show_only_contacts_with_numbers">Mostrar apenas contactos com número de telefone</string> <string name="show_only_contacts_with_numbers">Mostrar apenas contactos com número de telefone</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-mail</string> <string name="email">E-mail</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Добавить к существующему контакту</string> <string name="add_to_existing_contact">Добавить к существующему контакту</string>
<string name="must_make_default_dialer">Вы должны сделать \"Simple Contacts\" приложением по умолчанию для набора номера для использования блокировки номеров.</string> <string name="must_make_default_dialer">Вы должны сделать \"Simple Contacts\" приложением по умолчанию для набора номера для использования блокировки номеров.</string>
<string name="set_to_default">Сделать по умолчанию</string> <string name="set_to_default">Сделать по умолчанию</string>
<string name="call_number">Набрать номер</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Контакты не найдены</string> <string name="no_contacts_found">Контакты не найдены</string>
<string name="no_contacts_with_emails">Контакты с адресами электронной почты не найдены</string> <string name="no_contacts_with_emails">Контакты с адресами электронной почты не найдены</string>
<string name="no_contacts_with_phone_numbers">Контакты с номерами телефонов не найдены</string> <string name="no_contacts_with_phone_numbers">Контакты с номерами телефонов не найдены</string>
<string name="no_recent_calls_found">Недавние вызовы не найдены</string>
<string name="new_contact">Новый контакт</string> <string name="new_contact">Новый контакт</string>
<string name="edit_contact">Редактировать контакт</string> <string name="edit_contact">Редактировать контакт</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Управление отображаемыми вкладками</string> <string name="manage_shown_tabs">Управление отображаемыми вкладками</string>
<string name="contacts">Контакты</string> <string name="contacts">Контакты</string>
<string name="favorites">Избранное</string> <string name="favorites">Избранное</string>
<string name="recent_calls">Недавние вызовы</string>
<string name="show_call_confirmation_dialog">Показывать диалог подтверждения вызова</string> <string name="show_call_confirmation_dialog">Показывать диалог подтверждения вызова</string>
<string name="show_only_contacts_with_numbers">Показывать только контакты с номерами телефонов</string> <string name="show_only_contacts_with_numbers">Показывать только контакты с номерами телефонов</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Эл. почта</string> <string name="email">Эл. почта</string>

View file

@ -8,7 +8,7 @@
<string name="phone_storage_hidden">Úložisko mobilu (neviditeľné pre ostatné apky)</string> <string name="phone_storage_hidden">Úložisko mobilu (neviditeľné pre ostatné apky)</string>
<string name="company">Firma</string> <string name="company">Firma</string>
<string name="job_position">Pracovná pozícia</string> <string name="job_position">Pracovná pozícia</string>
<string name="website">Website</string> <string name="website">Webstránka</string>
<string name="send_sms_to_contacts">Poslať kontaktom SMS</string> <string name="send_sms_to_contacts">Poslať kontaktom SMS</string>
<string name="send_email_to_contacts">Poslať kontaktom email</string> <string name="send_email_to_contacts">Poslať kontaktom email</string>
<string name="send_sms_to_group">Poslať skupine SMS</string> <string name="send_sms_to_group">Poslať skupine SMS</string>
@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Pridať k existujúcemu kontaktu</string> <string name="add_to_existing_contact">Pridať k existujúcemu kontaktu</string>
<string name="must_make_default_dialer">Pre použitie blokovania čísel musíte nastaviť aplikáciu ako predvolenú pre správu hovorov.</string> <string name="must_make_default_dialer">Pre použitie blokovania čísel musíte nastaviť aplikáciu ako predvolenú pre správu hovorov.</string>
<string name="set_to_default">Nastaviť ako predvolenú</string> <string name="set_to_default">Nastaviť ako predvolenú</string>
<string name="call_number">Zavolať číslo</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Nenašli sa žiadne kontakty</string> <string name="no_contacts_found">Nenašli sa žiadne kontakty</string>
<string name="no_contacts_with_emails">Nenašli sa žiadne kontakty s emailami</string> <string name="no_contacts_with_emails">Nenašli sa žiadne kontakty s emailami</string>
<string name="no_contacts_with_phone_numbers">Nenašli sa žiadne kontakty s telefónnymi číslami</string> <string name="no_contacts_with_phone_numbers">Nenašli sa žiadne kontakty s telefónnymi číslami</string>
<string name="no_recent_calls_found">Nenašli sa žiadne posledné hovory</string>
<string name="new_contact">Nový kontakt</string> <string name="new_contact">Nový kontakt</string>
<string name="edit_contact">Upraviť kontakt</string> <string name="edit_contact">Upraviť kontakt</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Spravovať zobrazené karty</string> <string name="manage_shown_tabs">Spravovať zobrazené karty</string>
<string name="contacts">Kontakty</string> <string name="contacts">Kontakty</string>
<string name="favorites">Obľúbené</string> <string name="favorites">Obľúbené</string>
<string name="recent_calls">Predošlé hovory</string>
<string name="show_call_confirmation_dialog">Zobraziť pred spustením hovoru okno na jeho potvrdenie</string> <string name="show_call_confirmation_dialog">Zobraziť pred spustením hovoru okno na jeho potvrdenie</string>
<string name="show_only_contacts_with_numbers">Zobraziť iba kontakty s telefónnymi číslami</string> <string name="show_only_contacts_with_numbers">Zobraziť iba kontakty s telefónnymi číslami</string>
<string name="show_dialpad_letters">Zobraziť na číselníku písmená</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Email</string> <string name="email">Email</string>

View file

@ -17,15 +17,13 @@
<string name="request_the_required_permissions">Begär de behörigheter som krävs</string> <string name="request_the_required_permissions">Begär de behörigheter som krävs</string>
<string name="create_new_contact">Skapa ny kontakt</string> <string name="create_new_contact">Skapa ny kontakt</string>
<string name="add_to_existing_contact">Lägg till i en befintlig kontakt</string> <string name="add_to_existing_contact">Lägg till i en befintlig kontakt</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">Du måste ställa in den här appen som standardtelefonapp för att kunna använda blockerade nummer.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Ange som standard</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Inga kontakter hittades</string> <string name="no_contacts_found">Inga kontakter hittades</string>
<string name="no_contacts_with_emails">Inga kontakter med e-postadresser hittades</string> <string name="no_contacts_with_emails">Inga kontakter med e-postadresser hittades</string>
<string name="no_contacts_with_phone_numbers">Inga kontakter med telefonnummer hittades</string> <string name="no_contacts_with_phone_numbers">Inga kontakter med telefonnummer hittades</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Ny kontakt</string> <string name="new_contact">Ny kontakt</string>
<string name="edit_contact">Redigera kontakt</string> <string name="edit_contact">Redigera kontakt</string>
@ -56,7 +54,7 @@
<string name="start_name_with_surname">Visa efternamn först</string> <string name="start_name_with_surname">Visa efternamn först</string>
<string name="show_phone_numbers">Visa telefonnummer i huvudvyn</string> <string name="show_phone_numbers">Visa telefonnummer i huvudvyn</string>
<string name="show_contact_thumbnails">Visa kontaktminiatyrer</string> <string name="show_contact_thumbnails">Visa kontaktminiatyrer</string>
<string name="show_dialpad_button">Show a dialpad button on the main screen</string> <string name="show_dialpad_button">Visa en knappsatsknapp i huvudvyn</string>
<string name="on_contact_click">Vid kontakttryckning</string> <string name="on_contact_click">Vid kontakttryckning</string>
<string name="call_contact">Ring kontakt</string> <string name="call_contact">Ring kontakt</string>
<string name="view_contact">Visa kontaktuppgifter</string> <string name="view_contact">Visa kontaktuppgifter</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Hantera visade flikar</string> <string name="manage_shown_tabs">Hantera visade flikar</string>
<string name="contacts">Kontakter</string> <string name="contacts">Kontakter</string>
<string name="favorites">Favoriter</string> <string name="favorites">Favoriter</string>
<string name="recent_calls">Senaste samtal</string>
<string name="show_call_confirmation_dialog">Visa en bekräftelsedialogruta före uppringning</string> <string name="show_call_confirmation_dialog">Visa en bekräftelsedialogruta före uppringning</string>
<string name="show_only_contacts_with_numbers">Visa bara kontakter med telefonnummer</string> <string name="show_only_contacts_with_numbers">Visa bara kontakter med telefonnummer</string>
<string name="show_dialpad_letters">Visa bokstäver på knappsatsen</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-post</string> <string name="email">E-post</string>
@ -113,14 +111,14 @@
<string name="add_number_to_contact">Lägg till nummer i kontakt</string> <string name="add_number_to_contact">Lägg till nummer i kontakt</string>
<!-- Dialer --> <!-- Dialer -->
<string name="dialer">Dialer</string> <string name="dialer">Telefon</string>
<string name="calling">Calling</string> <string name="calling">Ringer</string>
<string name="incoming_call">Incoming call</string> <string name="incoming_call">Inkommande samtal</string>
<string name="incoming_call_from">Incoming call from</string> <string name="incoming_call_from">Inkommande samtal från</string>
<string name="ongoing_call">Ongoing call</string> <string name="ongoing_call">Pågående samtal</string>
<string name="disconnected">Disconnected</string> <string name="disconnected">Frånkopplad</string>
<string name="decline_call">Decline</string> <string name="decline_call">Avvisa</string>
<string name="answer_call">Answer</string> <string name="answer_call">Svara</string>
<!-- Visible fields --> <!-- Visible fields -->
<string name="select_fields_to_show">Välj vilka fält som ska visas</string> <string name="select_fields_to_show">Välj vilka fält som ska visas</string>
@ -138,12 +136,12 @@
<string name="instant_messaging">Snabbmeddelanden (IM)</string> <string name="instant_messaging">Snabbmeddelanden (IM)</string>
<!-- Blocked numbers --> <!-- Blocked numbers -->
<string name="manage_blocked_numbers">Manage blocked numbers</string> <string name="manage_blocked_numbers">Hantera blockerade nummer</string>
<string name="not_blocking_anyone">You are not blocking anyone.</string> <string name="not_blocking_anyone">Du blockerar inte någon.</string>
<string name="add_a_blocked_number">Add a blocked number</string> <string name="add_a_blocked_number">Lägg till ett blockerat nummer</string>
<string name="block_number">Block number</string> <string name="block_number">Blockera nummer</string>
<string name="block_numbers">Block numbers</string> <string name="block_numbers">Blockera nummer</string>
<string name="blocked_numbers">Blocked numbers</string> <string name="blocked_numbers">Blockerade nummer</string>
<!-- FAQ --> <!-- FAQ -->
<string name="faq_1_title">I want to change what fields are visible at contacts. Can I do it?</string> <string name="faq_1_title">I want to change what fields are visible at contacts. Can I do it?</string>
@ -151,7 +149,7 @@
<!-- Strings displayed only on Google Playstore. Optional, but good to have --> <!-- Strings displayed only on Google Playstore. Optional, but good to have -->
<!-- Short description has to have less than 80 chars --> <!-- Short description has to have less than 80 chars -->
<string name="app_short_description">An app for managing your contacts without ads, respecting your privacy.</string> <string name="app_short_description">En app för att hantera dina kontakter utan reklam, respekterar din integritet.</string>
<string name="app_long_description"> <string name="app_long_description">
En enkel app för att skapa och hantera kontakter från olika källor. Kontakterna kan lagras bara på din enhet, men kan också synkroniseras med ditt Google-konto eller andra konton. Du kan visa dina favoritkontakter i en separat lista. En enkel app för att skapa och hantera kontakter från olika källor. Kontakterna kan lagras bara på din enhet, men kan också synkroniseras med ditt Google-konto eller andra konton. Du kan visa dina favoritkontakter i en separat lista.

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Mevcut bir kişiye ekle</string> <string name="add_to_existing_contact">Mevcut bir kişiye ekle</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Kişi bulunamadı</string> <string name="no_contacts_found">Kişi bulunamadı</string>
<string name="no_contacts_with_emails">E-posta ile hiç bağlantı bulunamadı</string> <string name="no_contacts_with_emails">E-posta ile hiç bağlantı bulunamadı</string>
<string name="no_contacts_with_phone_numbers">Telefon numaralarını içeren kişi bulunamadı</string> <string name="no_contacts_with_phone_numbers">Telefon numaralarını içeren kişi bulunamadı</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Yeni kişi</string> <string name="new_contact">Yeni kişi</string>
<string name="edit_contact">Kişiyi düzenle</string> <string name="edit_contact">Kişiyi düzenle</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Gösterilen sekmeleri yönet</string> <string name="manage_shown_tabs">Gösterilen sekmeleri yönet</string>
<string name="contacts">Kişiler</string> <string name="contacts">Kişiler</string>
<string name="favorites">Favoriler</string> <string name="favorites">Favoriler</string>
<string name="recent_calls">Son aramalar</string>
<string name="show_call_confirmation_dialog">Arama başlatmadan önce arama onayı penceresi göster</string> <string name="show_call_confirmation_dialog">Arama başlatmadan önce arama onayı penceresi göster</string>
<string name="show_only_contacts_with_numbers">Sadece telefon numaralarını içeren kişileri göster</string> <string name="show_only_contacts_with_numbers">Sadece telefon numaralarını içeren kişileri göster</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">E-posta</string> <string name="email">E-posta</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">添加至已存在的聯絡人</string> <string name="add_to_existing_contact">添加至已存在的聯絡人</string>
<string name="must_make_default_dialer">你必須將這應用程式設為預設的撥號程式來使用黑名單。</string> <string name="must_make_default_dialer">你必須將這應用程式設為預設的撥號程式來使用黑名單。</string>
<string name="set_to_default">設為預設</string> <string name="set_to_default">設為預設</string>
<string name="call_number">撥打號碼</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">未發現聯絡人</string> <string name="no_contacts_found">未發現聯絡人</string>
<string name="no_contacts_with_emails">未發現含有電子信箱的聯絡人</string> <string name="no_contacts_with_emails">未發現含有電子信箱的聯絡人</string>
<string name="no_contacts_with_phone_numbers">未發現含有電話號碼的聯絡人</string> <string name="no_contacts_with_phone_numbers">未發現含有電話號碼的聯絡人</string>
<string name="no_recent_calls_found">未發現通話紀錄</string>
<string name="new_contact">新聯絡人</string> <string name="new_contact">新聯絡人</string>
<string name="edit_contact">編輯聯絡人</string> <string name="edit_contact">編輯聯絡人</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">管理顯示的頁面</string> <string name="manage_shown_tabs">管理顯示的頁面</string>
<string name="contacts">聯絡人</string> <string name="contacts">聯絡人</string>
<string name="favorites">我的最愛</string> <string name="favorites">我的最愛</string>
<string name="recent_calls">通話紀錄</string>
<string name="show_call_confirmation_dialog">開始通話前顯示通話確認框</string> <string name="show_call_confirmation_dialog">開始通話前顯示通話確認框</string>
<string name="show_only_contacts_with_numbers">只顯示含有電話話碼的聯絡人</string> <string name="show_only_contacts_with_numbers">只顯示含有電話話碼的聯絡人</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">電子信箱</string> <string name="email">電子信箱</string>

View file

@ -13,6 +13,10 @@
<string name="telegram">Telegram</string> <string name="telegram">Telegram</string>
<!-- Release notes --> <!-- Release notes -->
<string name="release_40">
Removed the Recents tab due to Googles\' latest security policies being stricter than initiall thought\n
Allow showing letters on the dialpad
</string>
<string name="release_39">Changed the way contacts are fetched, please reset your filters.</string> <string name="release_39">Changed the way contacts are fetched, please reset your filters.</string>
<string name="release_34">Added new options for toggling 24 hour time format and showing only contacts with phone numbers</string> <string name="release_34">Added new options for toggling 24 hour time format and showing only contacts with phone numbers</string>
<string name="release_32">Added a simple dialpad, dialer will come soon</string> <string name="release_32">Added a simple dialpad, dialer will come soon</string>

View file

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">New contact</string> <string name="new_contact">New contact</string>
<string name="edit_contact">Edit contact</string> <string name="edit_contact">Edit contact</string>
@ -65,9 +63,9 @@
<string name="manage_shown_tabs">Manage shown tabs</string> <string name="manage_shown_tabs">Manage shown tabs</string>
<string name="contacts">Contacts</string> <string name="contacts">Contacts</string>
<string name="favorites">Favorites</string> <string name="favorites">Favorites</string>
<string name="recent_calls">Recent calls</string>
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string> <string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string> <string name="show_only_contacts_with_numbers">Show only contacts with phone numbers</string>
<string name="show_dialpad_letters">Show letters on the dialpad</string>
<!-- Emails --> <!-- Emails -->
<string name="email">Email</string> <string name="email">Email</string>

View file

@ -4,10 +4,16 @@
<style name="DialpadNumberStyle"> <style name="DialpadNumberStyle">
<item name="android:gravity">center</item> <item name="android:gravity">center</item>
<item name="android:paddingBottom">@dimen/medium_margin</item> <item name="android:paddingBottom">@dimen/normal_margin</item>
<item name="android:paddingTop">@dimen/normal_margin</item> <item name="android:paddingTop">@dimen/normal_margin</item>
<item name="android:textSize">@dimen/dialpad_text_size</item> <item name="android:textSize">@dimen/dialpad_text_size</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item> <item name="android:background">?attr/selectableItemBackgroundBorderless</item>
</style> </style>
<style name="DialpadLetterStyle">
<item name="android:gravity">center_horizontal</item>
<item name="android:textSize">@dimen/smaller_text_size</item>
<item name="android:alpha">0.8</item>
</style>
</resources> </resources>