Dialler integration for incoming calls is optional

Stephen Paul Weber created

Change summary

src/cheogram/res/values/strings.xml                                      |  2 
src/main/java/eu/siacs/conversations/services/NotificationService.java   |  2 
src/main/java/eu/siacs/conversations/services/XmppConnectionService.java |  2 
src/main/java/eu/siacs/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(-)

Detailed changes

src/cheogram/res/values/strings.xml 🔗

@@ -25,4 +25,6 @@
     <string name="action_execute">Go</string>
     <string name="pref_theme_oledblack">OLED Black</string>
     <string name="invite_to_app">Invite to Chat</string>
+    <string name="pref_dialler_integration_incoming">Use Phone Accounts for Incoming Calls</string>
+    <string name="pref_dialler_integration_incoming_summary">Incoming calls from phone numbers may ring with your system dialler instead of this app\'s notification settings</string>
 </resources>

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> 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

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() {

src/main/res/values/defaults.xml 🔗

@@ -45,4 +45,5 @@
     <string name="video_compression">360</string>
     <string name="default_channel_discovery">JABBER_NETWORK</string>
     <bool name="prevent_screenshots">false</bool>
+    <bool name="dialler_integration_incoming">true</bool>
 </resources>

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" />
+        <CheckBoxPreference
+            android:defaultValue="@bool/dialler_integration_incoming"
+            android:key="dialler_integration_incoming"
+            android:summary="@string/pref_dialler_integration_incoming_summary"
+            android:title="@string/pref_dialler_integration_incoming" />
     </PreferenceCategory>
     <PreferenceCategory
         android:key="attachments"