mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-06-05 21:59:27 +02:00
remove everything related to Recents, due to Googles latest security rules
This commit is contained in:
@ -37,10 +37,8 @@ import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.fragment_contacts.*
|
||||
import kotlinx.android.synthetic.main.fragment_favorites.*
|
||||
import kotlinx.android.synthetic.main.fragment_groups.*
|
||||
import kotlinx.android.synthetic.main.fragment_recents.*
|
||||
import java.io.FileOutputStream
|
||||
|
||||
|
||||
class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
private var isSearchOpen = false
|
||||
private var searchMenuItem: MenuItem? = null
|
||||
@ -64,16 +62,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
appLaunched(BuildConfig.APPLICATION_ID)
|
||||
setupTabColors()
|
||||
|
||||
handlePermission(PERMISSION_READ_CALL_LOG) {
|
||||
if (it) {
|
||||
handlePermission(PERMISSION_WRITE_CALL_LOG) {
|
||||
checkContactPermissions()
|
||||
}
|
||||
} else {
|
||||
checkContactPermissions()
|
||||
}
|
||||
}
|
||||
|
||||
checkContactPermissions()
|
||||
storeStateVariables()
|
||||
checkWhatsNewDialog()
|
||||
}
|
||||
@ -189,9 +178,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
val currentFragment = getCurrentFragment()
|
||||
|
||||
menu.apply {
|
||||
findItem(R.id.search).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment
|
||||
findItem(R.id.sort).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment
|
||||
findItem(R.id.filter).isVisible = currentFragment != groups_fragment && currentFragment != recents_fragment
|
||||
findItem(R.id.search).isVisible = currentFragment != groups_fragment
|
||||
findItem(R.id.sort).isVisible = currentFragment != groups_fragment
|
||||
findItem(R.id.filter).isVisible = currentFragment != groups_fragment
|
||||
}
|
||||
setupSearch(menu)
|
||||
return true
|
||||
@ -268,10 +257,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
fragments.add(favorites_fragment)
|
||||
}
|
||||
|
||||
if (showTabs and RECENTS_TAB_MASK != 0) {
|
||||
fragments.add(recents_fragment)
|
||||
}
|
||||
|
||||
if (showTabs and GROUPS_TAB_MASK != 0) {
|
||||
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
|
||||
main_tabs_holder.onGlobalLayout {
|
||||
Handler().postDelayed({
|
||||
if (intent?.action == Intent.ACTION_VIEW && intent.type == "vnd.android.cursor.dir/calls") {
|
||||
main_tabs_holder.getTabAt(getRecentsTabIndex())?.select()
|
||||
} else {
|
||||
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
|
||||
}
|
||||
main_tabs_holder.getTabAt(config.lastUsedViewPagerPage)?.select()
|
||||
invalidateOptionsMenu()
|
||||
}, 100L)
|
||||
}
|
||||
@ -392,7 +373,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
val drawableId = when (position) {
|
||||
LOCATION_CONTACTS_TAB -> R.drawable.ic_person
|
||||
LOCATION_FAVORITES_TAB -> R.drawable.ic_star_on
|
||||
LOCATION_RECENTS_TAB -> R.drawable.ic_clock
|
||||
else -> R.drawable.ic_group
|
||||
}
|
||||
|
||||
@ -529,52 +509,16 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
|
||||
favorites_fragment?.refreshContacts(contacts)
|
||||
}
|
||||
|
||||
if (refreshTabsMask and RECENTS_TAB_MASK != 0) {
|
||||
recents_fragment?.refreshContacts(contacts)
|
||||
}
|
||||
|
||||
if (refreshTabsMask and GROUPS_TAB_MASK != 0) {
|
||||
if (refreshTabsMask == GROUPS_TAB_MASK) {
|
||||
groups_fragment.skipHashComparing = true
|
||||
}
|
||||
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 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 getAllFragments() = arrayListOf(contacts_fragment, favorites_fragment, groups_fragment)
|
||||
|
||||
private fun checkWhatsNewDialog() {
|
||||
arrayListOf<Release>().apply {
|
||||
|
@ -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.extensions.config
|
||||
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() {
|
||||
private val showTabs = activity.config.showTabs
|
||||
@ -42,10 +45,6 @@ class ViewPagerAdapter(val activity: MainActivity) : PagerAdapter() {
|
||||
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) {
|
||||
fragments.add(R.layout.fragment_groups)
|
||||
}
|
||||
|
@ -6,7 +6,10 @@ import com.simplemobiletools.commons.extensions.setupDialogStuff
|
||||
import com.simplemobiletools.commons.views.MyAppCompatCheckbox
|
||||
import com.simplemobiletools.contacts.pro.R
|
||||
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) {
|
||||
private var view = activity.layoutInflater.inflate(R.layout.dialog_manage_visible_tabs, null)
|
||||
@ -16,7 +19,6 @@ class ManageVisibleTabsDialog(val activity: BaseSimpleActivity) {
|
||||
tabs.apply {
|
||||
put(CONTACTS_TAB_MASK, R.id.manage_visible_tabs_contacts)
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,6 @@ import com.simplemobiletools.contacts.pro.activities.MainActivity
|
||||
import com.simplemobiletools.contacts.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.contacts.pro.adapters.ContactsAdapter
|
||||
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.contactClicked
|
||||
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_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) {
|
||||
when {
|
||||
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 {
|
||||
updateTextColor(color)
|
||||
initDrawables()
|
||||
@ -88,7 +81,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
}
|
||||
|
||||
fun startNameWithSurnameChanged(startNameWithSurname: Boolean) {
|
||||
if (this !is GroupsFragment && this !is RecentsFragment) {
|
||||
if (this !is GroupsFragment) {
|
||||
(fragment_list.adapter as? ContactsAdapter)?.apply {
|
||||
config.sorting = if (startNameWithSurname) SORT_BY_SURNAME else SORT_BY_FIRST_NAME
|
||||
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>) {
|
||||
if ((config.showTabs and CONTACTS_TAB_MASK == 0 && this is ContactsFragment) ||
|
||||
(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)) {
|
||||
return
|
||||
}
|
||||
@ -114,7 +106,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
val filtered = when {
|
||||
this is GroupsFragment -> contacts
|
||||
this is FavoritesFragment -> contacts.filter { it.starred == 1 } as ArrayList<Contact>
|
||||
this is RecentsFragment -> ArrayList()
|
||||
else -> {
|
||||
val contactSources = activity!!.getVisibleContactSources()
|
||||
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>) {
|
||||
if (this is GroupsFragment) {
|
||||
setupGroupsAdapter(contacts)
|
||||
} else if (this !is RecentsFragment) {
|
||||
} else {
|
||||
setupContactsFavoritesAdapter(contacts)
|
||||
}
|
||||
|
||||
@ -219,7 +210,7 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
|
||||
showContactThumbnails = showThumbnails
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
} else if (this !is RecentsFragment) {
|
||||
} else {
|
||||
(fragment_list.adapter as? ContactsAdapter)?.apply {
|
||||
showContactThumbnails = showThumbnails
|
||||
notifyDataSetChanged()
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -35,21 +35,18 @@ const val KEY_NAME = "name"
|
||||
|
||||
const val LOCATION_CONTACTS_TAB = 0
|
||||
const val LOCATION_FAVORITES_TAB = 1
|
||||
const val LOCATION_RECENTS_TAB = 2
|
||||
const val LOCATION_GROUPS_TAB = 3
|
||||
const val LOCATION_GROUP_CONTACTS = 4
|
||||
const val LOCATION_DIALPAD = 5
|
||||
const val LOCATION_INSERT_OR_EDIT = 6
|
||||
const val LOCATION_GROUPS_TAB = 2
|
||||
const val LOCATION_GROUP_CONTACTS = 3
|
||||
const val LOCATION_DIALPAD = 4
|
||||
const val LOCATION_INSERT_OR_EDIT = 5
|
||||
|
||||
const val CONTACTS_TAB_MASK = 1
|
||||
const val FAVORITES_TAB_MASK = 2
|
||||
const val RECENTS_TAB_MASK = 4
|
||||
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,
|
||||
FAVORITES_TAB_MASK,
|
||||
RECENTS_TAB_MASK,
|
||||
GROUPS_TAB_MASK
|
||||
)
|
||||
|
||||
|
@ -2,14 +2,12 @@ package com.simplemobiletools.contacts.pro.helpers
|
||||
|
||||
import android.accounts.Account
|
||||
import android.accounts.AccountManager
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.*
|
||||
import android.database.Cursor
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.provider.CallLog
|
||||
import android.provider.ContactsContract
|
||||
import android.provider.ContactsContract.CommonDataKinds
|
||||
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.models.*
|
||||
import com.simplemobiletools.contacts.pro.overloads.times
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
@ -1552,93 +1549,4 @@ class ContactsHelper(val context: Context) {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
@ -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?)
|
Reference in New Issue
Block a user