Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Android is push-only until sync v2: stop showing the 'zero peers … layout problem' warning; pull other hosts only once v2 reads from staging

Open
#291 7 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
android, kotlin

Research direction

Trace syncBoth, copySyncFilesToSafDir, pull_all/list_remote_dbs, and resolveSyncDirectory, then compare dirs::get_sync_dir() with the Android AW_SYNC_DIR value. Verify whether peer databases can be read from the SAF tree and whether the hostname/device_id levels match. Done means either Android pull behavior and the warning are corrected, or the UI explicitly identifies Android as push-only until sync v2.

Written by the indexing model from the issue text.

Description

bug

Observed on v0.14.2b2 (POCO F8 Ultra), Sync Settings after a successful sync:

Last Sync succeeded at 13:00 … pulled 0, pushed 1
Found 0 remote db files to pull from /storage/emulated/0/Android/data/net.activitywatch.android/files/sync/poco_f8_ultra
Zero peers in a configured sync dir is usually a layout or setup problem, not a no-op.
[own-staging 2-level] …/files/sync/poco_f8_ultra/41662…/test.db  299.2 MB  not pulled: own device_id, excluded from pull

syncBoth does call pull_all (correct, 3-level list_remote_dbs), but copySyncFilesToSafDir only mirrors internal → SAF. Nothing ever copies other hosts' {hostname}/{device_id}/test.db from the Syncthing folder into the app-private dir, so the only thing under the internal root is our own staging and pull is guaranteed to find zero peers. The #687 warning then tells the user their setup is broken when it is working as designed for push.

Two things:

  1. Decide whether Android pulls at all. If yes, peers have to be read from the SAF tree (either an inbound mirror of {other-host}/… folders before the pull, or pull_all reading peer dbs via SAF-backed copies). If no for now, the Sync Settings text should say "push-only on Android" instead of the layout-problem warning.
  2. The root in that message is …/files/sync/poco_f8_ultra, and the own staging is classified as 2-level under it — but resolveSyncDirectory sets AW_SYNC_DIR to …/files/sync, and the push lands at …/files/sync/poco_f8_ultra/<device_id>/test.db (3-level from that root). Worth checking what dirs::get_sync_dir() resolves to on Android vs the env var; if the pull root really is the hostname folder, pull could never work even with an inbound mirror.

Related desktop-side bug found in the same session: ActivityWatch/aw-server-rust#711 (resume cursor duplicates the boundary event; the phone's staging stopwatch bucket already holds 285 copies of one event).

cc @TimeToBuildBob

Dominant language
Kotlin
Stars
270
Forks
57
Avg merge
23h 47m
Merged PRs (30d)
39

Getting set up

We have not checked this project's setup files yet. Start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ActivityWatch/aw-android

All issues in ActivityWatch/aw-android

Similar issues

More Kotlin issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.