Repository navigation
Conversation
The research preset turned off DoT blocking. With Android's Private DNS on "Automatic", Android then upgrades to DoT against the resolvers the VPN advertises, TrackerControl sees no plaintext DNS, and nothing is blocked in any mode while SNI still records trackers as allowed (#968). - Keep "Block Android's Private DNS" on in every onboarding preset. - Warn when Private DNS is active on the VPN network (LinkProperties.isPrivateDnsActive), without needing the full traffic log. Re-check 30 s after the VPN comes up and after block_dot changes, since Android validates DoT asynchronously. - In SNI attribution, store the tracker name that matched (the CNAME target for cloaked trackers) so the timeline and Protection screen find the row again, and keep the shared-IP mark that explains why standard mode allowed the contact. Claude-Session: https://claude.ai/code/session_01WgbtBAKqNxgmeXSPtUoXxp
kasnder
marked this pull request as ready for review
October 8, 2026 14:32
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Addresses #968: the statistics say nothing was blocked and show trackers as "Allowed", whatever the blocking mode.
I couldn't open the screenshots or the settings XML attached to the issue, so the root cause below is inferred from the code and from the reporter saying they turned on research mode.
Cause
The onboarding research preset set
block_dot=false. When Android's Private DNS is on "Automatic" (the default), Android then switches to DoT against the resolvers the VPN advertises. TrackerControl sees no plaintext DNS, soblockKnownTrackerhas nothing to match by IP and allows everything. SNI logging still names the trackers, so they are recorded as allowed. No warning appeared: the bypass warning only fired for a resolver set by hostname, or with the full traffic log turned on.Changes
Util.isPrivateDnsActiveOnVpnchecksLinkProperties.isPrivateDnsActive()on VPN networks (API 28+). It feeds a newPRIVATE_DNS_WARNING_ACTIVEstate. That state shows a notification and banner which open TrackerControl's settings, and it doesn't need the traffic log. Android validates DoT asynchronously, so there's a one-shot re-check 30 s after the VPN is established and afterblock_dotchanges. Nothing runs periodically, and nothing runs at all while DoT is blocked.uncertainkeepsACCESS_UNCERTAIN_MIXED_TRACKER_AND_NON_TRACKERinstead of being reset to none. Blocking is still decided by IP, and that mark is what explains "Allowed · shared IP".Not in this PR
Testing
./gradlew :app:compileGithubDebugJavaWithJavac: passes.New
ServiceSinkholeSniAttributionTestand a new case inPrivateDnsWarningTest: pass.PrivateDnsBlockedTestandServiceSinkholeCnameEvidenceTest: pass.Full
:app:testGithubDebugUnitTest: 498 tests, 2 failures:TrackerListMinimalTest.detectionOnlyTrackerIsMonitoredRatherThanBlockedOrAllowedTrackerListModeTest.minimalModeRepresentativeDomainsComeFromDuckDuckGoAssetBoth also fail on
masterwithout this change.:app:lintGithubDebug: 0 errors, and no warnings in the touched code.Not tested on a device. Whether
getAllNetworks()exposes TrackerControl's own VPN network on recent Android, given the app excludes itself from it, still needs checking on a real device.https://claude.ai/code/session_01WgbtBAKqNxgmeXSPtUoXxp
Generated by Claude Code