Now requires Android 10 or newer to use Telecom Manager feature to prevent crash due to Android 9 OS bug

This commit is contained in:
Sylvain Berfini 2022-08-24 14:47:42 +02:00
parent 47851c088b
commit dbb21a20e1
7 changed files with 21 additions and 10 deletions

View file

@ -103,7 +103,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
val enableTelecomManagerEvent: MutableLiveData<Event<Boolean>> by lazy {
MutableLiveData<Event<Boolean>>()
}
val api26OrHigher = MutableLiveData<Boolean>()
val api29OrHigher = MutableLiveData<Boolean>()
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

View file

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

View file

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

View file

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

View file

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

View file

@ -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, Context>(::TelecomHelper)

View file

@ -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}"/>