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 47aa8e3a12
commit 04e8c3566b
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 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

View file

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

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

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

View file

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

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

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