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.extractDomain8import com.peachpasswords.vault.VaultEntry9101112131415161718192021222324252627internal fun resolveAutofillOrigin(context: Context, parsed: ParsedStructure): ParsedStructure {28 val webDomain = parsed.webDomain29 if (webDomain != null) {30 return parsed.copy(originDomains = listOfNotNull(extractDomain(webDomain)), appTitle = null)31 }32 return parsed.copy(33 originDomains = appLinkDomains(context, parsed.packageName),34 appTitle = appLabel(context, parsed.packageName),35 )36}373839internal fun appLabel(context: Context, packageName: String?): String? {40 if (packageName.isNullOrBlank()) return null41 return runCatching {42 context.packageManager.getApplicationLabel(43 context.packageManager.getApplicationInfo(packageName, 0),44 ).toString().takeIf { it.isNotBlank() }45 }.getOrNull()46}474849internal fun appLinkDomains(context: Context, packageName: String?): List<String> {50 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || packageName.isNullOrBlank()) {51 return emptyList()52 }53 return runCatching {54 val state = context.getSystemService(DomainVerificationManager::class.java)55 ?.getDomainVerificationUserState(packageName)56 state?.hostToStateMap.orEmpty()57 .filterValues { it == DomainVerificationUserState.DOMAIN_STATE_VERIFIED }58 .keys59 .mapNotNull { extractDomain(it.removePrefix("*.")) }60 .distinct()61 .sorted()62 }.getOrDefault(emptyList())63}6465666768697071internal fun rememberOfferDomains(entry: VaultEntry, parsed: ParsedStructure): List<String> {72 val existing = sequenceOf(entry.url)73 .plus(entry.additionalUrls.orEmpty().asSequence())74 .filterNotNull()75 .mapNotNull(::extractDomain)76 .toSet()77 if (existing.isEmpty() || parsed.originDomains.isEmpty()) return emptyList()78 return parsed.originDomains.filter { it !in existing }79}