ContactItem improvements (#1324)

* ContactRepository: try to deduplicate phoneNumbers in a smart way

* AndroidManifest: use CALL_PHONE permission to allow for making phone calls

* Implement CallOnTap with contact results

- contact activities that require permissions we do not have are not
  listed
- add CallOnTap setting for phone number results on search behind
  contacts settings

* utilize PhoneNumberUtils

* navroute settings/search/contacts

* queryIntentActivities -> resolveActivity

* localization

* Code formatting

* Wrap contact search settings in preference category

---------

Co-authored-by: MM20 <15646950+MM2-0@users.noreply.github.com>
This commit is contained in:
Christoph
2025-03-29 17:18:30 +01:00
committed by GitHub
co-authored by MM20
parent 21894d8df2
commit bceae1aa58
14 changed files with 191 additions and 10 deletions
@@ -65,6 +65,7 @@ enum class PermissionGroup {
AppShortcuts,
Accessibility,
ManageProfiles,
Call,
}
internal class PermissionsManagerImpl(
@@ -93,6 +94,9 @@ internal class PermissionsManagerImpl(
private val manageProfilesPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.ManageProfiles)
)
private val callPermissionState = MutableStateFlow(
checkPermissionOnce(PermissionGroup.Call)
)
override fun requestPermission(context: AppCompatActivity, permissionGroup: PermissionGroup) {
when (permissionGroup) {
@@ -167,6 +171,14 @@ internal class PermissionsManagerImpl(
CrashReporter.logException(e)
}
}
PermissionGroup.Call -> {
ActivityCompat.requestPermissions(
context,
callPermissions,
permissionGroup.ordinal
)
}
}
}
@@ -209,6 +221,10 @@ internal class PermissionsManagerImpl(
PermissionGroup.Accessibility -> {
accessibilityPermissionState.value
}
PermissionGroup.Call -> {
callPermissions.all { context.checkPermission(it) }
}
}
}
@@ -222,6 +238,7 @@ internal class PermissionsManagerImpl(
PermissionGroup.AppShortcuts -> appShortcutsPermissionState
PermissionGroup.Accessibility -> accessibilityPermissionState
PermissionGroup.ManageProfiles -> manageProfilesPermissionState
PermissionGroup.Call -> callPermissionState
}
}
@@ -241,6 +258,7 @@ internal class PermissionsManagerImpl(
PermissionGroup.AppShortcuts -> appShortcutsPermissionState.value = granted
PermissionGroup.Accessibility -> accessibilityPermissionState.value = granted
PermissionGroup.ManageProfiles -> manageProfilesPermissionState.value = granted
PermissionGroup.Call -> callPermissionState.value = granted
}
}
@@ -269,5 +287,6 @@ internal class PermissionsManagerImpl(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
private val callPermissions = arrayOf(Manifest.permission.CALL_PHONE)
}
}