From 81e00dc8116c303b26dbda4eeb6ef7193c26960d Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Thu, 22 Dec 2022 23:04:18 -0500 Subject: [PATCH] Dialler integration for incoming calls is optional --- src/cheogram/res/values/strings.xml | 2 ++ .../services/NotificationService.java | 2 ++ .../services/XmppConnectionService.java | 2 +- .../conversations/ui/SettingsActivity.java | 22 ++++++++++++++++++- src/main/res/values/defaults.xml | 1 + src/main/res/xml/preferences.xml | 5 +++++ 6 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/cheogram/res/values/strings.xml b/src/cheogram/res/values/strings.xml index 7fafc09dd99891dc66cd4f40aae204e9ed373b72..ed2152ab9b54fdf514f1432163029b5e24ec2f41 100644 --- a/src/cheogram/res/values/strings.xml +++ b/src/cheogram/res/values/strings.xml @@ -25,4 +25,6 @@ Go OLED Black Invite to Chat + Use Phone Accounts for Incoming Calls + Incoming calls from phone numbers may ring with your system dialler instead of this app\'s notification settings diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 27209a69bec1a7a948cdf5537523f8831e72b78b..c08c4c06e0bc8871cf56ddef7c84f7d6fd4aacca 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -503,6 +503,8 @@ public class NotificationService { private synchronized boolean tryRingingWithDialerUI(final AbstractJingleConnection.Id id, final Set media) { if (Build.VERSION.SDK_INT < 23) return false; + if (!mXmppConnectionService.getPreferences().getBoolean("dialler_integration_incoming", true)) return false; + if (mXmppConnectionService.checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { // We cannot request audio permission in Dialer UI // when Dialer is shown over keyguard, the user cannot even necessarily diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index 610ae2fa8c76f26d641aa11f6fde71ad24fc4f03..6091a59a61161d93429ca3805414ebfac513dc13 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -4195,7 +4195,7 @@ public class XmppConnectionService extends Service { } } - private SharedPreferences getPreferences() { + public SharedPreferences getPreferences() { return PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); } diff --git a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java index 4a6825b8670157ee3999295e68378dabace7f7c7..f04cfa60c0ebdfed3930709a69b6f2662186b29f 100644 --- a/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/SettingsActivity.java @@ -36,6 +36,7 @@ import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.OmemoSetting; import eu.siacs.conversations.entities.Account; +import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.persistance.FileBackend; import eu.siacs.conversations.services.ExportBackupService; import eu.siacs.conversations.services.MemorizingTrustManager; @@ -88,7 +89,26 @@ public class SettingsActivity extends XmppActivity implements OnSharedPreference } @Override - void onBackendConnected() {} + void onBackendConnected() { + boolean diallerIntegrationPossible = false; + + if (Build.VERSION.SDK_INT >= 23) { + outer: + for (Account account : xmppConnectionService.getAccounts()) { + for (Contact contact : account.getRoster().getContacts()) { + if (contact.getPresences().anyIdentity("gateway", "pstn")) { + diallerIntegrationPossible = true; + break outer; + } + } + } + } + if (!diallerIntegrationPossible) { + PreferenceCategory cat = (PreferenceCategory) mSettingsFragment.findPreference("notification_category"); + Preference pref = mSettingsFragment.findPreference("dialler_integration_incoming"); + if (cat != null && pref != null) cat.removePreference(pref); + } + } @Override public void onStart() { diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml index 03de418917da64c9732267e60f48288ea776e069..9485344ead4a839af54c6abdfa1e0a3673dcbb78 100644 --- a/src/main/res/values/defaults.xml +++ b/src/main/res/values/defaults.xml @@ -45,4 +45,5 @@ 360 JABBER_NETWORK false + true diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index b461558364e17a73999bce7a22008292f6275cc0..8f849cdecd23c9a604f34f1207ef85d2abd94235 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -133,6 +133,11 @@ android:ringtoneType="ringtone" android:summary="@string/pref_call_ringtone_summary" android:title="@string/pref_ringtone" /> +