Skip to content

Conversation

Copy link
Contributor

Copilot AI commented Jan 10, 2026

Integration of DuckDuckGo Tracker Blocklist ✅

This PR successfully integrates the DuckDuckGo Tracker Radar (android-tds.json) into TrackerControl, adding 334 new unique mobile-specific tracker domains to enhance privacy protection.

Completed Tasks:

  • Analyze existing tracker loading system in TrackerList.java
  • Understand the format of DuckDuckGo's android-tds.json file
  • Download and add android-tds.json to app/src/main/assets/
  • Implement loadDuckDuckGoTrackers() method in TrackerList.java
  • Update loadTrackers() to call the new loading method
  • Verify JSON parsing and logic with Python validation
  • Analyze overlap with existing tracker lists
  • Update README.md to document the new tracker source
  • Fix category preservation logic to not overwrite Disconnect categories
  • Change default category from Advertisement to UNCATEGORISED

📊 Impact Statistics:

New Coverage:

  • 339 tracker domains added from DuckDuckGo
    • Will be categorized as UNCATEGORISED (blocked trackers) or Content (ignored trackers)
  • 129 unique companies tracked

Complementary Value:

  • 98.5% unique domains not in existing X-Ray list (334 out of 339)
  • 1.5% overlap with X-Ray list (5 domains)
  • Adds mobile-specific tracker detection for ad networks, analytics, and SDKs

🔧 Implementation Details:

Files Changed:

  1. app/src/main/assets/duckduckgo-android-tds.json (NEW, 162KB)

    • Downloaded from DuckDuckGo's official repository
    • Contains mobile-specific tracker mappings
  2. app/src/main/java/net/kollnig/missioncontrol/data/TrackerList.java

    • Added loadDuckDuckGoTrackers() method
    • Updated loadTrackers() to call new loader
    • UPDATED: Now preserves Disconnect categories properly
    • UPDATED: Uses UNCATEGORISED as default category
  3. README.md

    • Updated opening description to mention DuckDuckGo
    • Added credit section with source link

Loading Strategy:

1. loadXrayTrackers()        // 1M+ apps analysis
2. loadDisconnectTrackers()  // Firefox blocklist
3. loadDuckDuckGoTrackers()  // Mobile-specific ← Respects Disconnect categories
4. loadIpBlocklist()         // IP-based blocking

Category Logic:

  • "default": "ignore" → "Content" category
  • "default": "block" → UNCATEGORISED category (not Advertisement)
  • Only overwrites existing trackers if they have "Content" category
  • Preserves all Disconnect category assignments

✅ Recent Updates:

Fixed per reviewer feedback:

  1. ✅ Only overwrite Disconnect's categories if existing category is "Content"
  2. ✅ Changed default category from "Advertisement" to UNCATEGORISED
  3. ✅ Added logic to check existing trackers before adding/overwriting

🎯 Benefits:

  1. Enhanced Mobile Coverage: 334 new tracker domains specific to mobile apps
  2. Better Attribution: Clear company names for all tracked domains
  3. Improved Privacy: More comprehensive blocking of mobile tracking
  4. Category Preservation: Respects existing Disconnect categorization
  5. Standards Compliance: Follows existing code conventions

📚 References:

Original prompt

Consider how to integrate this into the app: https://raw.githubusercontent.com/duckduckgo/tracker-blocklists/main/app/android-tds.json


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Co-authored-by: kasnder <5175206+kasnder@users.noreply.github.com>
Copilot AI changed the title [WIP] Add tracker blocklist integration to application Integrate DuckDuckGo Tracker Radar for mobile-specific tracker detection Jan 10, 2026
Copilot AI requested a review from kasnder January 10, 2026 13:44
@kasnder
Copy link
Member

kasnder commented Jan 10, 2026

Can we only overwrite disconnect's categories if it's "content", otherwise make sure not to overwrite.

@kasnder
Copy link
Member

kasnder commented Jan 10, 2026

Also don't default to Advertisement as category but to uncategorised

@kasnder
Copy link
Member

kasnder commented Jan 13, 2026

@copilot look at comments

@kasnder kasnder marked this pull request as ready for review January 13, 2026 16:34
- Only overwrite if existing category is "Content"
- Change default category from "Advertisement" to UNCATEGORISED
- Check existing trackers before adding to avoid unwanted overwrites

Co-authored-by: kasnder <5175206+kasnder@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 13, 2026

Can we only overwrite disconnect's categories if it's "content", otherwise make sure not to overwrite.

Fixed in commit 14243bf. Now checks if a tracker exists and only overwrites if the existing category is "Content".

Also don't default to Advertisement as category but to uncategorised

Fixed in commit 14243bf. Changed default category from "Advertisement" to UNCATEGORISED.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants