remove everything related to Recents, due to Googles latest security rules

This commit is contained in:
tibbi 2019-01-05 17:27:11 +01:00
parent 0a150a9f82
commit ea520ab7a8
31 changed files with 22 additions and 591 deletions

View File

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

View File

@ -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()
} }
@ -189,9 +178,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 +257,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)
} }
@ -371,11 +356,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 +373,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 +509,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 {

View File

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

View File

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

View File

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

View File

@ -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()

View File

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

View File

@ -35,21 +35,18 @@ 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_GROUPS_TAB = 2
const val LOCATION_GROUPS_TAB = 3 const val LOCATION_GROUP_CONTACTS = 3
const val LOCATION_GROUP_CONTACTS = 4 const val LOCATION_DIALPAD = 4
const val LOCATION_DIALPAD = 5 const val LOCATION_INSERT_OR_EDIT = 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
) )

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Yeni kontakt</string> <string name="new_contact">Yeni kontakt</string>
<string name="edit_contact">Redaktə et</string> <string name="edit_contact">Redaktə et</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Zu einem existierenden Kontakt hinzufügen</string> <string name="add_to_existing_contact">Zu einem existierenden Kontakt hinzufügen</string>
<string name="must_make_default_dialer">Du musst diese App als Standardtelefonie-App einstellen, um Nummern blockieren zu können.</string> <string name="must_make_default_dialer">Du musst diese App als Standardtelefonie-App einstellen, um Nummern blockieren zu können.</string>
<string name="set_to_default">Als Standard auswählen</string> <string name="set_to_default">Als Standard auswählen</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Keine Kontakte gefunden</string> <string name="no_contacts_found">Keine Kontakte gefunden</string>
<string name="no_contacts_with_emails">Keine Kontakte mit E-Mailadressen gefunden</string> <string name="no_contacts_with_emails">Keine Kontakte mit E-Mailadressen gefunden</string>
<string name="no_contacts_with_phone_numbers">Keine Kontakte mit Telefonnummern gefunden</string> <string name="no_contacts_with_phone_numbers">Keine Kontakte mit Telefonnummern gefunden</string>
<string name="no_recent_calls_found">Keine kürzlichen Anrufe gefunden</string>
<string name="new_contact">Neuer Kontakt</string> <string name="new_contact">Neuer Kontakt</string>
<string name="edit_contact">Kontakt bearbeiten</string> <string name="edit_contact">Kontakt bearbeiten</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Προσθήκη σε μια υπάρχουσα Επαφή</string> <string name="add_to_existing_contact">Προσθήκη σε μια υπάρχουσα Επαφή</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Νέα επαφή</string> <string name="new_contact">Νέα επαφή</string>
<string name="edit_contact">Επεξεργασία επαφής</string> <string name="edit_contact">Επεξεργασία επαφής</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Kontaktu berria</string> <string name="new_contact">Kontaktu berria</string>
<string name="edit_contact">Editatu taldea</string> <string name="edit_contact">Editatu taldea</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Ajouter à un contact existant</string> <string name="add_to_existing_contact">Ajouter à un contact existant</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Aucun contact n\'a été trouvé</string> <string name="no_contacts_found">Aucun contact n\'a été trouvé</string>
<string name="no_contacts_with_emails">Aucun contact avec une adresse de courriel n\'a été trouvé</string> <string name="no_contacts_with_emails">Aucun contact avec une adresse de courriel n\'a été trouvé</string>
<string name="no_contacts_with_phone_numbers">Aucun contact avec un numéro de téléphone n\'a été trouvé</string> <string name="no_contacts_with_phone_numbers">Aucun contact avec un numéro de téléphone n\'a été trouvé</string>
<string name="no_recent_calls_found">Aucun appel récent n\'a été trouvé</string>
<string name="new_contact">Nouveau contact</string> <string name="new_contact">Nouveau contact</string>
<string name="edit_contact">Modifier contact</string> <string name="edit_contact">Modifier contact</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Novi kontakt</string> <string name="new_contact">Novi kontakt</string>
<string name="edit_contact">Uredi kontakt</string> <string name="edit_contact">Uredi kontakt</string>
@ -65,7 +63,6 @@
<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">Show only contacts with phone numbers</string>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Aggiungi a un contatto esistente</string> <string name="add_to_existing_contact">Aggiungi a un contatto esistente</string>
<string name="must_make_default_dialer">È necessario impostare quest\'app come predefinita per utilizzare i numeri bloccati.</string> <string name="must_make_default_dialer">È necessario impostare quest\'app come predefinita per utilizzare i numeri bloccati.</string>
<string name="set_to_default">Imposta come predefinita</string> <string name="set_to_default">Imposta come predefinita</string>
<string name="call_number">Chiama numero</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Nessun contatto trovato</string> <string name="no_contacts_found">Nessun contatto trovato</string>
<string name="no_contacts_with_emails">Nessun contatto trovato con un\'email</string> <string name="no_contacts_with_emails">Nessun contatto trovato con un\'email</string>
<string name="no_contacts_with_phone_numbers">Nessun contatto trovato con un numero di telefono</string> <string name="no_contacts_with_phone_numbers">Nessun contatto trovato con un numero di telefono</string>
<string name="no_recent_calls_found">Nessuna chiamata recente trovata</string>
<string name="new_contact">Nuovo contatto</string> <string name="new_contact">Nuovo contatto</string>
<string name="edit_contact">Modifica contatto</string> <string name="edit_contact">Modifica contatto</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">既存の連絡先に追加</string> <string name="add_to_existing_contact">既存の連絡先に追加</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">連絡先が見つかりません</string> <string name="no_contacts_found">連絡先が見つかりません</string>
<string name="no_contacts_with_emails">メールアドレスが登録された連絡先が見つかりません</string> <string name="no_contacts_with_emails">メールアドレスが登録された連絡先が見つかりません</string>
<string name="no_contacts_with_phone_numbers">電話番号が登録された連絡先が見つかりません</string> <string name="no_contacts_with_phone_numbers">電話番号が登録された連絡先が見つかりません</string>
<string name="no_recent_calls_found">通話履歴はありません</string>
<string name="new_contact">新しい連絡先</string> <string name="new_contact">新しい連絡先</string>
<string name="edit_contact">連絡先を編集</string> <string name="edit_contact">連絡先を編集</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">새로운 연락처</string> <string name="new_contact">새로운 연락처</string>
<string name="edit_contact">연락처 수정</string> <string name="edit_contact">연락처 수정</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Naujas kontaktas</string> <string name="new_contact">Naujas kontaktas</string>
<string name="edit_contact">Redaguoti kontaktą</string> <string name="edit_contact">Redaguoti kontaktą</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Adicionar a contacto existente</string> <string name="add_to_existing_contact">Adicionar a contacto existente</string>
<string name="must_make_default_dialer">Tem que tornar esta a aplicação padrão para poder bloquear números.</string> <string name="must_make_default_dialer">Tem que tornar esta a aplicação padrão para poder bloquear números.</string>
<string name="set_to_default">Definir como padrão</string> <string name="set_to_default">Definir como padrão</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Não existem contactos</string> <string name="no_contacts_found">Não existem contactos</string>
<string name="no_contacts_with_emails">Não existem contactos com endereço de e-mail</string> <string name="no_contacts_with_emails">Não existem contactos com endereço de e-mail</string>
<string name="no_contacts_with_phone_numbers">Não existem contactos com número de telefone</string> <string name="no_contacts_with_phone_numbers">Não existem contactos com número de telefone</string>
<string name="no_recent_calls_found">Não existem chamadas recentes</string>
<string name="new_contact">Novo contacto</string> <string name="new_contact">Novo contacto</string>
<string name="edit_contact">Editar contacto</string> <string name="edit_contact">Editar contacto</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Добавить к существующему контакту</string> <string name="add_to_existing_contact">Добавить к существующему контакту</string>
<string name="must_make_default_dialer">Вы должны сделать \"Simple Contacts\" приложением по умолчанию для набора номера для использования блокировки номеров.</string> <string name="must_make_default_dialer">Вы должны сделать \"Simple Contacts\" приложением по умолчанию для набора номера для использования блокировки номеров.</string>
<string name="set_to_default">Сделать по умолчанию</string> <string name="set_to_default">Сделать по умолчанию</string>
<string name="call_number">Набрать номер</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Контакты не найдены</string> <string name="no_contacts_found">Контакты не найдены</string>
<string name="no_contacts_with_emails">Контакты с адресами электронной почты не найдены</string> <string name="no_contacts_with_emails">Контакты с адресами электронной почты не найдены</string>
<string name="no_contacts_with_phone_numbers">Контакты с номерами телефонов не найдены</string> <string name="no_contacts_with_phone_numbers">Контакты с номерами телефонов не найдены</string>
<string name="no_recent_calls_found">Недавние вызовы не найдены</string>
<string name="new_contact">Новый контакт</string> <string name="new_contact">Новый контакт</string>
<string name="edit_contact">Редактировать контакт</string> <string name="edit_contact">Редактировать контакт</string>
@ -65,7 +63,6 @@
<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>

