diff --git a/CHANGELOG.md b/CHANGELOG.md index bef52e2e0..679896935 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,7 +49,7 @@ This version is a full rewrite of the app in kotlin, using modern Android compon ### Removed -- "back-to-call" button from dialer & chat views, use notification or overlay (see call settings) +- "back-to-call" button from dialer & chat views, use notification or overlay (see call settings for in-app/system-wide overlay) - Don't ask for "Do not disturb settings" permission anymore - Previous translations, starting again from scratch using Weblate instead of Transifex diff --git a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt index 1efdb43b4..08e6a751e 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/fragments/CallSettingsFragment.kt @@ -50,7 +50,7 @@ class CallSettingsFragment : GenericFragment() { binding.setBackClickListener { findNavController().popBackStack() } binding.back.visibility = if (resources.getBoolean(R.bool.isTablet)) View.INVISIBLE else View.VISIBLE - viewModel.overlayEnabledEvent.observe(viewLifecycleOwner, { + viewModel.systemWideOverlayEnabledEvent.observe(viewLifecycleOwner, { it.consume { if (!Compatibility.canDrawOverlay(requireContext())) { val intent = Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse("package:${requireContext().packageName}")) @@ -81,7 +81,7 @@ class CallSettingsFragment : GenericFragment() { super.onActivityResult(requestCode, resultCode, data) if (!Compatibility.canDrawOverlay(requireContext())) { - viewModel.overlayListener.onBoolValueChanged(false) + viewModel.systemWideOverlayListener.onBoolValueChanged(false) } } } diff --git a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt index 2c44cf1f6..12b842006 100644 --- a/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/settings/viewmodels/CallSettingsViewModel.kt @@ -68,14 +68,21 @@ class CallSettingsViewModel : GenericSettingsViewModel() { val overlayListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { - if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) { - if (newValue) overlayEnabledEvent.value = Event(true) - } prefs.showCallOverlay = newValue } } val overlay = MutableLiveData() - val overlayEnabledEvent = MutableLiveData>() + + val systemWideOverlayListener = object : SettingListenerStub() { + override fun onBoolValueChanged(newValue: Boolean) { + if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) { + if (newValue) systemWideOverlayEnabledEvent.value = Event(true) + } + prefs.systemWideCallOverlay = newValue + } + } + val systemWideOverlay = MutableLiveData() + val systemWideOverlayEnabledEvent = MutableLiveData>() val sipInfoDtmfListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { @@ -162,6 +169,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { fullScreen.value = prefs.fullScreenCallUI overlay.value = prefs.showCallOverlay + systemWideOverlay.value = prefs.systemWideCallOverlay sipInfoDtmf.value = core.useInfoForDtmf rfc2833Dtmf.value = core.useRfc2833ForDtmf autoStart.value = prefs.callRightAway diff --git a/app/src/main/java/org/linphone/activities/main/viewmodels/CallOverlayViewModel.kt b/app/src/main/java/org/linphone/activities/main/viewmodels/CallOverlayViewModel.kt index 07e573b0b..dbe6d05a3 100644 --- a/app/src/main/java/org/linphone/activities/main/viewmodels/CallOverlayViewModel.kt +++ b/app/src/main/java/org/linphone/activities/main/viewmodels/CallOverlayViewModel.kt @@ -48,7 +48,9 @@ class CallOverlayViewModel : ViewModel() { } init { - displayCallOverlay.value = coreContext.core.callsNb > 0 + displayCallOverlay.value = corePreferences.showCallOverlay && + !corePreferences.systemWideCallOverlay && + coreContext.core.callsNb > 0 coreContext.core.addListener(listener) } @@ -60,8 +62,8 @@ class CallOverlayViewModel : ViewModel() { } private fun createCallOverlay() { - // If system-wide call overlay is enabled or if already visible, abort - if (corePreferences.showCallOverlay) { + // If overlay is disabled or if system-wide call overlay is enabled, abort + if (!corePreferences.showCallOverlay || corePreferences.systemWideCallOverlay) { return } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index d0f42699e..1d6dabc59 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -517,7 +517,7 @@ class CoreContext(val context: Context, coreConfig: Config) { } fun createCallOverlay() { - if (!corePreferences.showCallOverlay || callOverlay != null) { + if (!corePreferences.showCallOverlay || !corePreferences.systemWideCallOverlay || callOverlay != null) { return } diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index a399b6ab4..45a6989bb 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -239,12 +239,20 @@ class CorePreferences constructor(private val context: Context) { config.setInt("app", "auto_answer_delay", value) } + // Show overlay inside of application var showCallOverlay: Boolean - get() = config.getBool("app", "call_overlay", false) + get() = config.getBool("app", "call_overlay", true) set(value) { config.setBool("app", "call_overlay", value) } + // Show overlay even when app is in background, requires permission + var systemWideCallOverlay: Boolean + get() = config.getBool("app", "system_wide_call_overlay", false) + set(value) { + config.setBool("app", "system_wide_call_overlay", value) + } + var callRightAway: Boolean get() = config.getBool("app", "call_right_away", false) set(value) { diff --git a/app/src/main/res/layout-land/main_activity_content.xml b/app/src/main/res/layout-land/main_activity_content.xml index 8025ec968..c27810590 100644 --- a/app/src/main/res/layout-land/main_activity_content.xml +++ b/app/src/main/res/layout-land/main_activity_content.xml @@ -3,12 +3,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> - - - - - - diff --git a/app/src/main/res/layout/call_overlay.xml b/app/src/main/res/layout/call_overlay.xml index 3baf5d08a..1ba09c4cd 100644 --- a/app/src/main/res/layout/call_overlay.xml +++ b/app/src/main/res/layout/call_overlay.xml @@ -9,13 +9,13 @@ + layout="@layout/main_activity_content"/> + + diff --git a/app/src/main/res/layout/main_activity_content.xml b/app/src/main/res/layout/main_activity_content.xml index e6743d451..9b969c525 100644 --- a/app/src/main/res/layout/main_activity_content.xml +++ b/app/src/main/res/layout/main_activity_content.xml @@ -3,12 +3,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> - - - - - - diff --git a/app/src/main/res/layout/settings_call_fragment.xml b/app/src/main/res/layout/settings_call_fragment.xml index 165b60971..9c32ea268 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -109,6 +109,14 @@ linphone:listener="@{viewModel.overlayListener}" linphone:checked="@={viewModel.overlay}"/> + + DTLS La encriptación de los medios es obligatoria Notificación de llamada superpuesta - Se le pedirá que conceda el permiso de superposición + Se le pedirá que conceda el permiso de superposición Enviar DTMF en banda (RFC 2833) Comienza la llamada inmediatamente Respuesta automática a las llamadas entrantes diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f2045383c..638acbb17 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -554,7 +554,7 @@ <Censuré> Envoyer le son vers le haut-parleur Notification d\'appel flottante - Une autorisation explicite est requise + Une autorisation explicite est requise Marquer comme lu lorsque la notification est supprimée Seront remplacés par les raccourcis de contacts si activés Transport @@ -586,4 +586,5 @@ Paramètres de deboggage Autres paramètres + Afficher la notification flottante en dehors de l\'app \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 0150cc16b..c51d1a21e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -71,7 +71,7 @@ 每秒帧数(FPS)偏好设置 媒体加密 重叠来电通知 - 系统将要求您授予重叠权限 + 系统将要求您授予重叠权限 发送带外DTMFs(SIP INFO) 发送带内DTMFs(RFC 2833) 毫秒 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1d6d2b9da..f6d8bc68b 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -293,7 +293,7 @@ SRTP 安全實時傳輸協議 ZRTP 密鑰 DTLS 數據包傳輸層安全性協議 - 系統將要求您授予重疊權限 + 系統將要求您授予重疊權限 發送帶内DTMFs(RFC 2833) 立即開始通話 如果從其他應用程序開始,則通話將自動開始 diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index c55108cf2..a66cf73be 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -20,4 +20,5 @@ 240dp 20dp 3dp + 60dp \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5ab97422..bd2f529c0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -399,7 +399,9 @@ Full screen app while in call Hides status and navigation bars Overlay call notification - You will be asked to grant overlay permission + + Show overlay outside of app + You will be asked to grant overlay permission Send out-band DTMFs (SIP INFO) Send in-band DTMFs (RFC 2833)