diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt index c37e37817..d5e3ed6f9 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/StructureParser.kt @@ -37,28 +37,32 @@ internal class StructureParser(private val structure: AssistStructure) { private var usernameCandidate: AutofillId? = null fun parse(): Result? { - result = Result() - result?.apply { - usernameCandidate = null - mainLoop@ for (i in 0 until structure.windowNodeCount) { - val windowNode = structure.getWindowNodeAt(i) - applicationId = windowNode.title.toString().split("/")[0] - Log.d(TAG, "Autofill applicationId: $applicationId") + try { + result = Result() + result?.apply { + usernameCandidate = null + mainLoop@ for (i in 0 until structure.windowNodeCount) { + val windowNode = structure.getWindowNodeAt(i) + applicationId = windowNode.title.toString().split("/")[0] + Log.d(TAG, "Autofill applicationId: $applicationId") - if (parseViewNode(windowNode.rootViewNode)) - break@mainLoop + if (parseViewNode(windowNode.rootViewNode)) + break@mainLoop + } + // If not explicit username field found, add the field just before password field. + if (usernameId == null && passwordId != null && usernameCandidate != null) + usernameId = usernameCandidate } - // If not explicit username field found, add the field just before password field. - if (usernameId == null && passwordId != null && usernameCandidate != null) - usernameId = usernameCandidate - } - // Return the result only if password field is retrieved - return if (result?.usernameId != null - && result?.passwordId != null) - result - else - null + // Return the result only if password field is retrieved + return if (result?.usernameId != null + && result?.passwordId != null) + result + else + null + } catch (e: Exception) { + return null + } } private fun parseViewNode(node: AssistStructure.ViewNode): Boolean {