1package com.peachpasswords.autofill23import android.content.Context4import android.content.pm.verify.domain.DomainVerificationManager5import android.content.pm.verify.domain.DomainVerificationUserState6import android.os.Build7import com.peachpasswords.shared.extractDomain891011121314151617181920212223242526internal fun resolveAutofillOrigin(context: Context, parsed: ParsedStructure): ParsedStructure {27 val webDomain = parsed.webDomain28 if (webDomain != null) {29 return parsed.copy(originDomains = listOfNotNull(extractDomain(webDomain)), appTitle = null)30 }31 return parsed.copy(32 originDomains = appLinkDomains(context, parsed.packageName),33 appTitle = appLabel(context, parsed.packageName),34 )35}363738internal fun appLabel(context: Context, packageName: String?): String? {39 if (packageName.isNullOrBlank()) return null40 return runCatching {41 context.packageManager.getApplicationLabel(42 context.packageManager.getApplicationInfo(packageName, 0),43 ).toString().takeIf { it.isNotBlank() }44 }.getOrNull()45}464748internal fun appLinkDomains(context: Context, packageName: String?): List<String> {49 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || packageName.isNullOrBlank()) {50 return emptyList()51 }52 return runCatching {53 val state = context.getSystemService(DomainVerificationManager::class.java)54 ?.getDomainVerificationUserState(packageName)55 state?.hostToStateMap.orEmpty()56 .filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED }57 .keys58 .mapNotNull { extractDomain(it.removePrefix("*.")) }59 .distinct()60 .sorted()61 }.getOrDefault(emptyList())62}