From a3445b4f5b6e2f03b469e7d9b8ec16556496cc1f Mon Sep 17 00:00:00 2001 From: Cristian Monforte Date: Thu, 27 Feb 2025 16:18:10 +0100 Subject: [PATCH] add fallback logic to extract package id from window node --- .../autofill/impl/service/AutofillParser.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/service/AutofillParser.kt b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/service/AutofillParser.kt index fae751bab723..3757083bd740 100644 --- a/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/service/AutofillParser.kt +++ b/autofill/autofill-impl/src/main/java/com/duckduckgo/autofill/impl/service/AutofillParser.kt @@ -19,9 +19,9 @@ package com.duckduckgo.autofill.impl.service import android.annotation.SuppressLint import android.app.assist.AssistStructure import android.app.assist.AssistStructure.ViewNode +import android.app.assist.AssistStructure.WindowNode import android.view.autofill.AutofillId import com.duckduckgo.appbuildconfig.api.AppBuildConfig -import com.duckduckgo.autofill.impl.service.AutofillFieldType.UNKNOWN import com.duckduckgo.di.scopes.AppScope import com.squareup.anvil.annotations.ContributesBinding import dagger.SingleInstanceIn @@ -72,7 +72,13 @@ class RealAutofillParser @Inject constructor( val windowNode = structure.getWindowNodeAt(i) windowNode.rootViewNode?.let { viewNode -> autofillRootNodes.add( - traverseViewNode(viewNode).convertIntoAutofillNode(), + traverseViewNode(viewNode).convertIntoAutofillNode().let { rootNode -> + if (rootNode.packageId.isNullOrBlank()) { + rootNode.copy(packageId = extractPackageFromTitle(windowNode)) + } else { + rootNode + } + }, ) } } @@ -116,6 +122,11 @@ class RealAutofillParser @Inject constructor( ) } + private fun extractPackageFromTitle(windowNode: WindowNode): String? { + // window node title format looks like: packageId/ActivityName + return windowNode.title.takeUnless { it.isNullOrBlank() }?.split('/')?.firstOrNull() + } + private fun ViewNode.validPackageId(): String? { return this.idPackage .takeUnless { it.isNullOrBlank() }