View File

@ -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,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<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">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">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>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Mevcut bir kişiye ekle</string> <string name="add_to_existing_contact">Mevcut bir kişiye ekle</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">Kişi bulunamadı</string> <string name="no_contacts_found">Kişi bulunamadı</string>
<string name="no_contacts_with_emails">E-posta ile hiç bağlantı bulunamadı</string> <string name="no_contacts_with_emails">E-posta ile hiç bağlantı bulunamadı</string>
<string name="no_contacts_with_phone_numbers">Telefon numaralarını içeren kişi bulunamadı</string> <string name="no_contacts_with_phone_numbers">Telefon numaralarını içeren kişi bulunamadı</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">Yeni kişi</string> <string name="new_contact">Yeni kişi</string>
<string name="edit_contact">Kişiyi düzenle</string> <string name="edit_contact">Kişiyi düzenle</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">添加至已存在的聯絡人</string> <string name="add_to_existing_contact">添加至已存在的聯絡人</string>
<string name="must_make_default_dialer">你必須將這應用程式設為預設的撥號程式來使用黑名單。</string> <string name="must_make_default_dialer">你必須將這應用程式設為預設的撥號程式來使用黑名單。</string>
<string name="set_to_default">設為預設</string> <string name="set_to_default">設為預設</string>
<string name="call_number">撥打號碼</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">未發現聯絡人</string> <string name="no_contacts_found">未發現聯絡人</string>
<string name="no_contacts_with_emails">未發現含有電子信箱的聯絡人</string> <string name="no_contacts_with_emails">未發現含有電子信箱的聯絡人</string>
<string name="no_contacts_with_phone_numbers">未發現含有電話號碼的聯絡人</string> <string name="no_contacts_with_phone_numbers">未發現含有電話號碼的聯絡人</string>
<string name="no_recent_calls_found">未發現通話紀錄</string>
<string name="new_contact">新聯絡人</string> <string name="new_contact">新聯絡人</string>
<string name="edit_contact">編輯聯絡人</string> <string name="edit_contact">編輯聯絡人</string>
@ -65,7 +63,6 @@
<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>

View File

@ -19,13 +19,11 @@
<string name="add_to_existing_contact">Add to an existing contact</string> <string name="add_to_existing_contact">Add to an existing contact</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string> <string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="set_to_default">Set to default</string> <string name="set_to_default">Set to default</string>
<string name="call_number">Call number</string>
<!-- Placeholders --> <!-- Placeholders -->
<string name="no_contacts_found">No contacts found</string> <string name="no_contacts_found">No contacts found</string>
<string name="no_contacts_with_emails">No contacts with emails have been found</string> <string name="no_contacts_with_emails">No contacts with emails have been found</string>
<string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string> <string name="no_contacts_with_phone_numbers">No contacts with phone numbers have been found</string>
<string name="no_recent_calls_found">No recent calls found</string>
<string name="new_contact">New contact</string> <string name="new_contact">New contact</string>
<string name="edit_contact">Edit contact</string> <string name="edit_contact">Edit contact</string>
@ -65,7 +63,6 @@
<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>