From 5bb5bd16aea92af047d17da000e743a982d11944 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 7 Nov 2022 16:42:40 +0100 Subject: [PATCH] Prevent crash if Security Exception is thrown in TelecomHelper.findExistingAccount (see on Oppo running Android 11 asking for READ_PHONE_STATE even if it shoudln't) --- .../org/linphone/telecom/TelecomHelper.kt | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/linphone/telecom/TelecomHelper.kt b/app/src/main/java/org/linphone/telecom/TelecomHelper.kt index 86783e83c..c02a6e8ce 100644 --- a/app/src/main/java/org/linphone/telecom/TelecomHelper.kt +++ b/app/src/main/java/org/linphone/telecom/TelecomHelper.kt @@ -105,22 +105,27 @@ class TelecomHelper private constructor(context: Context) { @SuppressLint("MissingPermission") fun findExistingAccount(context: Context): PhoneAccount? { if (PermissionHelper.required(context).hasReadPhoneStateOrPhoneNumbersPermission()) { - var account: PhoneAccount? = null - val phoneAccountHandleList: List = - telecomManager.selfManagedPhoneAccounts - val connectionService = ComponentName(context, TelecomConnectionService::class.java) - for (phoneAccountHandle in phoneAccountHandleList) { - val phoneAccount: PhoneAccount = telecomManager.getPhoneAccount(phoneAccountHandle) - if (phoneAccountHandle.componentName == connectionService) { - Log.i("[Telecom Helper] Found existing phone account: $phoneAccount") - account = phoneAccount - break + try { + var account: PhoneAccount? = null + val phoneAccountHandleList: List = + telecomManager.selfManagedPhoneAccounts + val connectionService = ComponentName(context, TelecomConnectionService::class.java) + for (phoneAccountHandle in phoneAccountHandleList) { + val phoneAccount: PhoneAccount = + telecomManager.getPhoneAccount(phoneAccountHandle) + if (phoneAccountHandle.componentName == connectionService) { + Log.i("[Telecom Helper] Found existing phone account: $phoneAccount") + account = phoneAccount + break + } } + if (account == null) { + Log.w("[Telecom Helper] Existing phone account not found") + } + return account + } catch (se: SecurityException) { + Log.w("[Telecom Helper] Can't check phone accounts: $se") } - if (account == null) { - Log.w("[Telecom Helper] Existing phone account not found") - } - return account } else { Log.e("[Telecom Helper] Can't search for existing phone account, missing permission(s)") }