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)

This commit is contained in:
Sylvain Berfini 2022-11-07 16:42:40 +01:00
parent 68fb96e3a1
commit 5bb5bd16ae

View file

@ -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<PhoneAccountHandle> =
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<PhoneAccountHandle> =
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)")
}