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:
parent
47aa8e3a12
commit
04e8c3566b
7 changed files with 21 additions and 10 deletions
|
@ -103,7 +103,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
|
||||||
val enableTelecomManagerEvent: MutableLiveData<Event<Boolean>> by lazy {
|
val enableTelecomManagerEvent: MutableLiveData<Event<Boolean>> by lazy {
|
||||||
MutableLiveData<Event<Boolean>>()
|
MutableLiveData<Event<Boolean>>()
|
||||||
}
|
}
|
||||||
val api26OrHigher = MutableLiveData<Boolean>()
|
val api29OrHigher = MutableLiveData<Boolean>()
|
||||||
|
|
||||||
val overlayListener = object : SettingListenerStub() {
|
val overlayListener = object : SettingListenerStub() {
|
||||||
override fun onBoolValueChanged(newValue: Boolean) {
|
override fun onBoolValueChanged(newValue: Boolean) {
|
||||||
|
@ -238,7 +238,7 @@ class CallSettingsViewModel : GenericSettingsViewModel() {
|
||||||
encryptionMandatory.value = core.isMediaEncryptionMandatory
|
encryptionMandatory.value = core.isMediaEncryptionMandatory
|
||||||
|
|
||||||
useTelecomManager.value = prefs.useTelecomManager
|
useTelecomManager.value = prefs.useTelecomManager
|
||||||
api26OrHigher.value = Version.sdkAboveOrEqual(Version.API26_O_80)
|
api29OrHigher.value = Version.sdkAboveOrEqual(Version.API29_ANDROID_10)
|
||||||
|
|
||||||
overlay.value = prefs.showCallOverlay
|
overlay.value = prefs.showCallOverlay
|
||||||
systemWideOverlay.value = prefs.systemWideCallOverlay
|
systemWideOverlay.value = prefs.systemWideCallOverlay
|
||||||
|
|
|
@ -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 {
|
fun getImeFlagsForSecureChatRoom(): Int {
|
||||||
return EditorInfo.IME_FLAG_NO_EXTRACT_UI or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
|
return EditorInfo.IME_FLAG_NO_EXTRACT_UI or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,11 @@ class Api29Compatibility {
|
||||||
return granted
|
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(
|
fun createMessageChannel(
|
||||||
context: Context,
|
context: Context,
|
||||||
notificationManager: NotificationManagerCompat
|
notificationManager: NotificationManagerCompat
|
||||||
|
|
|
@ -84,8 +84,10 @@ class Compatibility {
|
||||||
fun hasTelecomManagerPermissions(context: Context): Boolean {
|
fun hasTelecomManagerPermissions(context: Context): Boolean {
|
||||||
return if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) {
|
return if (Version.sdkAboveOrEqual(Version.API30_ANDROID_11)) {
|
||||||
Api30Compatibility.hasTelecomManagerPermission(context)
|
Api30Compatibility.hasTelecomManagerPermission(context)
|
||||||
|
} else if (Version.sdkAboveOrEqual(Version.API29_ANDROID_10)) {
|
||||||
|
Api29Compatibility.hasTelecomManagerPermission(context)
|
||||||
} else {
|
} else {
|
||||||
Api26Compatibility.hasTelecomManagerPermission(context)
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -394,6 +394,15 @@ class CoreContext(
|
||||||
core.config.setBool("app", "conference_migration", true)
|
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()
|
initUserCertificates()
|
||||||
|
|
||||||
computeUserAgent()
|
computeUserAgent()
|
||||||
|
|
|
@ -41,7 +41,7 @@ import org.linphone.utils.LinphoneUtils
|
||||||
import org.linphone.utils.PermissionHelper
|
import org.linphone.utils.PermissionHelper
|
||||||
import org.linphone.utils.SingletonHolder
|
import org.linphone.utils.SingletonHolder
|
||||||
|
|
||||||
@TargetApi(26)
|
@TargetApi(29)
|
||||||
class TelecomHelper private constructor(context: Context) {
|
class TelecomHelper private constructor(context: Context) {
|
||||||
companion object : SingletonHolder<TelecomHelper, Context>(::TelecomHelper)
|
companion object : SingletonHolder<TelecomHelper, Context>(::TelecomHelper)
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@
|
||||||
layout="@layout/settings_widget_switch"
|
layout="@layout/settings_widget_switch"
|
||||||
linphone:title="@{@string/call_settings_use_telecom_manager_title}"
|
linphone:title="@{@string/call_settings_use_telecom_manager_title}"
|
||||||
linphone:subtitle="@{@string/call_settings_use_telecom_manager_summary}"
|
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:listener="@{viewModel.useTelecomManagerListener}"
|
||||||
linphone:checked="@={viewModel.useTelecomManager}"/>
|
linphone:checked="@={viewModel.useTelecomManager}"/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue