commit
a972fd213a
47 changed files with 296 additions and 747 deletions
|
|
@ -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)*
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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) ||
|
||||||
|
|
|
||||||
|
|
@ -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?)
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue