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 7d99c7d7d..6bc91ed3d 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 @@ -103,7 +103,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { val enableTelecomManagerEvent: MutableLiveData> by lazy { MutableLiveData>() } - val api26OrHigher = MutableLiveData() + val api29OrHigher = MutableLiveData() val overlayListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { @@ -238,7 +238,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() { encryptionMandatory.value = core.isMediaEncryptionMandatory useTelecomManager.value = prefs.useTelecomManager - api26OrHigher.value = Version.sdkAboveOrEqual(Version.API26_O_80) + api29OrHigher.value = Version.sdkAboveOrEqual(Version.API29_ANDROID_10) overlay.value = prefs.showCallOverlay systemWideOverlay.value = prefs.systemWideCallOverlay diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index 3c0483d97..735582e1d 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -341,11 +341,6 @@ class Api26Compatibility { ) } - fun hasTelecomManagerPermission(context: Context): Boolean { - return Compatibility.hasPermission(context, Manifest.permission.READ_PHONE_STATE) && - Compatibility.hasPermission(context, Manifest.permission.MANAGE_OWN_CALLS) - } - fun getImeFlagsForSecureChatRoom(): Int { return EditorInfo.IME_FLAG_NO_EXTRACT_UI or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING } diff --git a/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt index 70d64f6d8..20ff3c63d 100644 --- a/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api29Compatibility.kt @@ -56,6 +56,11 @@ class Api29Compatibility { return granted } + fun hasTelecomManagerPermission(context: Context): Boolean { + return Compatibility.hasPermission(context, Manifest.permission.READ_PHONE_STATE) && + Compatibility.hasPermission(context, Manifest.permission.MANAGE_OWN_CALLS) + } + fun createMessageChannel( context: Context, notificationManager: NotificationManagerCompat diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 9c98a1dcc..0239820fd 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -84,8 +84,10 @@ class Compatibility { fun hasTelecomManagerPermissions(context: Context): Boolean { return if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) { Api30Compatibility.hasTelecomManagerPermission(context) + } else if (Version.sdkAboveOrEqual(Version.API29_ANDROID_10)) { + Api29Compatibility.hasTelecomManagerPermission(context) } else { - Api26Compatibility.hasTelecomManagerPermission(context) + false } } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 1ae3a2899..01353b836 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -394,6 +394,15 @@ class CoreContext( core.config.setBool("app", "conference_migration", true) } + // Disable Telecom Manager on Android < 10 to prevent crash due to OS bug in Android 9 + if (Version.sdkStrictlyBelow(Version.API29_ANDROID_10)) { + if (corePreferences.useTelecomManager) { + Log.w("[Context] Android < 10 detected, disabling telecom manager to prevent crash due to OS bug") + } + corePreferences.useTelecomManager = false + corePreferences.manuallyDisabledTelecomManager = true + } + initUserCertificates() computeUserAgent() diff --git a/app/src/main/java/org/linphone/telecom/TelecomHelper.kt b/app/src/main/java/org/linphone/telecom/TelecomHelper.kt index 4cf9c216b..aa2a6afaa 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomHelper.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomHelper.kt @@ -41,7 +41,7 @@ import org.linphone.utils.LinphoneUtils import org.linphone.utils.PermissionHelper import org.linphone.utils.SingletonHolder -@TargetApi(26) +@TargetApi(29) class TelecomHelper private constructor(context: Context) { companion object : SingletonHolder(::TelecomHelper) diff --git a/app/src/main/res/layout/settings_call_fragment.xml b/app/src/main/res/layout/settings_call_fragment.xml index b326c8520..259310a85 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -104,7 +104,7 @@ layout="@layout/settings_widget_switch" linphone:title="@{@string/call_settings_use_telecom_manager_title}" linphone:subtitle="@{@string/call_settings_use_telecom_manager_summary}" - android:visibility="@{viewModel.api26OrHigher ? View.VISIBLE : View.GONE}" + android:visibility="@{viewModel.api29OrHigher ? View.VISIBLE : View.GONE}" linphone:listener="@{viewModel.useTelecomManagerListener}" linphone:checked="@={viewModel.useTelecomManager}"/>