From 86ef2baacabb6a65db733ecc3e3387317521abe4 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Wed, 4 Dec 2024 09:27:36 +0100 Subject: [PATCH] add setting for call integration --- CHANGELOG.md | 2 +- .../java/eu/siacs/conversations/AppSettings.java | 5 +++++ .../conversations/services/CallIntegration.java | 15 ++++++++------- .../settings/NotificationsSettingsFragment.java | 9 +++++---- src/main/res/drawable/ic_mobile_friendly_24dp.xml | 10 ++++++++++ src/main/res/values/defaults.xml | 1 + src/main/res/values/strings.xml | 2 ++ src/main/res/xml/preferences_notifications.xml | 8 ++++++-- 8 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 src/main/res/drawable/ic_mobile_friendly_24dp.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 554360daee85ec3f18df274b9757e53eccd347b8..8d1737a627e954721dd014a064d2853628125720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ### Version 2.17.5 * Move message bubbles closer together instead of merging them -* Add ability to hide avatars in chat views when not stricly necessary (Settings -> Interface -> Chat Bubbles -> Show avatars) +* Add ability to hide avatars in chat view when not strictly necessary (Settings -> Interface -> Chat Bubbles -> Show avatars) ### Version 2.17.4 diff --git a/src/main/java/eu/siacs/conversations/AppSettings.java b/src/main/java/eu/siacs/conversations/AppSettings.java index 2ce12e3278b28982b952d74061550a20ffd7a7c2..c1d021af86345d8d1aa480fc5e593d97440de0f5 100644 --- a/src/main/java/eu/siacs/conversations/AppSettings.java +++ b/src/main/java/eu/siacs/conversations/AppSettings.java @@ -43,6 +43,7 @@ public class AppSettings { public static final String COLORFUL_CHAT_BUBBLES = "use_green_background"; public static final String LARGE_FONT = "large_font"; public static final String SHOW_AVATARS = "show_avatars"; + public static final String CALL_INTEGRATION = "call_integration"; private static final String ACCEPT_INVITES_FROM_STRANGERS = "accept_invites_from_strangers"; private static final String INSTALLATION_ID = "im.conversations.android.install_id"; @@ -110,6 +111,10 @@ public class AppSettings { return getBooleanPreference(SHOW_AVATARS, R.bool.show_avatars); } + public boolean isCallIntegration() { + return getBooleanPreference(CALL_INTEGRATION, R.bool.call_integration); + } + public boolean isUseTor() { return getBooleanPreference(USE_TOR, R.bool.use_tor); } diff --git a/src/main/java/eu/siacs/conversations/services/CallIntegration.java b/src/main/java/eu/siacs/conversations/services/CallIntegration.java index ae9e14c0cb78e105603676c84024d323da463146..ad19af3638d1b19373a0719c29571f68fd028052 100644 --- a/src/main/java/eu/siacs/conversations/services/CallIntegration.java +++ b/src/main/java/eu/siacs/conversations/services/CallIntegration.java @@ -12,22 +12,19 @@ import android.telecom.CallEndpoint; import android.telecom.Connection; import android.telecom.DisconnectCause; import android.util.Log; - import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; - import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; - +import eu.siacs.conversations.AppSettings; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; import eu.siacs.conversations.ui.util.MainThreadExecutor; import eu.siacs.conversations.xmpp.Jid; import eu.siacs.conversations.xmpp.jingle.JingleConnectionManager; import eu.siacs.conversations.xmpp.jingle.Media; - import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -46,7 +43,7 @@ public class CallIntegration extends Connection { * SecurityException */ private static final List BROKEN_DEVICE_MODELS = - Arrays.asList("gtaxlwifi", "a5y17lte", "YT-X705F"); + Arrays.asList("gtaxlwifi", "a5y17lte", "YT-X705F", "HWAGS2"); /** * all Realme devices at least up to and including Android 11 are broken @@ -525,13 +522,17 @@ public class CallIntegration extends Connection { return selfManaged(context); } - public static boolean selfManaged(final Context context) { + public static boolean selfManagedAvailable(final Context context) { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && Build.VERSION.SDK_INT < 35 && hasSystemFeature(context) && isDeviceModelSupported(); } + public static boolean selfManaged(final Context context) { + return selfManagedAvailable(context) && new AppSettings(context).isCallIntegration(); + } + public static boolean hasSystemFeature(final Context context) { final var packageManager = context.getPackageManager(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { @@ -559,7 +560,7 @@ public class CallIntegration extends Connection { } // SailfishOS's AppSupport do not support Call Integration if (Build.MODEL.endsWith("(AppSupport)")) { - return false; + return false; } return true; } diff --git a/src/main/java/eu/siacs/conversations/ui/fragment/settings/NotificationsSettingsFragment.java b/src/main/java/eu/siacs/conversations/ui/fragment/settings/NotificationsSettingsFragment.java index e0d2ced3c6e3b3cc5193d2ecc7b0720217ddfee9..624152a7e5c91dc316989609845b985059abdb28 100644 --- a/src/main/java/eu/siacs/conversations/ui/fragment/settings/NotificationsSettingsFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/fragment/settings/NotificationsSettingsFragment.java @@ -10,17 +10,15 @@ import android.os.Bundle; import android.provider.Settings; import android.util.Log; import android.widget.Toast; - import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.Preference; - import com.google.common.base.Optional; - import eu.siacs.conversations.AppSettings; import eu.siacs.conversations.Config; import eu.siacs.conversations.R; +import eu.siacs.conversations.services.CallIntegration; import eu.siacs.conversations.services.NotificationService; import eu.siacs.conversations.ui.activity.result.PickRingtone; import eu.siacs.conversations.utils.Compatibility; @@ -66,13 +64,15 @@ public class NotificationsSettingsFragment extends XmppPreferenceFragment { final var notificationVibrate = findPreference(AppSettings.NOTIFICATION_VIBRATE); final var notificationLed = findPreference(AppSettings.NOTIFICATION_LED); final var foregroundService = findPreference(AppSettings.KEEP_FOREGROUND_SERVICE); + final var callIntegration = findPreference(AppSettings.CALL_INTEGRATION); if (messageNotificationSettings == null || fullscreenNotification == null || notificationRingtone == null || notificationHeadsUp == null || notificationVibrate == null || notificationLed == null - || foregroundService == null) { + || foregroundService == null + || callIntegration == null) { throw new IllegalStateException("The preference resource file is missing preferences"); } if (Compatibility.runsTwentySix()) { @@ -91,6 +91,7 @@ public class NotificationsSettingsFragment extends XmppPreferenceFragment { .canUseFullScreenIntent()) { fullscreenNotification.setVisible(false); } + callIntegration.setVisible(CallIntegration.selfManagedAvailable(requireContext())); } @Override diff --git a/src/main/res/drawable/ic_mobile_friendly_24dp.xml b/src/main/res/drawable/ic_mobile_friendly_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..3c1b49c7d28586a66d7538a0eb5fb95882a2404f --- /dev/null +++ b/src/main/res/drawable/ic_mobile_friendly_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/src/main/res/values/defaults.xml b/src/main/res/values/defaults.xml index 5e57731222165a135019ca6131604be0fe760706..ca09b233ea90e935e613a3693afbc86096a31c05 100644 --- a/src/main/res/values/defaults.xml +++ b/src/main/res/values/defaults.xml @@ -48,4 +48,5 @@ up.conversations.im none false + true diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index eac59070a1cef8de8a847d29cdd7b9f01a3ddbd2..f9d50a7aab1b1ba8014de726135f9ff979d568ae 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1093,4 +1093,6 @@ Chat bubbles Background color, Font size, Avatars Chat Bubbles + Call integration + Calls from this app interact with regular phone calls, such as ending one call when another starts. diff --git a/src/main/res/xml/preferences_notifications.xml b/src/main/res/xml/preferences_notifications.xml index da505b65f4c87a4738fa7831f3c118ae56bcaa5b..c02633c210646d5f1aed70c4d796ee9403ef5eba 100644 --- a/src/main/res/xml/preferences_notifications.xml +++ b/src/main/res/xml/preferences_notifications.xml @@ -38,8 +38,6 @@ android:key="led" android:summary="@string/pref_led_summary" android:title="@string/pref_led" /> - - +