feat: initiate calls on contact tap (#537)

* feat: initiate calls on contact tap

* refactor: use common extension for calling in favorites

* refactor: optimize imports

It would be made optional (like in Fossify Contacts) if this change bothers many people. The fact that one can access contact details by tapping on the contact photo or via the menu seems good enough for this app.

Refs: https://github.com/FossifyOrg/Phone/issues/80
This commit is contained in:
Naveen Singh
2025-08-24 16:35:18 +05:30
committed by GitHub
parent e46ec5ddcf
commit b0a3eaccde
4 changed files with 58 additions and 18 deletions

View File

@@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Changed
- Tapping a contact now starts a call; tap the photo for details ([#80])
## [1.6.2] - 2025-08-23
### Changed
@@ -147,6 +149,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
[#39]: https://github.com/FossifyOrg/Phone/issues/39
[#50]: https://github.com/FossifyOrg/Phone/issues/50
[#60]: https://github.com/FossifyOrg/Phone/issues/60
[#80]: https://github.com/FossifyOrg/Phone/issues/80
[#81]: https://github.com/FossifyOrg/Phone/issues/81
[#88]: https://github.com/FossifyOrg/Phone/issues/88
[#94]: https://github.com/FossifyOrg/Phone/issues/94

View File

@@ -10,6 +10,7 @@ import android.telecom.PhoneAccountHandle
import android.telecom.TelecomManager
import org.fossify.commons.activities.BaseSimpleActivity
import org.fossify.commons.dialogs.CallConfirmationDialog
import org.fossify.commons.extensions.initiateCall
import org.fossify.commons.extensions.isDefaultDialer
import org.fossify.commons.extensions.isPackageInstalled
import org.fossify.commons.extensions.launchActivityIntent
@@ -57,6 +58,19 @@ fun SimpleActivity.startCallWithConfirmationCheck(
}
}
fun SimpleActivity.startCallWithConfirmationCheck(contact: Contact) {
if (config.showCallConfirmation) {
CallConfirmationDialog(
activity = this,
callee = contact.getNameToDisplay()
) {
initiateCall(contact) { launchCallIntent(it) }
}
} else {
initiateCall(contact) { launchCallIntent(it) }
}
}
fun SimpleActivity.launchCreateNewContactIntent() {
Intent().apply {
action = Intent.ACTION_INSERT

View File

@@ -3,8 +3,23 @@ package org.fossify.phone.fragments
import android.content.Context
import android.util.AttributeSet
import org.fossify.commons.adapters.MyRecyclerViewAdapter
import org.fossify.commons.extensions.*
import org.fossify.commons.helpers.*
import org.fossify.commons.extensions.areSystemAnimationsEnabled
import org.fossify.commons.extensions.baseConfig
import org.fossify.commons.extensions.beGone
import org.fossify.commons.extensions.beVisible
import org.fossify.commons.extensions.beVisibleIf
import org.fossify.commons.extensions.getColorStateList
import org.fossify.commons.extensions.getContrastColor
import org.fossify.commons.extensions.getMyContactsCursor
import org.fossify.commons.extensions.hasPermission
import org.fossify.commons.extensions.normalizePhoneNumber
import org.fossify.commons.extensions.normalizeString
import org.fossify.commons.extensions.underlineText
import org.fossify.commons.helpers.ContactsHelper
import org.fossify.commons.helpers.MyContactsContentProvider
import org.fossify.commons.helpers.PERMISSION_READ_CONTACTS
import org.fossify.commons.helpers.SMT_PRIVATE
import org.fossify.commons.helpers.getProperText
import org.fossify.commons.models.contacts.Contact
import org.fossify.phone.R
import org.fossify.phone.activities.MainActivity
@@ -14,6 +29,7 @@ import org.fossify.phone.databinding.FragmentContactsBinding
import org.fossify.phone.databinding.FragmentLettersLayoutBinding
import org.fossify.phone.extensions.launchCreateNewContactIntent
import org.fossify.phone.extensions.setupWithContacts
import org.fossify.phone.extensions.startCallWithConfirmationCheck
import org.fossify.phone.extensions.startContactDetailsIntent
import org.fossify.phone.interfaces.RefreshItemsListener
@@ -113,8 +129,12 @@ class ContactsFragment(context: Context, attributeSet: AttributeSet) : MyViewPag
recyclerView = binding.fragmentList,
refreshItemsListener = this,
itemClick = {
activity?.startCallWithConfirmationCheck(it as Contact)
},
profileIconClick = {
activity?.startContactDetailsIntent(it as Contact)
}).apply {
}
).apply {
binding.fragmentList.adapter = this
}

View File

@@ -4,9 +4,21 @@ import android.content.Context
import android.util.AttributeSet
import com.google.gson.Gson
import org.fossify.commons.adapters.MyRecyclerViewAdapter
import org.fossify.commons.dialogs.CallConfirmationDialog
import org.fossify.commons.extensions.*
import org.fossify.commons.helpers.*
import org.fossify.commons.extensions.areSystemAnimationsEnabled
import org.fossify.commons.extensions.baseConfig
import org.fossify.commons.extensions.beGone
import org.fossify.commons.extensions.beVisible
import org.fossify.commons.extensions.beVisibleIf
import org.fossify.commons.extensions.getColorStateList
import org.fossify.commons.extensions.getContrastColor
import org.fossify.commons.extensions.getMyContactsCursor
import org.fossify.commons.extensions.hasPermission
import org.fossify.commons.helpers.ContactsHelper
import org.fossify.commons.helpers.Converters
import org.fossify.commons.helpers.MyContactsContentProvider
import org.fossify.commons.helpers.PERMISSION_READ_CONTACTS
import org.fossify.commons.helpers.SMT_PRIVATE
import org.fossify.commons.helpers.VIEW_TYPE_GRID
import org.fossify.commons.models.contacts.Contact
import org.fossify.commons.views.MyGridLayoutManager
import org.fossify.commons.views.MyLinearLayoutManager
@@ -17,6 +29,7 @@ import org.fossify.phone.databinding.FragmentFavoritesBinding
import org.fossify.phone.databinding.FragmentLettersLayoutBinding
import org.fossify.phone.extensions.config
import org.fossify.phone.extensions.setupWithContacts
import org.fossify.phone.extensions.startCallWithConfirmationCheck
import org.fossify.phone.extensions.startContactDetailsIntent
import org.fossify.phone.interfaces.RefreshItemsListener
@@ -113,18 +126,8 @@ class FavoritesFragment(context: Context, attributeSet: AttributeSet) : MyViewPa
viewType = viewType,
showDeleteButton = false,
enableDrag = true,
itemClick = { it ->
if (context.config.showCallConfirmation) {
CallConfirmationDialog(activity as SimpleActivity, (it as Contact).getNameToDisplay()) {
activity?.apply {
initiateCall(it) { launchCallIntent(it) }
}
}
} else {
activity?.apply {
initiateCall(it as Contact) { launchCallIntent(it) }
}
}
itemClick = {
activity?.startCallWithConfirmationCheck(it as Contact)
},
profileIconClick = {
activity?.startContactDetailsIntent(it as Contact)