amir ec478531da v1.0.30: fix sync loop root causes + icon redesign
Three root causes found via live logcat on device:

1. concurrent refresh() race: onStartCommand received twice causes two
   refresh() coroutines to run in parallel, doubling FileObserver and
   catchupScan registrations. Fixed with Mutex.withLock on refresh().

2. catchupScan no cooldown: catchup syncs write files but never set
   syncCooldownUntil, so every written file immediately re-triggers
   onChangeDetected. Fixed by setting cooldown before enqueue and
   watching work completion same as onChangeDetected does.

3. CancellationException caught silently: exception handler
   catch(_: Exception) was catching CancellationException and resetting
   cooldown to 0L, re-opening the loop. Fixed by rethrowing
   CancellationException and setting 60s cooldown on other errors.

Icon: interlocked rings (blue/red/green/orange) with sync arrow at
center, pure black background — matches reference image.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 13:48:18 +00:00

SyncFlow

Native Android file sync app — sync any folder to WebDAV, SFTP, Nextcloud, ownCloud, Google Drive, Dropbox, or OneDrive.

Features

  • Multi-provider — WebDAV, SFTP, SFTPGo, Nextcloud, ownCloud, Google Drive, Dropbox, OneDrive
  • Flexible sync — one-way upload, one-way download, or two-way mirror
  • Auto-sync — schedule by interval or trigger on Wi-Fi connect / device charge
  • Conflict resolution — keep local, keep remote, keep newer, or keep both
  • Secure — credentials encrypted with Android Keystore; biometric app-lock option
  • No cloud dependency — runs fully on-device, no third-party relay

Install

  1. Download SyncFlow.apk from the latest release
  2. On your Android phone: Settings → Apps → Install unknown apps → allow your browser/file manager
  3. Open the downloaded APK and tap Install
  4. Open SyncFlow, go to Accounts tab → Add Account, pick your provider and sign in
  5. Tap + on the Syncs tab to create your first sync pair

Supported Providers

Provider Auth
WebDAV Username + password
SFTP Password or private key
SFTPGo Username + password
Nextcloud Username + password
ownCloud Username + password
Google Drive OAuth 2.0 (PKCE)
Dropbox OAuth 2.0 (PKCE)
OneDrive OAuth 2.0 (PKCE)

Requirements

  • Android 8.0+ (API 26)
  • Storage permission (or SAF picker) for local folder access
S
Description
No description provided
Readme 21 MiB
v1.0.76 Latest
2026-06-07 13:49:59 +00:00
Languages
Kotlin 100%