Skip to content
damien-c-dPublic

About

Source patch kit for Da Fit: notification controls, watch-face library, privacy restrictions and optional Health Connect. Build and sign locally.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Da Fit Mod

Community patches for Da Fit 2.9.23-4-g626574b11f (version code 21663): quieter notifications, a watch assistant shortcut, a usable watch-face library, fewer ads/tracking paths, and optional Health Connect sharing.

This is a patch kit, not the original app's source code. Bring your own matching original split APK archive, build locally, and sign the result with your own key. Original/rebuilt APKs, decompiled SDKs, signing keys and phone data are not distributed in this repository. This project is independent of Da Fit, its developer, Google and Anko/Kmart.

Tested with an Anko 43527533 watch and Android 16. Other watches/phones are unverified. The hooks depend on this exact app version; input checksums deliberately reject other builds. The supplied configuration targets ARM64, English and xxhdpi.

What changed, and why

Area Change Reason
“Others” notifications Choose individual installed apps; only selected apps are forwarded. Stock “Others” forwarded unwanted apps and system notifications without a useful selection control.
Notification filtering Suppress media/playback, foreground/ongoing services, progress, group summaries and low-importance notifications. Pausing/resuming music and background activity repeatedly buzzed the watch. Legitimate quiet/ongoing notifications may also be filtered.
App selector App icon beside the name; smaller grey package name underneath. Built-in preset apps are excluded. Easier identification and no confusing overlap between preset switches and “Others.” A built-in app remains controlled by its preset switch, even if that switch is off.
Assistant shortcut Optional camera-shutter → Alexa, Google or default phone assistant. Off restores the camera behaviour. The watch's original “AI Voice” requires the call-audio connection. The remote-camera BLE event is an available alternative trigger. This does not change the original AI Voice button or watch firmware.
Watch faces Save faces to a per-watch phone library; preview/reopen/apply saved entries; remember successful gallery uploads; remove favourites by long press. Gallery navigation made returning to a favourite difficult.
Gallery discovery “View all” loads compatible categories/pages, deduplicates results and searches names/categories/IDs; caches complete catalogue metadata. Stock navigation has no convenient complete catalogue/search. Loading and partial results are labelled.
Initial setup Metric/imperial selector on height and weight setup, with value conversion and persisted units. First-run measurements started in imperial without a nearby switch. Existing profiles are not reset.
Notification wording Clearer English on notification setup and troubleshooting; preserve the restart-access link. The original instructions were confusing.
Advertising Disable identified ad flags/configuration, consent/init paths, launch/interstitial/banner paths and promotional startup. Remove related manifest registrations. Avoid ads, unsolicited SDK startup and ad requests containing phone/watch metadata.
Analytics and reporting Disable identified Firebase tracking/user properties, delivery metrics, token/device reports and legacy upload helpers; remove related providers/services. Disable verbose persistent/BLE logging startup. Reduce identified telemetry paths and unnecessary local logging. Existing logs are not erased.
Network restrictions Allow reviewed HTTPS core face/weather/firmware/assets routes; reject unknown hosts, reporting routes, cleartext and unexpected methods. Check OkHttp redirect hops; guard bundled URL connections and WebView loads. Disabling SDK init alone is insufficient protection against other request paths.
Health sharing Replace direct Google Fit UI/sync with optional, write-only Android Health Connect. Separate selections and Android permissions, sync status, local preview, duplicate prevention and manual/automatic sync. Keep explicit health sharing available without restoring ads/telemetry or relying on the original app's OAuth signing identity.
Health timestamps/settings Correct Da Fit's 20:00 sleep-day boundary; skip ambiguous clock data; open public Health Connect settings rather than Android 16's system-only permission activity. Prevent wrong-day sleep exports and fix the misleading “Health Connect unavailable” button error.

Details: privacy design and limitations, Health Connect mappings, change history.

Build it yourself

The supported build host is Windows with PowerShell 7, JDK 21, Python 3.10+ and ripgrep. Allow several GB of disk space; 16 GB RAM is recommended for the default two assembler workers. Use -Jobs 1 on smaller machines.

git clone https://github.com/damien-c-d/dafit-mod.git
cd dafit-mod

# Run in PowerShell 7 (pwsh). JAVA_HOME must point to your JDK 21 installation.
./patch/bootstrap.ps1
./patch/prepare.ps1 -InputArchive 'C:\Downloads\Da Fit 2.9.23-4-g626574b11f.apk+'
./patch/build.ps1

