diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt index c53e3a9b..bb83d3f5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/MainActivity.kt @@ -47,6 +47,7 @@ class MainActivity : SimpleActivity() { private var searchMenuItem: MenuItem? = null private var storedShowTabs = 0 private var searchQuery = "" + var cachedContacts = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -491,4 +492,9 @@ class MainActivity : SimpleActivity() { } } } + + fun cacheContacts(contacts: List) { + cachedContacts.clear() + cachedContacts.addAll(contacts) + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt index af7e990e..815500a9 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/adapters/RecentCallsAdapter.kt @@ -13,14 +13,13 @@ import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* +import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.MainActivity import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.dialogs.ShowGroupedCallsDialog -import com.simplemobiletools.dialer.extensions.areMultipleSIMsAvailable -import com.simplemobiletools.dialer.extensions.callContactWithSim -import com.simplemobiletools.dialer.extensions.config -import com.simplemobiletools.dialer.extensions.startCallIntent +import com.simplemobiletools.dialer.extensions.* import com.simplemobiletools.dialer.helpers.RecentsHelper import com.simplemobiletools.dialer.interfaces.RefreshItemsListener import com.simplemobiletools.dialer.models.RecentCall @@ -61,6 +60,7 @@ class RecentCallsAdapter( findItem(R.id.cab_add_number).isVisible = isOneItemSelected findItem(R.id.cab_copy_number).isVisible = isOneItemSelected findItem(R.id.cab_show_call_details).isVisible = isOneItemSelected + findItem(R.id.cab_view_details).isVisible = isOneItemSelected && findContactByCall(selectedItems.first()) != null } } @@ -80,6 +80,7 @@ class RecentCallsAdapter( R.id.cab_copy_number -> copyNumber() R.id.cab_remove -> askConfirmRemove() R.id.cab_select_all -> selectAll() + R.id.cab_view_details -> launchContactDetailsIntent(findContactByCall(getSelectedItems().first())) } } @@ -230,6 +231,16 @@ class RecentCallsAdapter( } } + private fun findContactByCall(recentCall: RecentCall): SimpleContact? { + return (activity as MainActivity).cachedContacts.find { it.name == recentCall.name && it.doesHavePhoneNumber(recentCall.phoneNumber) } + } + + private fun launchContactDetailsIntent(contact: SimpleContact?) { + if (contact != null) { + activity.startContactDetailsIntent(contact) + } + } + fun updateItems(newItems: ArrayList, highlightText: String = "") { if (newItems.hashCode() != recentCalls.hashCode()) { recentCalls = newItems.clone() as ArrayList @@ -319,6 +330,7 @@ class RecentCallsAdapter( finishActMode() val theme = activity.getPopupMenuTheme() val contextTheme = ContextThemeWrapper(activity, theme) + val contact = findContactByCall(call) PopupMenu(contextTheme, view, Gravity.END).apply { inflate(R.menu.menu_recent_item_options) @@ -327,6 +339,7 @@ class RecentCallsAdapter( findItem(R.id.cab_call).isVisible = !areMultipleSIMsAvailable findItem(R.id.cab_call_sim_1).isVisible = areMultipleSIMsAvailable findItem(R.id.cab_call_sim_2).isVisible = areMultipleSIMsAvailable + findItem(R.id.cab_view_details).isVisible = contact != null } setOnMenuItemClickListener { item -> val callId = call.id @@ -351,6 +364,11 @@ class RecentCallsAdapter( sendSMS() } } + R.id.cab_view_details -> { + executeItemMenuOperation(callId) { + launchContactDetailsIntent(contact) + } + } } true } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt index 49bf82dc..6c9ba0df 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/fragments/ContactsFragment.kt @@ -12,6 +12,7 @@ import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.SimpleContactsHelper import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.dialer.R +import com.simplemobiletools.dialer.activities.MainActivity import com.simplemobiletools.dialer.activities.SimpleActivity import com.simplemobiletools.dialer.adapters.ContactsAdapter import com.simplemobiletools.dialer.extensions.startContactDetailsIntent @@ -83,6 +84,8 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag allContacts.sort() } + (activity as MainActivity).cacheContacts(allContacts) + activity?.runOnUiThread { gotContacts(contacts) callback?.invoke() diff --git a/app/src/main/res/menu/cab_recent_calls.xml b/app/src/main/res/menu/cab_recent_calls.xml index 378e20db..1a672c59 100644 --- a/app/src/main/res/menu/cab_recent_calls.xml +++ b/app/src/main/res/menu/cab_recent_calls.xml @@ -18,6 +18,11 @@ android:icon="@drawable/ic_delete_vector" android:title="@string/delete" app:showAsAction="always" /> + +