Should only upload when we're getting dangerously close to our TTL, just as desktop does. This will involve tracking a server-side timestamp. Whenever we upload, bump this timestamp from X-Weave-Timestamp. Whenever we download our client record, because another client has changed it, bump this timestamp from the modified time. Whenever we process commands, the subsequent upload of a commandless record will result in bumping the timestamp. (And the post-command upload should have an If-Unmodified-Since header to avoid losing a command.)
QA: With this change, Android Sync will no longer upload a client record on every sync. It will upload on its first sync, and every seven days thereafter, or whenever it processes a command. (It's not currently smart enough to know when the server has been wiped, and reupload.) The easiest way to verify this is to check desktop: when it syncs, it won't see the mobile device's client record as changed. Sync mobile, then desktop, then mobile again. Now when you next sync desktop, you'll see: 1331800456513 Sync.Service DEBUG Refreshing client list. 1331800456514 Sync.Engine.Clients INFO 0 outgoing items pre-reconciliation 1331800456516 Sync.Engine.Clients INFO Records: 0 applied, 0 successfully, 0 failed to apply, 0 newly failed to apply, 0 reconciled.