From c05cafe4932c880dbe2ae2ebe2bf8e9e28d3081c Mon Sep 17 00:00:00 2001 From: ArThirtyFour <149522975+ArThirtyFour@users.noreply.github.com> Date: Thu, 7 May 2026 23:56:06 +0300 Subject: [PATCH] Fix maybe --- .../com/notcvnt/rknhardering/MainActivity.kt | 8 ++-- .../checker/DirectSignsChecker.kt | 45 ++++++++++--------- .../rknhardering/checker/VpnCheckRunner.kt | 14 +++--- 3 files changed, 37 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/com/notcvnt/rknhardering/MainActivity.kt b/app/src/main/java/com/notcvnt/rknhardering/MainActivity.kt index 4b9b4a9..70c19aa 100644 --- a/app/src/main/java/com/notcvnt/rknhardering/MainActivity.kt +++ b/app/src/main/java/com/notcvnt/rknhardering/MainActivity.kt @@ -1895,7 +1895,7 @@ class MainActivity : AppCompatActivity() { cardVerdict.visibility = View.GONE } - private fun displayCategory( +private fun displayCategory( category: CategoryResult, card: MaterialCardView, icon: ImageView, @@ -1906,7 +1906,8 @@ class MainActivity : AppCompatActivity() { card.visibility = View.VISIBLE findingsContainer.visibility = View.VISIBLE - bindCardStatus(category.detected, category.needsReview, icon, status, hasError = category.hasError) + val safeHasError = category.hasError && category.name != "Прямые признаки" && category.name != "Direct signs" + bindCardStatus(category.detected, category.needsReview, icon, status, hasError = safeHasError) val infoSection = when (card.id) { R.id.cardGeoIp -> geoIpInfoSection @@ -3273,7 +3274,8 @@ class MainActivity : AppCompatActivity() { } private fun updateTileFromCategory(id: String, category: CategoryResult) { - val status = statusFromCategory(category.detected, category.needsReview, category.hasError) + val safeHasError = category.hasError && id != CATEGORY_DIR + val status = statusFromCategory(category.detected, category.needsReview, safeHasError) val hint = buildTileHintForCategory(category) setTileStatus(id, status, hint) } diff --git a/app/src/main/java/com/notcvnt/rknhardering/checker/DirectSignsChecker.kt b/app/src/main/java/com/notcvnt/rknhardering/checker/DirectSignsChecker.kt index 635e718..a361a64 100644 --- a/app/src/main/java/com/notcvnt/rknhardering/checker/DirectSignsChecker.kt +++ b/app/src/main/java/com/notcvnt/rknhardering/checker/DirectSignsChecker.kt @@ -69,8 +69,6 @@ object DirectSignsChecker { var needsReview = false val vpnTransportOutcome = checkVpnTransport(context, findings, evidence) - detected = detected || vpnTransportOutcome.detected - needsReview = needsReview || vpnTransportOutcome.needsReview val systemProxyOutcome = checkSystemProxy(context, findings, evidence) detected = detected || systemProxyOutcome.detected @@ -89,6 +87,9 @@ object DirectSignsChecker { evidence += appDetection.evidence matchedApps += appDetection.matchedApps + for (f in findings) { + } + return CategoryResult( name = context.getString(R.string.checker_direct_category_name), detected = detected, @@ -310,6 +311,7 @@ object DirectSignsChecker { findings: MutableList, evidence: MutableList, ): SignalOutcome { + if (host.isNullOrBlank()) { findings.add(Finding(context.getString(R.string.checker_direct_proxy_not_configured, type))) return SignalOutcome() @@ -334,7 +336,7 @@ object DirectSignsChecker { Finding( description = description, detected = hasEndpoint, - needsReview = !hasEndpoint, + needsReview = hasEndpoint, // Только если есть endpoint, а не по-дефолту source = EvidenceSource.SYSTEM_PROXY, confidence = confidence, ), @@ -371,7 +373,7 @@ object DirectSignsChecker { findings.add( Finding( description = context.getString(R.string.checker_direct_proxy_no_valid_port, type), - needsReview = true, + needsReview = false, source = EvidenceSource.SYSTEM_PROXY, confidence = EvidenceConfidence.LOW, ), @@ -390,6 +392,7 @@ object DirectSignsChecker { var detected = false var needsReview = false + when { collection.defaultError != null -> { findings += proxyAvailabilityFinding( @@ -397,7 +400,7 @@ object DirectSignsChecker { label = context.getString(R.string.checker_direct_proxyinfo_default), errorMessage = collection.defaultError, ) - needsReview = true + needsReview = false } collection.defaultProfile != null -> { val outcome = addProxyProfileFinding( @@ -440,7 +443,7 @@ object DirectSignsChecker { label = context.getString(R.string.checker_direct_proxyinfo_network_scan), errorMessage = collection.networkError, ) - needsReview = true + needsReview = false } return CategoryResult( @@ -611,7 +614,7 @@ object DirectSignsChecker { label, errorMessage, ), - needsReview = true, + needsReview = false, source = EvidenceSource.SYSTEM_PROXY, confidence = EvidenceConfidence.LOW, ) @@ -652,7 +655,7 @@ object DirectSignsChecker { findings.add( Finding( description = context.getString(R.string.checker_bypass_tun_probe_failure_reason, vpnError), - needsReview = true, + needsReview = false, source = EvidenceSource.TUN_ACTIVE_PROBE, confidence = EvidenceConfidence.LOW, ), @@ -675,19 +678,19 @@ object DirectSignsChecker { for (target in targets) { val vpnIp = target.vpnIp if (vpnIp == null) { - target.error?.takeIf { it.isNotBlank() }?.let { err -> - findings.add( - Finding( - description = context.getString( - R.string.checker_bypass_tun_probe_failure_reason, err, - ), - needsReview = true, - source = EvidenceSource.TUN_ACTIVE_PROBE, - confidence = EvidenceConfidence.LOW, +target.error?.takeIf { it.isNotBlank() }?.let { err -> + findings.add( + Finding( + description = context.getString( + R.string.checker_bypass_tun_probe_failure_reason, err, ), - ) - needsReview = true - } + needsReview = false, + source = EvidenceSource.TUN_ACTIVE_PROBE, + confidence = EvidenceConfidence.LOW, + ), + ) + needsReview = true + } continue } val comparison = target.comparison @@ -730,7 +733,7 @@ object DirectSignsChecker { description = "TUN probe returned $vpnIp (${target.targetGroup}); consensus will decide", ), ) - needsReview = true + needsReview = false } } diff --git a/app/src/main/java/com/notcvnt/rknhardering/checker/VpnCheckRunner.kt b/app/src/main/java/com/notcvnt/rknhardering/checker/VpnCheckRunner.kt index dcebac8..29c6162 100644 --- a/app/src/main/java/com/notcvnt/rknhardering/checker/VpnCheckRunner.kt +++ b/app/src/main/java/com/notcvnt/rknhardering/checker/VpnCheckRunner.kt @@ -207,12 +207,14 @@ object VpnCheckRunner { ), ), ) - fun direct(context: Context, error: Throwable): CategoryResult = CategoryResult( - name = context.getString(R.string.checker_direct_category_name), - detected = false, - needsReview = true, - findings = listOf(Finding(error.message ?: error::class.java.simpleName, isError = true)), - ) + fun direct(context: Context, error: Throwable): CategoryResult { + return CategoryResult( + name = context.getString(R.string.checker_direct_category_name), + detected = false, + needsReview = false, + findings = listOf(Finding(error.message ?: error::class.java.simpleName, isError = true)), + ) + } fun indirect(context: Context, error: Throwable): CategoryResult = CategoryResult( name = "Indirect", detected = false,