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 f95ab222e..70cb856c4 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 fullScreenListener = object : SettingListenerStub() { override fun onBoolValueChanged(newValue: Boolean) { @@ -240,7 +240,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) fullScreen.value = prefs.fullScreenCallUI overlay.value = prefs.showCallOverlay diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index 1bcff76ff..c7a852b00 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -282,11 +282,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 9bb62eedc..20f2d5692 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 d2eea5ffd..29d6ba356 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -85,8 +85,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 f6c7cd6f7..2b8276906 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -387,6 +387,15 @@ class CoreContext(val context: Context, coreConfig: Config) : LifecycleOwner, Vi core.config.setBool("app", "incoming_call_vibration", false) } + // 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 97c901951..4d4b390ce 100644 --- a/app/src/main/res/layout/settings_call_fragment.xml +++ b/app/src/main/res/layout/settings_call_fragment.xml @@ -108,7 +108,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}"/>