The .apk+ file is a ZIP container. A .zip containing the same four original APKs also works. The archive name is unimportant; the four SHA-256 fingerprints must match. Do not feed an already patched APK back into the build. No original APK download is provided here.

bootstrap.ps1 downloads pinned Apktool/Android build-tool archives from their official publishers and verifies SHA-256 before extraction. It does not install Java, Python, ripgrep or ADB. See complete build instructions for prerequisite links, custom tool paths, troubleshooting and what each stage does.

Output: dist/DaFit-notification-filter/ (the historical directory name is retained). This contains four signed APKs, installation notes and SHA256.json. Despite the folder name, the build includes every patch above.

Install and keep your signing key

Read installation and updates first. A self-signed build cannot update the vendor-signed app in place. Android may require uninstalling the differently signed app, which can lose local history/preferences. The scripts never uninstall, clear data or install automatically. Plan your data migration before replacing any installation.

Once installed, updates built with the same key can use:

adb install-multiple --no-incremental -r `
  dist/DaFit-notification-filter/base.apk `
  dist/DaFit-notification-filter/split_config.arm64_v8a.apk `
  dist/DaFit-notification-filter/split_config.en.apk `
  dist/DaFit-notification-filter/split_config.xxhdpi.apk

The first build creates signing/local-repair.p12 and signing/store-password.txt. Back up both privately and keep using them for updates. Never upload them, including as release assets. Each builder gets a different signing identity. A release built by another person will not update your local build unless it uses your key; do not share your key to make that happen.

Using the features

  • Notifications → “Others”: select allowed apps. Preset apps use their existing switches.
  • Notifications → watch assistant: enable the camera-shutter shortcut and choose the assistant. On this watch, use its remote-camera control. Background launch restrictions may require tapping a phone notification; foreground/unlocked launch is the tested path.
  • Watch-face gallery/detail: use My Faces, Save and View all. Apply uses the existing transfer flow. Long-press a saved entry to remove it.
  • My/Profile → Health Connect: choose data types, enable sharing, then grant Android permissions. “Preview available data” reads local history without sharing. “Manage access and shared data” opens Android's Health Connect home screen.
  • For Google Fit, enable Fit's separate Health Connect connection in Fit → Profile → Settings. Da Fit writes to Health Connect; Fit decides which supported records to read/display. This is not direct Google Fit OAuth sync.

Limits and verification

  • Phone favourites do not add physical watch-face slots. On the tested watch there are six built-in faces and one downloadable slot. Saved entries reference gallery metadata/URLs; they are not offline face binaries or custom-photo backups. Unexplained watch-face resets are not confirmed fixed. A saved-library transfer and fresh onboarding still need wider testing.
  • Health Connect requires Android 14+. It exports recent supported local records (last 30 calendar days), every five minutes while Da Fit's process runs, or with Sync now. This is not a guaranteed background job. No read permission, account or network transport is added for this feature.
  • Stress scores, unverified HRV metrics, ECG traces and predicted periods are excluded. Previously shared records are not automatically deleted when local data is deleted or sharing is disabled. Full mapping/limitations.
  • Core face/weather/download servers remain necessary and receive request metadata and parameters. Optional cloud AI, Strava, remote support/promotions and network WebViews are restricted. Unknown future download hosts require a reviewed code change.
  • Identified ad/telemetry paths are disabled; some dormant SDK classes remain for linkage. This is not a complete packet-capture audit or an OS firewall, and is not a guarantee of zero conceivable telemetry. Details.
  • Java compilation, policy/timestamp tests, DEX assembly, APK signatures/alignment and untouched-payload comparisons are checked. Real-phone checks covered notifications, assistant behaviour, gallery/search/favourite persistence, Health Connect permission flow, actual exports and repeat-sync deduplication. Data types absent from the test history have not all been exercised through insertion.

Report issues with app version, phone/Android version, watch model and reproduction steps. Do not attach notification contents, health exports, device identifiers, private logs or signing material to a public issue.

Releases and contributing

GitHub Code contains the working source. A tag names an exact commit. A Release adds human-readable notes and downloadable source archives to that tag. Initial releases are source-only pre-releases; they contain the patch kit, not installable APKs.

Start with the latest release or clone this repository. See maintainer release instructions for the full workflow, including GitHub's web interface. CI checks the source-only tests; full APK builds require the private original input and happen locally.

The MIT license covers this repository's original patch code/documentation. It does not grant rights to Da Fit, its APKs/assets or bundled third-party SDKs. Android build tools and Apktool retain their own licenses.

About

Source patch kit for Da Fit: notification controls, watch-face library, privacy restrictions and optional Health Connect. Build and sign locally.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages