āĻĢāĻŋāϞā§āĻĄ āĻ ā§āϝāĻžāĻĒā§āϰ āĻāύā§āϝ Kotlin WorkManager āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ
Kotlin WorkManager āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻĢāĻŋāϞā§āĻĄ āĻ ā§āϝāĻžāĻĒāĻā§āϞā§āϰ āĻāύā§āϝ: āϏāĻ āĻŋāĻ āĻāĻžāĻ āĻāĻžāĻāĻĒ āĻŦā§āĻā§ āύāĻŋāύ, āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āϏā§āĻ āĻāϰā§āύ, āĻāĻā§āϏāĻĒā§āύā§āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻžāĻāĻ āĻĢ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻĒā§āϰāĻā§āϰā§āϏ āĻĻā§āĻāĻžāύāĨ¤

āĻĢāĻŋāϞā§āĻĄ āĻ āĻ
āĻĒāϏ āĻ
ā§āϝāĻžāĻĒāĻā§āϞāĻŋāϤ⧠āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻā§ āĻŽāĻžāύā§\n\nāĻĢāĻŋāϞā§āĻĄ āĻ āĻ
āĻĒāϏ āĻ
ā§āϝāĻžāĻĒāĻā§āϞāĻŋāϤā§, āϏāĻŋāĻā§āĻ āĻāĻāĻāĻž âāĻāĻžāϞ⧠āĻšāĻŦā§â āĻā§āĻāĻ āύāϝāĻŧâāĻāĻāĻž āĻšāϞ⧠āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻĄāĻŋāĻāĻžāĻāϏ āĻĨā§āĻā§ āĻŦā§āϰāĻŋāϝāĻŧā§ āĻāĻŋāĻŽā§āϰ āĻāύā§āϝ āĻŦāĻžāϏā§āϤāĻŦ āĻšāϝāĻŧāĨ¤ āϝāĻāύ āϏāĻŋāĻā§āĻ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĻā§āϰā§āϤ āĻĻā§āĻāĻŦā§: āĻāĻāĻāĻŋ āϏāĻŽā§āĻĒāύā§āύ āĻāĻžāĻ āĻāĻāύāĻ "pending" āĻĻā§āĻāĻžāϝāĻŧ, āĻāĻŦāĻŋ āĻšāĻžāϰāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ, āĻ
āĻĨāĻŦāĻž āĻāĻāĻ āϰāĻŋāĻĒā§āϰā§āĻāĻāĻŋ āĻĻā§āĻāĻŦāĻžāϰ āĻāĻĒāϞā§āĻĄ āĻšāϝāĻŧā§ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰā§āĨ¤\n\nāĻāĻŽāύ āĻ
ā§āϝāĻžāĻĒāĻā§āϞ⧠āϏāĻžāϧāĻžāϰāĻŖ āĻāύāĻāĻŋāĻāĻŽāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§āϰ āϤā§āϞāύāĻžāϝāĻŧ āĻāĻ āĻŋāύ āĻāĻžāϰāĻŖ āĻĢā§āύāĻā§āϞ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϰāĻžāĻĒ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāϤā§āĻ āĻāĻžāĻ āĻāϰā§āĨ¤ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϞāĻžāϤāĻž-āϞāĻžāĻāĻŋ āĻāϰ⧠LTE, āĻĻā§āϰā§āĻŦāϞ WiâFi āĻāĻŦāĻ āĻā§āύ āϏāĻŋāĻāύāĻžāϞ āύāĻžâāϏāĻŽāϏā§āϤ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āϝāĻžāϝāĻŧāĨ¤ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϏā§āĻāĻžāϰ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻžāĻ āĻŦā§āϞāĻ āĻāϰā§āĨ¤ āĻ
ā§āϝāĻžāĻĒKilled āĻšāϝāĻŧ, OS āĻāĻĒāĻĄā§āĻ āĻšāϝāĻŧ, āĻĄāĻŋāĻāĻžāĻāϏ āϰā§āĻ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āϰāĻŋāĻŦā§āĻ āĻāϰā§āĨ¤ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ WorkManager āϏā§āĻāĻāĻĒāĻā§ āĻāϏāĻŦ āĻāĻžāĻĄāĻŧāĻž āĻŦā§āĻāĻā§ āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤\n\nāύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻŦāϞāϤ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻžāϰāĻāĻŋ āĻāĻŋāύāĻŋāϏ āĻŦā§āĻāĻžāϝāĻŧ:\n\n- āĻ
āĻŦāĻļā§āώ⧠āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ: āĻĄā§āĻāĻž āĻĻā§āϰāĻŋāϤ⧠āĻāϏāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ āύāĻāϰāĻĻāĻžāϰāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāϏ⧠āϝāĻžāϝāĻŧāĨ¤\n- āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰāϝā§āĻā§āϝ: āϝāĻĻāĻŋ āĻ
ā§āϝāĻžāĻĒ āĻāĻĒāϞā§āĻĄā§āϰ āĻŽāĻžāĻāĻāĻžāύ⧠āĻŽāĻžāϰāĻž āϝāĻžāϝāĻŧ, āĻĒāϰāĻŦāϰā§āϤ⧠āϰāĻžāύ āύāĻŋāϰāĻžāĻĒāĻĻā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤\n- āĻĻā§āĻļā§āϝāĻŽāĻžāύ: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻ āϏāĻžāĻĒā§āϰā§āĻ āĻāĻŋāĻāĻžāĻŦā§ āĻšāĻā§āĻā§ āĻāĻŦāĻ āĻā§ āĻāĻāĻā§āĻā§ āϤāĻž āĻāĻžāύāϤ⧠āĻĒāĻžāϰā§āĨ¤\n- āϧā§āĻŦāĻāϏāĻžāϤā§āĻŽāĻ āύāϝāĻŧ: āϰāĻŋāĻā§āϰāĻžāĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϏā§āώā§āĻāĻŋ āύāĻž āĻāϰ⧠āĻŦāĻž āϏā§āĻā§āĻ āĻāϰāĻžāĻĒā§āĻ āύāĻž āĻāϰā§āĨ¤\n\nâRun nowâ āĻā§āĻ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāĻž āĻ
ā§āϝāĻžāĻāĻļāύā§āϰ āĻāύā§āϝ āĻāĻžāϞ (āϝā§āĻŽāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻāĻĒāĻĄā§āĻ āĻĒāĻžāĻ āĻŋāϝāĻŧā§ āĻĢā§āϞā§)āĨ¤ âWaitâ āĻāĻžāϰ⧠āĻāĻžāĻā§āϰ āĻāύā§āϝâāĻĢāĻā§ āĻāĻĒāϞā§āĻĄ, āĻŦā§āϝāĻžāĻ āĻāĻĒāĻĄā§āĻ āĻŦāĻž āĻāĻŽāύ āĻāĻŋāĻā§ āϝāĻž āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāĻžāϝāĻŧ āĻŦāĻž āĻāĻžāϰāĻžāĻĒ āύā§āĻā§ āĻŦā§āϝāϰā§āĻĨ āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āĻŦā§āĻļāĻŋāĨ¤\n\nāĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāύ āĻāύā§āϏāĻĒā§āĻā§āĻāϰ āĻŦā§āĻāϏāĻŽā§āύā§āĻā§ āϏāĻŋāĻāύāĻžāϞ āύāĻž āĻĨāĻžāĻāĻžāϝāĻŧ 12āĻāĻŋ āĻĢāĻā§ āϏāĻš āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽ āĻāĻŽāĻž āĻĻā§āϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āϏāĻŋāĻā§āĻ āĻĒā§āϰāĻĨāĻŽā§ āϏāĻŦāĻāĻŋāĻā§ āϞā§āĻāĻžāϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§, āĻāĻŋāĻāĻ āĻšāĻŋāϏā§āĻŦā§ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰā§, āĻāĻŦāĻ āĻĒāϰ⧠āĻĄāĻŋāĻāĻžāĻāϏ⧠āĻāĻžāϞ⧠āĻāĻžāύā§āĻāĻļāύ āĻĒā§āϞ⧠āĻāĻĒāϞā§āĻĄ āĻāϰā§âāĻāύā§āϏāĻĒā§āĻā§āĻāϰāĻā§ āĻāĻžāĻ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāϰāϤ⧠āĻšāĻŦā§ āύāĻžāĨ¤\n\n## āϏāĻ āĻŋāĻ WorkManager āĻŦāĻŋāϞā§āĻĄāĻŋāĻ āĻŦā§āϞāĻ āĻŦā§āĻā§ āύāĻŋāύ\n\nāĻā§āĻ āĻ āϏā§āĻĒāώā§āĻ āĻāĻžāĻā§āϰ āĻāĻāύāĻŋāĻ āĻŦā§āĻā§ āύāĻŋāύâāĻāĻ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤāĻāĻž āĻĒāϰ⧠āϝ⧠āĻā§āύāĻ āĻŦā§āĻĻā§āϧāĻŋāĻŽāĻžāύ āϰāĻŋāĻā§āϰāĻžāĻ āϞāĻāĻŋāĻā§āϰ āĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āĻĒā§āϰāĻāĻžāĻŦ āĻĢā§āϞā§āĨ¤\n\n### One-time āĻŦāύāĻžāĻŽ periodic work\n\nāϝā§āϏāĻŦ āĻāĻžāĻ āĻāĻāĻŦā§ āϝāĻāύ āĻāĻŋāĻā§ āĻŦāĻĻāϞ⧠āϝāĻžāϝāĻŧ (āύāϤā§āύ āĻĢāϰā§āĻŽ āϏā§āĻ, āĻāĻŦāĻŋ āĻāĻŽā§āĻĒā§āϰā§āϏ āĻļā§āώ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠Sync āĻāĻžāĻĒāϞ), āϏā§āĻā§āϞā§āϰ āĻāύā§āϝ OneTimeWorkRequest āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āϤāĻžā§āĻā§āώāĻŖāĻŋāĻāĻāĻžāĻŦā§ enqueue āĻāϰā§āύ (āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āϏāĻš) āĻāĻŦāĻ WorkManager āϝā§āĻĻāĻŋāύ āĻĄāĻŋāĻāĻžāĻāϏ āĻĒā§āϰāϏā§āϤā§āϤ āĻšāĻŦā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āĻŦā§āĨ¤\n\nāϏā§āĻā§āĻĄāĻŋ āĻŽā§āĻāύāĻā§āύā§āϝāĻžāύā§āϏā§āϰ āĻāύā§āϝ, āϝā§āĻŽāύ âāĻāĻĒāĻĄā§āĻ āĻā§āĻâ āĻŦāĻž āύā§āĻāϞāĻŋ āĻā§āϞāĻŋāύāĻāĻĒ, PeriodicWorkRequest āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ Periodic work āϏāĻ āĻŋāĻ āύāϝāĻŧâāĻāϰ āĻāĻāĻāĻŋ āύā§āϝā§āύāϤāĻŽ āĻāύā§āĻāĻžāϰāĻāĻžāϞ āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ āϏāĻŋāϏā§āĻā§āĻŽ āύāĻŋāϝāĻŧāĻŽā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāĻāĻŋ āĻĄā§āϰāĻŋāĻĢā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϤāĻžāĻ āĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻĒāϞā§āĻĄā§āϰ āĻāĻāĻŽāĻžāϤā§āϰ āĻĒāĻĨ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤\n\nāĻĒā§āϰāĻžāϝāĻŧā§āĻāĻŋāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ āĻšāϞā§: âāĻŽā§āϏā§āĻ-āϏāĻŋāĻāĻ-āϏā§āύâ āĻāύā§āϝ one-time work, āĻāĻŦāĻ periodic work āĻā§ āĻāĻ āϧāϰāύā§āϰ āϏā§āĻĢāĻāĻŋ āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ āϰāĻžāĻāĻžāĨ¤\n\n### Worker, CoroutineWorker, āύāĻž RxWorker āĻŦā§āĻā§ āύā§āĻāϝāĻŧāĻž\n\nāĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Kotlin āϞāĻŋāĻā§āύ āĻāĻŦāĻ suspend āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āϤāĻžāĻšāϞ⧠CoroutineWorker āĻĒāĻāύā§āĻĻ āĻāϰā§āύāĨ¤ āĻāĻāĻŋ āĻā§āĻĄ āĻā§āĻ āϰāĻžāĻā§ āĻāĻŦāĻ āĻā§āϝāĻžāύāϏā§āϞā§āĻļāύ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤\n\nWorker āϏāϰāϞ āĻŦā§āϞāĻāĻŋāĻ āĻā§āĻĄā§āϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§āϤ, āĻāĻŋāύā§āϤ⧠āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻŦā§āϞāĻ āĻāϰāϞ⧠āϏāĻŽāϏā§āϝāĻž āĻšāĻŦā§āĨ¤\n\nRxWorker āĻā§āĻŦāϞ āϤāĻāύāĻ āϝā§āĻā§āϤāĻŋāϝā§āĻā§āϤ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻ
ā§āϝāĻžāĻĒ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ RxJava āĻŦāĻĄāĻŧ āĻĒāϰāĻŋāϏāϰ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§âāĻ
āύā§āϝāĻĨāĻžāϝāĻŧ āĻāĻāĻž āĻ
āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻāĻāĻŋāϞāϤāĻžāĨ¤\n\n### āϧāĻžāĻĒāĻā§āϞ⧠āĻā§āĻāύ āĻāϰāĻŦā§āύ āύāĻžāĻāĻŋ āĻāĻ worker-āĻ āĻĢā§āĻ āĻāϰāĻŦā§āύ?\n\nāĻā§āĻāύāĻŋāĻ āĻāĻžāϞ⧠āϝāĻāύ āϧāĻžāĻĒāĻā§āϞ⧠āϏā§āĻŦāĻžāϧā§āύāĻāĻžāĻŦā§ āϏāĻĢāϞ āĻŦāĻž āĻŦā§āϝāϰā§āĻĨ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻāϞāĻžāĻĻāĻž āϰāĻŋāĻā§āϰāĻžāĻ āĻ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āϞāĻ āĻāĻžāύāĨ¤ āĻāĻ worker-āĻ āĻĢā§āĻ āĻāĻžāϞ⧠āϝāĻāύ āϧāĻžāĻĒāĻā§āϞ⧠āĻĄā§āĻāĻž āĻļā§āϝāĻŧāĻžāϰ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύā§āϰ āĻŽāϤ⧠āĻŦāĻŋāĻŦā§āĻāĻŋāϤ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤\n\nāĻāĻāĻāĻŋ āϏāĻšāĻ āύāĻŋāϝāĻŧāĻŽ:\n\n- āϝāĻāύ āϧāĻžāĻĒāĻā§āϞā§āϰ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻāϞāĻžāĻĻāĻž (WiâFi-āĻ āĻāĻĒāϞā§āĻĄ, āϤāĻžāϰāĻĒāϰ āϞāĻžāĻāĻāĻāϝāĻŧā§āĻ API āĻāϞ), āϤāĻāύ āĻā§āĻāύ āĻāϰā§āύāĨ¤\n- āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ âall-or-nothingâ āϏāĻŋāĻā§āĻ āĻāĻžāύ, āϤāĻāύ āĻāĻ worker āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤\n\nWorkManager āĻā§āϝāĻžāϰāĻžāύā§āĻāĻŋ āĻĻā§āϝāĻŧ āϝ⧠āĻāĻžāĻ āĻĒā§āϰāϏā§āϏ āĻĄā§āĻĨ āĻ āϰāĻŋāĻŦā§āĻ āϏāĻš āϏāĻāϰāĻā§āώāĻŋāϤ āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻŽāĻžāύāĻŦā§āĨ¤ āĻāĻāĻŋ āϤā§āĻā§āώāĻŖāĻŋāĻ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āĻŦāĻž āĻāĻāĻāĻžāϰ āĻĢā§āϰā§āϏ-āϏā§āĻāĻĒā§āϰ āĻĒāϰ⧠āĻāϞāĻžāϰ āύāĻŋāĻļā§āĻāϝāĻŧāϤāĻž āĻĻā§āϝāĻŧ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ Android āĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒ āϤā§āϰāĻŋ āĻāϰā§āύ, āϏāĻŋāĻā§āĻ āĻĄāĻŋāĻāĻžāĻāύ āĻāϰā§āύ āϝāĻžāϤ⧠āĻĻā§āϰāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ āĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻšāϝāĻŧāĨ¤\n\n## āϏāĻŋāĻā§āĻ āύāĻŋāϰāĻžāĻĒāĻĻ āĻāϰā§āύ: idempotent, āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āĻāĻŦāĻ resumable āϰāĻžāĻā§āύ\n\nāĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāĻ āĻāĻžāϞāĻžāĻŦā§âāĻĢā§āύ āϏāĻŋāĻāύāĻžāϞ āĻšāĻžāϰāĻžāϝāĻŧ, OS āĻĒā§āϰāϏā§āϏ āĻŽā§āϰ⧠āĻĢā§āϞā§, āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĻā§āĻāĻŦāĻžāϰ āĻā§āϝāĻžāĻĒ āĻāϰāĻŦā§ āĻāĻžāϰāĻŖ āĻāĻŋāĻā§āĻ āĻāĻā§āύāĻŋ āĻŽāύ⧠āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋāϰ āĻāύā§āϝ āύāĻŋāϰāĻžāĻĒāĻĻ āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϰā§āĻāϰā§āĻĄ, āĻŽāĻŋāϏāĻŋāĻ āĻāĻĒāĻĄā§āĻ āĻŦāĻž āĻ
āύāύā§āϤ āϰāĻŋāĻā§āϰāĻžāĻ āĻšāĻŦā§āĨ¤\n\nāĻĒā§āϰāϤā§āϝā§āĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāϞ āĻĻā§āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāύ⧠āύāĻŋāϰāĻžāĻĒāĻĻ āĻāϰ⧠āĻļā§āϰ⧠āĻāϰā§āύāĨ¤ āϏāĻšāĻ āĻĒāĻĻā§āϧāϤāĻŋ āĻšāϞ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻāĻā§āĻŽā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ idempotency key (āĻāĻĻāĻžāĻšāϰāĻŖ: āϞā§āĻāĻžāϞ āϰā§āĻāϰā§āĻĄā§āϰ āϏāĻžāĻĨā§ āϏāĻāϰāĻā§āώāĻŋāϤ UUID) āϝāĻž āϏāĻžāϰā§āĻāĻžāϰ âāĻāĻāĻ āĻ
āύā§āϰā§āϧ, āĻāĻāĻ āĻĢāϞāĻžāĻĢāϞâ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āĨ¤ āϏāĻžāϰā§āĻāĻžāϰ āĻŦāĻĻāϞāĻžāϤ⧠āύāĻž āĻĒāĻžāϰāϞ⧠stable natural key āĻ upsert endpoint āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻ
āĻĨāĻŦāĻž āĻāĻžāϰā§āϏāύ āύāĻŽā§āĻŦāϰ āĻĻāĻŋāύ āϝāĻžāϤ⧠āϏāĻžāϰā§āĻāĻžāϰ āϏā§āĻā§āϞ āĻāĻĒāĻĄā§āĻ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤\n\nāϞā§āĻāĻžāϞ āϏā§āĻā§āĻ āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻā§āϰā§āϝāĻžāĻ āĻāϰā§āύ āϝāĻžāϤ⧠worker āĻā§āϰā§āϝāĻžāĻļā§āϰ āĻĒāϰ⧠āĻ
āύā§āĻŽāĻžāύ āύāĻž āĻāϰ⧠āĻĒā§āύāϰāĻžāϝāĻŧ āĻāϞāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏā§āĻā§āĻ āĻŽā§āĻļāĻŋāύ āĻĒā§āϰāĻžāϝāĻŧāĻ āϝāĻĨā§āώā§āĻ:\n\n- queued\n- uploading\n- uploaded\n- needs-review\n- failed-temporary\n\nāĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻāĻžāϞ āϏāĻŋāĻā§āĻ āϰāĻžāĻā§āύāĨ¤ âāϏāĻŦāĻāĻŋāĻā§ āϏāĻŋāĻā§āĻ āĻāϰā§āύâ āĻŦāϞāĻžāϰ āĻŦāĻĻāϞ⧠lastSuccessfulTimestamp āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰ-āĻāϏā§āϝā§āĻā§āϤ āĻā§āĻā§āύā§āϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ āĻāĻžāϰā§āϏāϰ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύāĨ¤ āĻā§āĻ āĻŦā§āϝāĻžāĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĒāĻĄāĻŧā§āύ, āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻŦā§āϝāĻžāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖāĻāĻžāĻŦā§ āϞā§āĻāĻžāϞāĻŋ āĻāĻŽāĻŋāĻ āĻšāϞ⧠āĻāĻžāϰā§āϏāϰ āĻ
ā§āϝāĻžāĻĄāĻāĻžāύā§āϏ āĻāϰā§āύāĨ¤ āĻā§āĻ āĻŦā§āϝāĻžāĻ (⧍ā§Ļâā§§ā§Ļā§Ļ āĻāĻāĻā§āĻŽ) āĻāĻžāĻāĻŽāĻāĻāĻ āĻāĻŽāĻžāϝāĻŧ, āĻĒā§āϰāĻā§āϰā§āϏ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻāϰ⧠āĻāĻŦāĻ āĻŦāĻŋāϰāϤāĻŋ āĻšāϞ⧠āϝ⧠āĻāĻžāĻ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšāĻŦā§ āϤāĻž āϏā§āĻŽāĻžāĻŦāĻĻā§āϧ āϰāĻžāĻā§āĨ¤\n\nāĻāĻĒāϞā§āĻĄāĻā§āϞā§āĻ resumable āĻāϰā§āύāĨ¤ āĻĢāĻā§ āĻŦāĻž āĻŦāĻĄāĻŧ āĻĒā§-āϞā§āĻĄā§āϰ āĻāύā§āϝ āĻĢāĻžāĻāϞ URI āĻāĻŦāĻ āĻāĻĒāϞā§āĻĄ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āĻ
āĻā§āώā§āĻŖā§āĻŖ āϰāĻžāĻā§āύ, āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰ āĻāύāĻĢāĻžāϰā§āĻŽ āύāĻž āĻāϰāϞ⧠uploaded āĻŽāĻžāϰā§āĻ āĻāϰāĻŦā§āύ āύāĻžāĨ¤ worker āĻĒā§āύāϰāĻžāϝāĻŧ āĻļā§āϰ⧠āĻšāϞ⧠āĻļā§āώ āĻāĻžāύāĻž āϏā§āĻā§āĻ āĻĨā§āĻā§ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧ, āύāϤā§āύ āĻāϰ⧠āĻļā§āϰ⧠āĻāϰ⧠āύāĻžāĨ¤\n\nāĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāύ āĻā§āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāύ āĻāĻžāϞ āϏāĻāϝā§āĻ āύāĻž āĻĨāĻžāĻāϞ⧠12āĻāĻŋ āĻĢāϰā§āĻŽ āĻĒā§āϰāĻŖ āĻāϰ⧠āĻāĻŦāĻ 8āĻāĻŋ āĻĢāĻā§ āĻā§āĻĄāĻŧā§āĨ¤ āĻĄāĻŋāĻāĻžāĻāϏ āĻĒā§āύāϰāĻžāϝāĻŧ āϏāĻāϝā§āĻā§āϤ āĻšāϞ⧠worker āĻŦā§āϝāĻžāĻā§ āĻāĻĒāϞā§āĻĄ āĻāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĢāϰā§āĻŽā§āϰ idempotency key āĻĨāĻžāĻā§, āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŦā§āϝāĻžāĻ āϏāĻĢāϞ āĻšāϞ⧠āĻāĻžāϰā§āϏāϰ āĻ
ā§āϝāĻžāĻĄāĻāĻžāύā§āϏ āĻāϰā§āĨ¤ āĻ
ā§āϝāĻžāĻĒ āĻŽāĻžāĻāĻĒāĻĨā§ āĻŽāĻžāϰāĻž āĻā§āϞ⧠worker āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞāĻžāϞ⧠āĻŦāĻžāĻāĻŋ āĻāĻŋāĻ āĻāϰāĻž āĻāĻāĻā§āĻŽāĻā§āϞ⧠āϏāĻŽā§āĻĒāύā§āύ āĻšāĻŦā§ āĻā§āύ āĻāĻŋāĻā§ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύāĻž āĻāϰā§āĨ¤\n\n## āĻŦāĻžāϏā§āϤāĻŦ-āĻāĻāϤā§āϰ āĻĄāĻŋāĻāĻžāĻāϏ āĻāύāĻĄāĻŋāĻļāύ āĻŽā§āϞāĻžāύ⧠āĻāύāϏā§āĻā§āϰā§āĻāύāĻāϏ\n\nāĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻšāϞ⧠āϏā§āĻ āĻāĻžāϰā§āĻĄāϰā§āĻāϞ āϝāĻž āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻāĻā§ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻļā§āĻāĻžāύā§, āĻŽā§āĻŦāĻžāĻāϞ āĻĄā§āĻāĻž āĻŦāĻžāĻĄāĻŧāĻžāύ⧠āĻŦāĻž āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āϞ āϏāĻŽāϝāĻŧā§ āĻŦā§āϝāϰā§āĻĨ āĻšāĻāϝāĻŧāĻž āĻĨā§āĻā§ āϰāĻā§āώāĻž āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻŽāύ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻāĻžāύ āϝāĻž āĻĢāĻŋāϞā§āĻĄā§ āĻĄāĻŋāĻāĻžāĻāϏ āĻā§āĻāĻžāĻŦā§ āĻāĻāϰāĻŖ āĻāϰ⧠āϤāĻž āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻāϰā§âāĻāĻĒāύāĻžāϰ āĻĄā§āϏā§āĻā§ āύāĻž āĻā§āĻŽāύ āĻāĻāϰāĻŖ āĻāϰ⧠āϤāĻž āύāϝāĻŧāĨ¤\n\nāĻā§āĻ āĻāĻāĻāĻŋ āϏā§āĻ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύ āϝāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϰāĻā§āώāĻž āĻāϰ⧠āĻāĻŋāύā§āϤ⧠āĻāĻžāĻāĻāĻŋ āĻ
āϧāĻŋāĻāĻžāĻāĻļ āĻĻāĻŋāύ⧠āĻāϞāĻžāϰ āϏā§āϝā§āĻ āϰāĻžāĻā§āĨ¤ āĻāĻāĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧā§āĻāĻŋāĻ āĻŦā§āϏāϞāĻžāĻāύ: āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĨāĻžāĻāĻž āĻĒā§āϰāϝāĻŧā§āĻāύ, āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞ⧠āĻšāϞ⧠āĻāĻžāϞāĻžāĻŦā§āύ āύāĻž, āĻāĻŦāĻ āϏā§āĻā§āϰā§āĻ āĻā§āϰāĻŋāĻāĻŋāĻā§āϝāĻžāϞ āĻšāϞ⧠āĻāĻžāϞāĻžāĻŦā§āύ āύāĻžāĨ¤ āĻļā§āϧ⧠āĻā§āĻŦ āĻāĻžāϰ⧠āĻāĻžāĻ āĻšāϞ⧠āĻāĻžāϰā§āĻāĻŋāĻ āĻĻāϰāĻāĻžāϰ āĻŦāϞā§āύâāĻāĻŋāύā§āϤ⧠āĻ
āύā§āĻ āĻĢāĻŋāϞā§āĻĄ āĻĄāĻŋāĻāĻžāĻāϏ āĻļāĻŋāĻĢāĻā§āϰ āϏāĻŽāϝāĻŧā§ āĻĒā§āϰāĻžāϝāĻŧāĻ āĻĒā§āϞāĻžāĻ āĻāύ āĻāϰāĻž āĻĨāĻžāĻā§ āύāĻžāĨ¤\n\nāĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āϏāĻžāϧāĻžāϰāĻŖāϤ âāϏāĻŋāĻā§āĻ āĻāĻāύāĻ āĻāϞā§āύāĻŋâ āϰāĻŋāĻĒā§āϰā§āĻā§āϰ āĻāĻžāϰāĻŖāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ unmetered WiâFi, charging, āĻāĻŦāĻ battery not low āϏāĻŦāĻ āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻžāϝāĻŧ āĻāĻāύā§āĻ āĻāĻĒāϝā§āĻā§āϤ āĻŽā§āĻšā§āϰā§āϤ āĻĒāĻžāĻŦā§āύ āύāĻžāĨ¤ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧ āϝāĻĻāĻŋ āĻāĻ āĻĄā§āĻāĻž āĻĻāϰāĻāĻžāϰ āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧠āĻā§āĻ āĻāĻžāĻāĻā§āϞāĻŋ āĻŦā§āĻļāĻŋ āĻŦāĻžāϰ āĻāĻžāϞāĻžāύ⧠āĻāĻžāϞā§âāύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻļāϰā§āϤā§āϰ āĻāύā§āϝ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻā§āϝāĻŧā§āĨ¤\n\nāĻā§āϝāĻžāĻĒāĻāĻŋāĻ āĻĒā§āϰā§āĻāĻžāϞ āĻāϰā§āĻ āĻŦāĻžāϏā§āϤāĻŦ āϏāĻŽāϏā§āϝāĻž: āĻĢā§āύ āĻŦāϞāĻā§ āĻāĻāĻŋ āϏāĻāϝā§āĻā§āϤ, āĻāĻŋāύā§āϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻšā§āĻā§āϞ āĻŦāĻž āĻĒāĻžāĻŦāϞāĻŋāĻ WiâFi āĻĒā§āώā§āĻ āĻžāϝāĻŧ âAcceptâ āĻāĻŋāĻĒāϤ⧠āĻšāĻŦā§āĨ¤ WorkManager āĻāĻāĻž āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝāĻāĻžāĻŦā§ āϏāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āĻāĻāĻžāĻā§ āϏāĻžāϧāĻžāϰāĻŖ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻšāĻŋāϏā§āĻŦā§ āϧāϰā§āύ: āϏāĻŋāĻā§āĻ āĻā§āώā§āĻāĻž āĻāϰā§āύ, āĻĻā§āϰā§āϤ āĻāĻžāĻāĻŽāĻāĻāĻ āĻĻāĻŋāύ, āĻāĻŦāĻ āĻĒāϰ⧠āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§āύāĨ¤ āĻ
āύā§āϰā§āϧ āĻāϞāĻžāĻāĻžāϞ⧠āĻāĻāĻŋ āϏāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰāϞ⧠āĻāĻāĻāĻŋ āϏāϰāϞ āĻāύ-āĻ
ā§āϝāĻžāĻĒ āĻŦāĻžāϰā§āϤāĻž āĻĻā§āĻāĻžāύ āϝā§āĻŽāύ âWiâFi-āĻ āϏāĻāϝā§āĻā§āϤ āĻāĻŋāύā§āϤ⧠āĻāύā§āĻāĻžāϰāύā§āĻ āύā§āĻâāĨ¤\n\nāĻā§āĻ āĻŦāύāĻžāĻŽ āĻŦāĻĄāĻŧ āĻāĻĒāϞā§āĻĄā§āϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻž āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϝāĻžāϤ⧠āĻ
ā§āϝāĻžāĻĒ responsive āĻĨāĻžāĻā§:\n\n- āĻā§āĻ āĻĒā§-āϞā§āĻĄ (āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻĒāĻŋāĻ, āĻĢāϰā§āĻŽ āĻŽā§āĻāĻžāĻĄā§āĻāĻž): āϝ⧠āĻā§āύāĻ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āύāĻ āϞā§āĨ¤\n- āĻŦāĻĄāĻŧ āĻĒā§-āϞā§āĻĄ (āĻĢāĻā§, āĻāĻŋāĻĄāĻŋāĻ, āĻŽā§āϝāĻžāĻĒ āĻĒā§āϝāĻžāĻ): āϏāĻŽā§āĻāĻŦ āĻšāϞ⧠unmetered āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻāĻŦāĻ āĻāĻžāϰā§āĻāĻŋāĻ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύāĨ¤\n\nāĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāύ āĻā§āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāύ 2āĻāĻŋ āĻĢāĻā§āϏāĻš āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽ āϏā§āĻ āĻāϰā§āĨ¤ āĻĢāϰā§āĻŽ āĻĢāĻŋāϞā§āĻĄāϰāĻž āϝā§āĻā§āύ⧠āĻāĻžāύā§āĻāĻļāύ⧠āϏāĻžāĻŦāĻŽāĻŋāĻ āĻāϰā§āύ, āĻāĻŋāύā§āϤ⧠āĻĢāĻā§ āĻāĻĒāϞā§āĻĄāĻā§āϞ⧠WiâFi āĻŦāĻž āĻāĻžāϞ⧠āĻŽā§āĻšā§āϰā§āϤ⧠āĻāĻŋāĻ āĻāϰā§āύāĨ¤ āĻ
āĻĢāĻŋāϏ āĻĻā§āϰā§āϤ āĻāĻžāĻāĻāĻž āĻĻā§āĻā§ āĻĒāĻžāϝāĻŧ, āĻāĻŦāĻ āĻĄāĻŋāĻāĻžāĻāϏ āĻŽā§āĻŦāĻžāĻāϞ āĻĄā§āĻāĻž āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āĻāĻŦāĻŋ āĻāĻĒāϞā§āĻĄ āĻāϰ⧠āĻāĻžāϝāĻŧ āύāĻžāĨ¤\n\n## āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāĻŋāϰāĻā§āϤ āύāĻž āĻāϰ⧠āĻāĻā§āϏāĻĒā§āύā§āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻžāĻāĻ
āĻĢ āϏāĻš āϰāĻŋāĻā§āϰāĻžāĻ\n\nāϰāĻŋāĻā§āϰāĻžāĻ āĻšāϞ⧠āϝā§āĻāĻžāύ⧠āĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒāĻā§āϞ⧠āĻļāĻžāύā§āϤ āϞāĻžāĻā§ āύāĻž āĻāĻžāϰāĻžāĻĒ āϞāĻžāĻā§âāϏāĻ āĻŋāĻ āĻŦā§āϝāĻžāĻāĻ
āĻĢ āĻĒāϞāĻŋāϏāĻŋ āĻāϝāĻŧāύ āĻāϰā§āύ āϝāĻž āĻāĻĒāύāĻžāϰ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āϧāϰāύ āĻŽā§āϞā§āĨ¤\n\nāύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ-āĻāϰ āĻāύā§āϝ āĻāĻā§āϏāĻĒā§āύā§āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻžāĻāĻ
āĻĢ āϏāĻžāϧāĻžāϰāĻŖāϤ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĄāĻŋāĻĢāϞā§āĻāĨ¤ āĻāĻāĻŋ āĻĻā§āϰā§āϤ āĻāϝāĻŧā§āĻ āĻāĻžāĻāĻŽ āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ āϝāĻžāϤ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻāĻĒāϰ āĻāĻžāĻĒ āύāĻž āĻĒāĻĄāĻŧā§ āĻŦāĻž āĻĻā§āϰā§āĻŦāϞ āĻāĻāĻžāϰā§āĻā§ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāϰāĻ āύāĻž āĻšāϝāĻŧāĨ¤ āϞāĻŋāύāĻŋāϝāĻŧāĻžāϰ āĻŦā§āϝāĻžāĻāĻ
āĻĢ āĻā§āĻ āϏāĻžāĻŽāϝāĻŧāĻŋāĻ āϏāĻŽāϏā§āϝāĻžāϰ āĻāύā§āϝ āĻĢāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āĻĻā§āϰā§āĻŦāϞ āϏāĻŋāĻāύāĻžāϞ āĻāϞāĻžāĻāĻžāϝāĻŧ āĻā§āĻŦ āĻāύāĻāύ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§āĨ¤\n\nāĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āϧāϰāύ āĻĻā§āĻā§ āϰāĻŋāĻā§āϰāĻžāĻ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύāĻŋāύ, āĻā§āĻŦāϞ âāĻāĻŋāĻā§ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧā§āĻā§â āĻŦāϞ⧠āύāĻžāĨ¤ āĻāĻāĻāĻŋ āϏāĻšāĻ āϰā§āϞāϏā§āĻ:\n\n- āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻāĻžāĻāĻŽāĻāĻāĻ, 5xx, DNS, āĻā§āύ āĻāĻžāύā§āĻāĻāĻŋāĻāĻŋāĻāĻŋ āύāĻž āĻĨāĻžāĻāĻž: Result.retry()\n- āĻ
āĻĨā§āύā§āĻāĻŋāĻā§āĻļāύ āĻŽā§āϝāĻŧāĻžāĻĻā§āϤā§āϤā§āϰā§āĻŖ (401): āĻāĻāĻŦāĻžāϰ āĻā§āĻā§āύ āϰāĻŋāĻĢā§āϰā§āĻļ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āĻāĻāĻāĻžāϰāĻā§ āϏāĻžāĻāύ-āĻāύ āĻŦāϞā§āύ\n- āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ āĻŦāĻž 4xx (āĻŦā§āϝāĻžāĻĄ āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ): Result.failure() āĻāĻŦāĻ āϏāĻžāĻĒā§āϰā§āĻā§āϰ āĻāύā§āϝ āϏā§āĻĒāώā§āĻ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻžāύ\n- āĻāύāĻĢā§āϞāĻŋāĻā§āĻ (409) āϝā§āĻā§āϞ⧠āĻāϤāĻŋāĻŽāϧā§āϝ⧠āĻĒāĻžāĻ āĻžāύ⧠āĻāĻāĻā§āĻŽ āĻŦā§āĻāĻžāϝāĻŧ: āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻŋāĻā§āĻ idempotent āĻšāϝāĻŧ āϤāĻžāĻšāϞ⧠āϏā§āĻā§āϞā§āĻā§ āϏāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύ\n\nāϏā§āĻĨāĻžāϝāĻŧā§ āϤā§āϰā§āĻāĻŋ āϝā§āύ āĻ
āύāύā§āϤ āϞā§āĻĒ āύāĻž āĻāϰ⧠āϤāĻžāϰ āĻāύā§āϝ āĻā§āώāϤāĻŋ āĻāĻžāĻāĻŋāϝāĻŧā§ āĻāĻ ā§āύāĨ¤ āϏāϰā§āĻŦā§āĻā§āĻ āĻā§āώā§āĻāĻž āϏāĻāĻā§āϝāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āύ, āĻāĻŦāĻ āϤāĻžāϰ āĻĒāϰ⧠āĻĨāĻžāĻŽā§āύ āĻ āĻāĻāĻāĻŋ āύā§āϰāĻŦ, āĻāĻžāĻāϝā§āĻā§āϝ āĻŦāĻžāϰā§āϤāĻž(surface) āĻĻā§āĻāĻžāύ (āĻĒā§āύāϰāĻžāϝāĻŧ āύā§āĻāĻŋāĻĢāĻžāĻ āύāĻž āĻāϰā§)āĨ¤\n\nāĻā§āώā§āĻāĻž āĻŦāĻžāĻĄāĻŧāϞ⧠āĻāĻāϰāĻŖāĻ āĻŦāĻĻāϞāĻžāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, 2āĻāĻŋ āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āĻĒāϰ⧠āĻā§āĻ āĻŦā§āϝāĻžāĻ āĻĒāĻžāĻ āĻžāύ āĻŦāĻž āĻŦāĻĄāĻŧ āĻāĻĒāϞā§āĻĄ āĻŦāĻžāĻĻ āĻĻāĻŋāύ āϝāϤāĻā§āώāĻŖ āύāĻž āĻĒāϰāĻŦāϰā§āϤ⧠āϏāĻĢāϞ āĻĒā§āϞ āĻšāϝāĻŧāĨ¤\n\nkotlin\nval request = OneTimeWorkRequestBuilder\u003cSyncWorker\u003e()\n .setBackoffCriteria(\n BackoffPolicy.EXPONENTIAL,\n 30, TimeUnit.SECONDS\n )\n .build()\n\n// in doWork()\nif (runAttemptCount \u003e= 5) return Result.failure()\nreturn Result.retry()\n\n\nāĻāĻāĻŋ āϰāĻŋāĻā§āϰāĻžāĻāĻā§ āĻāĻĻā§āϰ āϰāĻžāĻā§: āĻāĻŽ āĻā§ā§āĻ-āĻāĻĒ, āĻāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦāĻŋāϰāĻā§āϤāĻŋ, āĻāĻŦāĻ āĻāĻžāύā§āĻāĻļāύ āĻĢāĻŋāϰ⧠āĻā§āϞ⧠āĻĻā§āϰā§āϤ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰāĨ¤\n\n## āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻ
āĻā§āϰāĻāϤāĻŋ: āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ, āĻĢā§āϰāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻžāĻ, āĻ āϏā§āĻā§āϝāĻžāĻāĻžāϏ\n\nāĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒāĻā§āϞ⧠āĻĒā§āϰāĻžāϝāĻŧāĻ āϏāĻŋāĻā§āĻ āϤāĻāύ āĻāĻžāϞāĻžāϝāĻŧ āϝāĻāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻāϰ⧠āύāĻž: āĻŦā§āĻāϏāĻŽā§āύā§āĻā§, āϧā§āϰ āύā§āĻā§, āĻŦāĻž āĻĒā§āϰāĻžāϝāĻŧ āĻĄā§āĻĄ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋāϤā§āĨ¤ āϝāĻĻāĻŋ āϏāĻŋāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻšāϝāĻŧ (āĻāĻĒāϞā§āĻĄ, āϰāĻŋāĻĒā§āϰā§āĻ āĻĒāĻžāĻ āĻžāύā§, āĻĢāĻā§ āĻŦā§āϝāĻžāĻ), āϤāĻžāĻšāϞ⧠āĻāĻāĻž āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻ āĻŦā§āĻāĻžāĻĒāĻĄāĻŧāĻžāϝā§āĻā§āϝ āĻāϰā§āύāĨ¤ āĻā§āĻ āϤāĻžā§āĻā§āώāĻŖāĻŋāĻ āĻāĻĒāĻĄā§āĻāĻā§āϞā§āϰ āĻāύā§āϝ āϏāĻžāĻāϞā§āύā§āĻ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻžāĻ āĻĻāĻžāϰā§āĻŖāĨ¤ āĻĻā§āϰā§āĻ āϝā§āĻā§āύ⧠āĻāĻŋāĻā§ āĻšāϞ⧠āϏā§āĻāĻž āĻāĻŽāĻžāύāĻĻāĻžāϰ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤\n\n### āĻāĻāύ āĻĢā§āϰāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻžāĻ āĻĒā§āϰāϝāĻŧā§āĻāύ\n\nāĻāĻžāĻ āϝāĻĻāĻŋ āĻĻā§āϰā§āĻāĻŽā§āϝāĻŧāĻžāĻĻāĻŋ, āϏāĻŽāϝāĻŧ-āϏāĻāĻŦā§āĻĻāύāĻļā§āϞ, āĻŦāĻž āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻ
ā§āϝāĻžāĻāĻļāύā§āϰ āϏāĻā§āĻā§ āĻāĻĄāĻŧāĻŋāϤ āĻšāϝāĻŧ āϤāĻžāĻšāϞ⧠āĻĢā§āϰāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāϧā§āύāĻŋāĻ Android- āĻ āĻŦāĻĄāĻŧ āĻāĻĒāϞā§āĻĄ āϏā§āĻāĻĒ āĻŦāĻž āĻŦāĻŋāϞāĻŽā§āĻŦāĻŋāϤ āĻšāϤ⧠āĻĒāĻžāϰ⧠āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻĢā§āϰāĻā§āϰāĻžāĻāύā§āĻĄ āύāĻž āĻāĻžāϞāĻžāύāĨ¤ WorkManager-āĻ āĻāϰ āĻŽāĻžāύ⧠āĻšāϞ⧠ForegroundInfo āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāĻž āϝāĻžāϤ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻāĻāĻŋ āĻāϞāĻŽāĻžāύ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ āĻĻā§āĻāĻžāϝāĻŧāĨ¤\n\nāĻāĻāĻāĻŋ āĻāĻžāϞ⧠āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ āϤāĻŋāύāĻāĻŋ āĻĒā§āϰāĻļā§āύā§āϰ āĻāϤā§āϤāϰ āĻĻā§āϝāĻŧ: āĻā§ āϏāĻŋāĻā§āĻ āĻšāĻā§āĻā§, āĻāĻāĻž āĻāϤāĻāĻž āĻāĻāĻŋāϝāĻŧā§āĻā§, āĻāĻŦāĻ āĻāĻŋāĻāĻžāĻŦā§ āĻŦāύā§āϧ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āϏā§āĻĒāώā§āĻ āĻā§āϝāĻžāύāϏā§āϞ āĻ
ā§āϝāĻžāĻāĻļāύ āĻĻāĻŋāύ āϝāĻžāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŽā§āĻāĻžāϰā§āĻĄ āĻĄā§āĻāĻžāϝāĻŧ āĻĨāĻžāĻāϞ⧠āĻŦāĻž āĻĢā§āύ āĻāĻāύāĻ āϞāĻžāĻāϞ⧠āĻāĻžāĻ āĻŦāύā§āϧ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤\n\n### āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻŦāĻŋāĻļā§āĻŦāĻžāϏāϝā§āĻā§āϝ āĻŽāύ⧠āϰāĻžāĻāĻžāϰ āĻŽāϤ⧠āĻĒā§āϰāĻā§āϰā§āϏ\n\nāĻĒā§āϰāĻā§āϰā§āϏ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻāύāĻŋāĻā§āϰ āϏāĻā§āĻā§ āĻŽāĻžāύāĻžāύāϏāĻ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤ, āĻāĻžāĻĒāϏāĻž āĻļāϤāĻžāĻāĻļ āύāϝāĻŧāĨ¤ setProgress āĻĻāĻŋāϝāĻŧā§ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ āĻāĻŦāĻ UI-āϤ⧠(WorkInfo āĻĨā§āĻā§) āĻĒāĻĄāĻŧā§āύāĨ¤\n\nāĻāĻĒāύāĻŋ āϝāĻĻāĻŋ 12āĻāĻž āĻĢāĻā§ āĻāĻŦāĻ 3āĻāĻž āĻĢāϰā§āĻŽ āĻāĻĒāϞā§āĻĄ āĻāϰā§āύ, āĻŦāϞā§āύ â5 of 15 items uploadedâ, āĻā§ āĻŦāĻžāĻāĻŋ āĻāĻā§ āĻĻā§āĻāĻžāύ, āĻāĻŦāĻ āĻļā§āώ āϤā§āϰā§āĻāĻŋ āĻŽā§āϏā§āĻ āϏāĻžāĻĒā§āϰā§āĻā§āϰ āĻāύā§āϝ āϰāĻžāĻā§āύāĨ¤\n\nāĻĒā§āϰāĻā§āϰā§āϏ āĻŽāĻžāύ⧠āϰāĻžāĻā§āύ:\n\n- āϏāĻŽā§āĻĒāύā§āύ āĻāĻāĻā§āĻŽ āĻ āĻŦāĻžāĻāĻŋ āĻāĻāĻā§āĻŽ\n- āĻŦāϰā§āϤāĻŽāĻžāύ āϧāĻžāĻĒ ("Uploading photos", "Sending forms", "Finalizing")\n- āĻļā§āώ āϏāĻĢāϞ āϏāĻŋāĻā§āĻ āϏāĻŽāϝāĻŧ\n- āĻļā§āώ āϤā§āϰā§āĻāĻŋ (āϏāĻāĻā§āώāĻŋāĻĒā§āϤ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻžāĻā§āĻāϞ)\n- āĻāĻāĻāĻŋ āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻā§āϝāĻžāύāϏā§āϞ/āϏā§āĻāĻĒ āĻ
āĻĒāĻļāύ\n\nāĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻāĻŋāĻŽ āĻĻā§āϰā§āϤ āύāĻŋāĻāϏā§āĻŦ āĻā§āϞ AppMaster āĻĻāĻŋāϝāĻŧā§ āĻŦāĻžāύāĻžāύ, āĻāĻāĻ āύāĻŋāϝāĻŧāĻŽ āϰāĻžāĻā§āύ: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āϏāĻŋāĻā§āĻā§ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āϤāĻāύāĻ āĻāϰ⧠āϝāĻāύ āϤāĻžāϰāĻž āĻāĻāĻž āĻĻā§āĻāϤ⧠āĻĒāĻžāϝāĻŧ āĻāĻŦāĻ āϏā§āĻāĻž āϤāĻžāĻĻā§āϰ āĻŦāĻžāϏā§āϤāĻŦ āĻāĻžāĻā§āϰ āϏāĻā§āĻā§ āĻŽā§āϞā§āĨ¤\n\n## āĻāĻāύāĻŋāĻ āĻāϝāĻŧāĻžāϰā§āĻ, āĻā§āϝāĻžāĻāϏ, āĻāĻŦāĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϏāĻŋāĻā§āĻ āĻāĻŦ āĻāĻĄāĻŧāĻžāύā§\n\nāĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϏāĻŋāĻā§āĻ āĻāĻŦ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāϰāĻ, āĻŽā§āĻŦāĻžāĻāϞ āĻĄā§āĻāĻž āĻŦāĻžāĻĄāĻŧāĻžāύ⧠āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰ āϏāĻžāĻāĻĄ āĻāύāĻĢā§āϞāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āϏāĻšāĻ āĻāĻĒāĻžāϝāĻŧāĨ¤ WorkManager āĻāĻĒāύāĻžāĻā§ āĻĻā§āĻāĻāĻŋ āϏāϰāϞ āĻā§āϞ āĻĻā§āϝāĻŧ: unique work name āĻ tagsāĨ¤\n\nāĻāĻāĻāĻŋ āĻāĻžāϞ⧠āĻĄāĻŋāĻĢāϞā§āĻ āĻšāϞ⧠âsyncâ āĻā§ āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻā§āϞ āϞā§āύ āϧāϰāĻžāĨ¤ āĻ
ā§āϝāĻžāĻĒ āϝāĻāύ āĻāĻžāĻā§, āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāĻā§ āĻāĻŦāĻ āĻĒāĻŋāϰāĻŋā§āĻĄāĻŋāĻ āĻāĻŦ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰ⧠āĻāĻāϏāĻžāĻĨā§, āϤāĻāύ āĻāĻāĻžāϧāĻŋāĻ āĻāĻŦ enqueue āύāĻž āĻāϰ⧠āĻāĻāĻ unique work name enqueue āĻāϰā§āύâāĻāĻāĻžāĻŦā§ sync storm āĻšāĻŦā§ āύāĻžāĨ¤\n\nkotlin\nval request = OneTimeWorkRequestBuilder\u003cSyncWorker\u003e()\n .addTag(\"sync\")\n .build()\n\nWorkManager.getInstance(context)\n .enqueueUniqueWork(\"sync\", ExistingWorkPolicy.KEEP, request)\n\n\nāĻĒāϞāĻŋāϏāĻŋ āĻŦāĻžāĻāĻžāĻ āĻšāĻā§āĻā§ āĻĒā§āϰāϧāĻžāύ āĻāĻāϰāĻŖāĻāϤ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ:\n\n- KEEP: āϝāĻĻāĻŋ āĻāĻāĻāĻŋ āϏāĻŋāĻā§āĻ āĻāϤāĻŋāĻŽāϧā§āϝā§āĻ āĻāϞāĻā§ (āĻŦāĻž āĻāĻŋāĻ āĻāϰāĻž āĻāĻā§), āύāϤā§āύ āĻ
āύā§āϰā§āϧ āĻāĻĒā§āĻā§āώāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ âSync nowâ āĻŦā§āϤāĻžāĻŽ āĻ āĻ
āĻā§-āĻā§āϰāĻŋāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤\n- REPLACE: āĻŦāϰā§āϤāĻŽāĻžāύāĻāĻŋ āĻŦāĻžāϤāĻŋāϞ āĻāϰ⧠āύāϤā§āύ āĻļā§āϰ⧠āĻāϰāĻŦā§āĨ¤ āϝāĻāύ āĻāύāĻĒā§āĻ āϏāϤā§āϝāĻŋāĻ āĻŦāĻĻāϞ⧠āϝāĻžāϝāĻŧ (āϝā§āĻŽāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻ
ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻŦāĻĻāϞāĻžāύ⧠āĻŦāĻž āĻāĻŋāύā§āύ āĻĒā§āϰāĻā§āĻā§āĻ āϏāĻŋāϞā§āĻā§āĻ āĻāϰāĻž) āϤāĻāύ āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤\n\nāĻā§āϝāĻžāĻāĻā§āϞ⧠āĻāύāĻā§āϰā§āϞ āĻ āĻĻā§āĻļā§āϝāĻŽāĻžāύāϤāĻžāϰ āĻāύā§āϝ āĻšā§āϝāĻžāύā§āĻĄā§āϞāĨ¤ āĻāĻāĻāĻŋ āϏā§āĻĨāĻžāϝ⧠āĻā§āϝāĻžāĻ (sync) āĻĻāĻŋāϝāĻŧā§ āĻāĻĒāύāĻŋ āĻā§āϝāĻžāύāϏā§āϞ, āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻā§āĻ āĻŦāĻž āϞāĻ āĻĢāĻŋāϞā§āĻāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻāĻāĻŋ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞ âsync nowâ āĻ
ā§āϝāĻžāĻāĻļāύā§āϰ āĻāύā§āϝ āĻŦāĻŋāĻļā§āώāĻāĻžāĻŦā§ āĻāĻĒāĻāĻžāϰā§: āĻāĻĒāύāĻŋ āĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻā§āύ āĻāĻžāĻ āĻāϤā§āĻŽāϧā§āϝ⧠āĻāϞāĻā§ āĻāĻŦāĻ āύāϤā§āύ worker āϞāĻā§āĻ āĻāϰāĻžāϰ āĻāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻāĻāĻāĻŋ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻŽā§āϏā§āĻ āĻĻā§āĻāĻžāϤ⧠āĻĒāĻžāϰā§āύāĨ¤\n\nāĻĒāĻŋāϰāĻŋā§āĻĄāĻŋāĻ āĻ āĻ
āύ-āĻĄāĻŋāĻŽāĻžāύā§āĻĄ āϏāĻŋāĻā§āĻāĻ āĻāĻā§ āĻ
āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āϞāĻĄāĻŧāĻžāĻ āĻāϰāĻž āĻāĻāĻŋāϤ āύāϝāĻŧāĨ¤ āĻāϞāĻžāĻĻāĻž āĻāĻŋāύā§āϤ⧠āϏāĻŽāύā§āĻŦāĻŋāϤ āϰāĻžāĻā§āύ:\n\n- āĻļāĻŋāĻĄāĻŋāĻāϞāĻĄ āĻāĻžāĻā§āϰ āĻāύā§āϝ enqueueUniquePeriodicWork("sync_periodic", KEEP, ...) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤\n- āĻ
āύ-āĻĄāĻŋāĻŽāĻžāύā§āĻĄā§āϰ āĻāύā§āϝ enqueueUniqueWork("sync", KEEP, ...) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤\n- worker-āĻ āĻāĻŋāĻā§ āĻāĻĒāϞā§āĻĄ āĻŦāĻž āĻĄāĻžāĻāύāϞā§āĻĄ āύāĻž āĻĨāĻžāĻāϞ⧠āĻĻā§āϰā§āϤ exit āĻāϰā§āύ, āϝāĻžāϤ⧠āĻĒāĻŋāϰāĻŋā§āĻĄāĻŋāĻ āϰāĻžāύ āϏāϏā§āϤāĻž āĻĨāĻžāĻā§āĨ¤\n- āĻāĻā§āĻāĻŋāĻāĻāĻžāĻŦā§, āĻĒāĻŋāϰāĻŋā§āĻĄāĻŋāĻ worker āĻāĻāĻ one-time unique sync enqueue āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϝāĻžāϤ⧠āĻŦāĻžāϏā§āϤāĻŦ āĻāĻžāĻ āĻāĻāĻāĻŋ āĻāĻžāϝāĻŧāĻāĻžāϝāĻŧ āĻšāϝāĻŧāĨ¤\n\nāĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύāĻā§āϞ⧠āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻāĻā§ āĻĒā§āϰā§āĻĄāĻŋāĻā§āĻā§āĻŦāϞ āϰāĻžāĻā§: āĻāĻ āϏāĻŽāϝāĻŧā§ āĻāĻ āϏāĻŋāĻā§āĻ, āϏāĻšāĻā§ āĻā§āϝāĻžāύāϏā§āϞāϝā§āĻā§āϝ, āĻāĻŦāĻ āϏāĻšāĻā§ āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖāϝā§āĻā§āϝāĨ¤\n\n## āϧāĻžāĻĒā§ āϧāĻžāĻĒā§: āĻāĻāĻāĻŋ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāĻā§āϝāĻžāϞ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ\n\nāĻāĻāĻāĻŋ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āϏāĻŋāĻā§āĻ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āĻā§āĻ āĻāĻāĻāĻŋ āϏā§āĻā§āĻ āĻŽā§āĻļāĻŋāύ āĻšāĻŋāϏā§āĻŦā§ āĻāĻāϰāĻŖ āĻāϰāϞ⧠āϤā§āϰāĻŋ āĻāϰāĻž āϏāĻšāĻ: āĻāĻžāĻāĻā§āϞ⧠āĻĒā§āϰāĻĨāĻŽā§ āϞā§āĻāĻžāϞāĻŋ āĻĨāĻžāĻā§, āĻāϰ WorkManager āĻā§āĻŦāϞ āϤāĻāύāĻ āĻāĻā§āϞā§āĻā§ āϏāĻžāĻŽāύ⧠āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ āϝāĻāύ āĻļāϰā§āϤ āĻ āĻŋāĻ āĻĨāĻžāĻā§āĨ¤\n\n### āĻāĻāĻāĻŋ āϏāϰāϞ āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āϝāĻž āĻāĻĒāύāĻŋ āĻĒāĻžāĻ āĻžāϤ⧠āĻĒāĻžāϰāĻŦā§āύ\n\n1) āϞā§āĻāĻžāϞ âqueueâ āĻā§āĻŦāĻŋāϞ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύāĨ¤ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāϰāĻŽā§āĻ āĻāϰāϤ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŽ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ: āĻāĻāĻā§āĻŽ āĻāĻāĻĄāĻŋ, āĻāĻžāĻāĻĒ (form, photo, note), āϏā§āĻā§āϝāĻžāĻāĻžāϏ (pending, uploading, done), attempts count, last error, āĻāĻŦāĻ āĻĄāĻžāĻāύāϞā§āĻĄā§āϰ āĻāύā§āϝ āĻāĻžāϰā§āϏāϰ āĻŦāĻž āϏāĻžāϰā§āĻāĻžāϰ āϰāĻŋāĻāĻŋāĻļāύāĨ¤\n\n2) āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§āϝāĻžāĻĒ āĻāϰāϞ⧠âSync nowââāĻāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ OneTimeWorkRequest enqueue āĻāϰā§āύ āϝāĻžāϰ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻāĻĒāύāĻžāϰ āĻŦāĻžāϏā§āϤāĻŦ āĻŦāĻŋāĻļā§āĻŦā§āϰ āϏāĻžāĻĨā§ āĻŽā§āϞā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāĻāĻžāĻŦā§ network connected āĻāĻŦāĻ battery not low āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāϞā§āĻĄ āĻāĻžāϰ⧠āĻšāϝāĻŧ, āϤāĻāύ chargingāĻ āĻāĻŦāĻļā§āϝāĻ āĻāϰā§āύāĨ¤\n\n3) āĻāĻāĻāĻŋ CoroutineWorker āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻ āĻāϰā§āύ āĻā§āϞāĻŋāϝāĻŧāĻžāϰ āĻĢā§āĻāϏāĻš: upload, download, reconcileāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĢā§āĻ āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻāĻžāϞ āϰāĻžāĻā§āύāĨ¤ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ pending āĻŽāĻžāϰā§āĻ āĻāϰāĻž āĻāĻāĻā§āĻŽ āĻāĻĒāϞā§āĻĄ āĻāϰā§āύ, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻĒāύāĻžāϰ āĻļā§āώ āĻāĻžāϰā§āϏāϰā§āϰ āĻĒāϰ āĻĨā§āĻā§ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻĄāĻžāĻāύāϞā§āĻĄ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻāύāĻĢā§āϞāĻŋāĻā§āĻāĻā§ āϏāϰāϞ āύāĻŋāϝāĻŧāĻŽā§ āϰāĻŋāĻāύāϏāĻžāĻāϞ āĻāϰā§āύ (āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāϏāĻžāĻāύāĻŽā§āύā§āĻ āĻĢāĻŋāϞā§āĻĄā§ āϏāĻžāϰā§āĻāĻžāϰ āĻāϝāĻŧā§, āϞā§āĻāĻžāϞ āĻĄā§āϰāĻžāĻĢāĻ āύā§āĻā§ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻāϝāĻŧā§)āĨ¤\n\n4) āĻŦā§āϝāĻžāĻāĻ
āĻĢāϏāĻš āϰāĻŋāĻā§āϰāĻžāĻ āϝā§āĻ āĻāϰā§āύ, āĻāĻŋāύā§āϤ⧠āĻāĻŋ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāĻŦā§āύ āϏā§āĻāĻž āĻŦā§āĻā§ āύāĻŋāύāĨ¤ āĻāĻžāĻāĻŽāĻāĻāĻ āĻ 500s āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāĻŦā§āύ; 401 āĻšāϞ⧠āĻĻā§āϰā§āϤ āĻŦā§āϝāϰā§āĻĨ āĻāϰā§āύ āĻāĻŦāĻ UI-āĻā§ āĻāĻžāύāĻžāύāĨ¤\n\n5) UI āĻ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύā§āϰ āĻāύā§āϝ WorkInfo āĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖ āĻāϰā§āύāĨ¤ âUploading 3 of 10ââāĻāϰ āĻŽāϤ⧠āĻĢā§āĻāĻā§āϞā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻā§āϰā§āϏ āĻāĻĒāĻĄā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ, āĻāĻŦāĻ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āϤā§āϰā§āĻāĻŋ āĻŦāĻžāϰā§āϤāĻž āĻĻā§āĻāĻžāύ āϝāĻž āĻĒāϰāĻŦāϰā§āϤ⧠āĻāϰāĻŖā§āϝāĻŧ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰ⧠(retry, sign in, connect to WiâFi)āĨ¤\n\nkotlin\nval constraints = Constraints.Builder()\n .setRequiredNetworkType(NetworkType.CONNECTED)\n .setRequiresBatteryNotLow(true)\n .build()\n\nval request = OneTimeWorkRequestBuilder\u003cSyncWorker\u003e()\n .setConstraints(constraints)\n .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30, TimeUnit.SECONDS)\n .build()\n\n\nāĻāĻĒāύāĻŋ āĻāĻŋāĻ āϞā§āĻāĻžāϞ āϰāĻžāĻāϞ⧠āĻāĻŦāĻ worker āĻĢā§āĻāĻā§āϞ⧠explicit āϰāĻžāĻāϞā§, āĻāĻāϰāĻŖ āĻĒā§āϰā§āĻĄāĻŋāĻā§āĻā§āĻŦāϞ āĻšāϝāĻŧ: āĻāĻžāĻ āϏā§āĻĨāĻāĻŋāϤ, āĻĒā§āύāϰāĻžāϰāĻŽā§āĻ, āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ āĻāĻŋāĻā§ āĻāĻāϞ āύāĻž āϧāϰ⧠āύāĻŋāϝāĻŧā§ āύāĻžāĨ¤\n\n## āϏāĻžāϧāĻžāϰāĻŖ āĻā§āϞ āĻ āĻĢāĻžāĻāĻĻ (āĻāĻŦāĻ āϏā§āĻā§āϞ⧠āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĄāĻŧāĻžāĻŦā§āύ)\n\nāύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āϏāĻŋāĻā§āĻ āĻĒā§āϰāĻžāϝāĻŧāĻ āĻāϝāĻŧā§āĻāĻāĻŋ āĻā§āĻ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤā§āϰ āĻāĻžāϰāĻŖā§ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧ āϝāĻž āĻĄā§āĻ-āĻĢā§āύ⧠āĻ āĻŋāĻ āĻŽāύ⧠āĻšāϞā§āĻ āĻŦāĻžāϏā§āϤāĻŦā§ āĻā§āĻā§ āĻĒāĻĄāĻŧā§āĨ¤ āϞāĻā§āώā§āϝ āĻšāϞ āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻ āĻŋāĻ āϏāĻŽāϝāĻŧā§ āĻāĻžāĻ āĻāĻžāϞāĻžāύā§âāύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻāϞāĻžāϰ āĻā§āϝāĻŧā§āĨ¤\n\n### āĻŽāύā§āϝā§āĻā§āϰ āĻĢāĻžāĻāĻĻāĻā§āϞā§\n\n- āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻāĻžāĻĄāĻŧāĻž āĻŦāĻĄāĻŧ āĻāĻĒāϞā§āĻĄ āĻāϰāĻžāĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āύāĻ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻ āĻā§āύāĻ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞā§āĻā§āϞ⧠āĻĢāĻā§ āĻĒāĻžāĻ āĻžāύ, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āϤāĻž āĻ
āύā§āĻāĻŦ āĻāϰāĻŦā§āĨ¤ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻāĻžāĻāĻĒ āĻ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞ⧠āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻĻāĻŋāύ, āĻāϰ āĻŦāĻĄāĻŧ āĻāĻžāĻ āĻā§āĻ āĻā§āĻ āĻā§āĻāϰā§āϤ⧠āĻāĻžāĻ āĻāϰā§āύāĨ¤\n- āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻŦā§āϝāϰā§āĻĨāϤāĻžāĻā§ āĻ
āύāύā§āϤāĻāĻžāϞ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāĻžāĨ¤ 401, āĻŽā§āϝāĻŧāĻžāĻĻā§āϤā§āϤā§āϰā§āĻŖ āĻā§āĻā§āύ āĻŦāĻž āĻ
āύā§āĻĒāϏā§āĻĨāĻŋāϤ āĻ
āύā§āĻŽāϤāĻŋ āĻ
āϏā§āĻĨāĻžāϝāĻŧā§ āϏāĻŽāϏā§āϝāĻž āύāϝāĻŧāĨ¤ āĻāĻā§āϞā§āĻā§ āĻšāĻžāϰā§āĻĄ āĻĢā§āĻāϞ āĻšāĻŋāϏā§āĻŦā§ āĻāĻŋāĻšā§āύāĻŋāϤ āĻāϰā§āύ, āϏā§āĻĒāώā§āĻ āĻā§āϰāĻŋāϝāĻŧāĻž āĻĻā§āĻāĻžāύ (āĻĒā§āύāϰāĻžāϝāĻŧ āϞāĻāĻāύ), āĻāϰ āĻā§āĻŦāϞ āĻāĻžāĻāĻŽāĻāĻāĻā§āϰ āĻŽāϤ⧠āĻā§āϰāĻžāύāĻāĻŋāϝāĻŧā§āύā§āĻ āϏāĻŽāϏā§āϝāĻž āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§āύāĨ¤\n- āĻĻā§āϰā§āĻāĻāύāĻžāĻā§āϰāĻŽā§ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āϤā§āϰāĻŋ āĻāϰāĻžāĨ¤ āϝāĻĻāĻŋ worker āĻĻā§āĻāĻŦāĻžāϰ āĻāϞāϤ⧠āĻĒāĻžāϰā§, āϏāĻžāϰā§āĻāĻžāϰ āĻĄāĻŦāϞ āĻā§āϰāĻŋāϝāĻŧā§āĻ āĻĒāĻžāĻŦā§ āϝāĻĻāĻŋ āĻ
āύā§āϰā§āϧ idempotent āύāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻāĻā§āĻŽā§ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ-āĻā§āύāĻžāϰā§āĻ āĻāϰāĻž āϏā§āĻĨāĻžāϝāĻŧā§ ID āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻāĻŦāĻ āϏāĻžāϰā§āĻāĻžāϰāĻā§ āϰāĻŋāĻĒāĻŋāĻāĻā§ āĻāĻĒāĻĄā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāϤ⧠āĻŦāϞā§āύāĨ¤\n- near real-time āĻāύā§āϝ periodic work āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāĨ¤ Periodic work āĻŽā§āĻāύāĻā§āύā§āϝāĻžāύā§āϏā§āϰ āĻāύā§āϝ āĻāĻžāϞā§, āĻāĻŋāύā§āϤ⧠âsync nowââāĻāϰ āĻāύā§āϝ āύāϝāĻŧāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻāĻĻā§āĻĻāĻŋāώā§āĻ āϏāĻŋāĻā§āĻā§āϰ āĻāύā§āϝ one-time unique work enqueue āĻāϰā§āύāĨ¤\n- â100%â āĻā§āĻŦ āϤāĻžāĻĄāĻŧāĻžāϤāĻžāĻĄāĻŧāĻŋ āϰāĻŋāĻĒā§āϰā§āĻ āĻāϰāĻžāĨ¤ āĻāĻĒāϞā§āĻĄ āĻāĻŽāĻĒā§āϞāĻŋāĻļāύ āĻŽāĻžāύā§āĻ āĻĄā§āĻāĻž āĻā§āϰāĻšāĻŖ āĻ āϰāĻŋāĻāύāϏāĻžāĻāϞ āĻšāĻāϝāĻŧāĻž āύāϝāĻŧāĨ¤ āϏā§āĻā§āĻ āϧāϰ⧠āĻĒā§āϰāĻā§āϰā§āϏ āĻā§āϰā§āϝāĻžāĻ āĻāϰā§āύ (queued, uploading, server confirmed) āĻāĻŦāĻ āĻā§āĻŦāϞ āϏāĻžāϰā§āĻāĻžāϰ āĻāύāĻĢāĻžāϰā§āĻŽā§āĻļāύā§āϰ āĻĒāϰ⧠done āĻĻā§āĻāĻžāύāĨ¤\n\nāĻāĻāĻāĻŋ āĻāĻāĻā§āϰāĻŋāĻ āĻāĻĻāĻžāĻšāϰāĻŖ: āĻāĻāĻāύ āĻā§āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāύ āϤāĻŋāύāĻāĻŋ āĻāĻŦāĻŋāϏāĻš āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽ elevator-āĻ āĻĻā§āϰā§āĻŦāϞ āϏāĻŋāĻāύāĻžāϞ āĻĻāĻŋāϝāĻŧā§ āϏāĻžāĻŦāĻŽāĻŋāĻ āĻāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āύ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āύāĻž āĻĻāĻŋāϝāĻŧā§ āĻĢāĻā§ āĻāĻĒāϞā§āĻĄ āĻļā§āϰ⧠āĻāϰā§āύ, āĻāĻĒāϞā§āĻĄ āĻāĻāĻā§ āϝāĻžāĻŦā§, āϰāĻŋāĻā§āϰāĻžāĻ āĻŦāĻžāĻĄāĻŧāĻŦā§, āĻāĻŦāĻ āĻ
ā§āϝāĻžāĻĒ āϰāĻŋāϏā§āĻāĻžāϰā§āĻā§ āĻĢāϰā§āĻŽ āĻĻā§āĻŦāĻžāϰ āϤā§āϰāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻĻā§āύ, āϧāĻžāĻĒā§ āĻāĻĒāϞā§āĻĄ āĻāϰā§āύ, āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĢāϰā§āĻŽā§ āϏā§āĻĨāĻžāϝāĻŧā§ ID āϰāĻžāĻā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻāĻ āϏāĻŋāύāĻžāϰāĻŋāĻāϤ⧠āϏāĻžāϰā§āĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āϰā§āĻāϰā§āĻĄ āĻĨāĻžāĻāĻŦā§ āĻ āĻĒā§āϰāĻā§āϰā§āϏ āϏāϤā§āϝāĨ¤\n\n## āϰāĻŋāϞāĻŋāĻā§āϰ āĻāĻā§ āĻĻā§āϰā§āϤ āĻā§āĻāϞāĻŋāϏā§āĻ\n\nāϰāĻŋāϞāĻŋāĻā§āϰ āĻāĻā§ āĻŦāĻžāϏā§āϤāĻŦ āĻĢāĻŋāϞā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻāĻŦā§ āϏā§āĻāĻž āĻŽāϤ⧠āϏāĻŋāĻā§āĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ: āĻ
āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āϏāĻŋāĻāύāĻžāϞ, āĻĄā§āĻĄ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ, āĻāĻŦāĻ āĻ
āύā§āĻ āĻā§āϝāĻžāĻĒāĨ¤ āĻĄā§āĻ āĻĢā§āύ⧠āĻ āĻŋāĻ āĻĻā§āĻāϞā§āĻ āĻŦāĻžāϏā§āϤāĻŦ āĻĄāĻŋāĻāĻžāĻāϏ⧠scheduling, retries āĻŦāĻž āϏā§āĻā§āϝāĻžāĻāĻžāϏ āϰāĻŋāĻĒā§āϰā§āĻāĻŋāĻ āϏāĻŽāϏā§āϝāĻž āĻšāϞ⧠āϤāĻž āĻĢā§āϞ āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤\n\nāĻāĻŽāĻĒāĻā§āώ⧠āĻāĻāĻāĻŋ āĻĒā§āϰāύ⧠āĻĄāĻŋāĻāĻžāĻāϏ āĻ āĻāĻāĻāĻŋ āύāϤā§āύ āĻĄāĻŋāĻāĻžāĻāϏ⧠āĻāĻā§āϞ⧠āĻāĻžāϞāĻžāύāĨ¤ āϞā§āĻ āϰāĻžāĻā§āύ, āĻāĻŋāύā§āϤ⧠UI-āϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻā§ āĻĻā§āĻāĻā§ āϤāĻžāĻ āĻĻā§āĻā§āύāĨ¤\n\n- āύā§āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āϤāĻžāϰāĻĒāϰ āϰāĻŋāĻāĻāĻžāϰāĻŋ: āĻāĻžāύā§āĻāĻāĻŋāĻāĻŋāĻāĻŋ āĻŦāύā§āϧ āϰā§āĻā§ āϏāĻŋāĻā§āĻ āĻļā§āϰ⧠āĻāϰā§āύ, āĻĒāϰ⧠āĻāĻžāϞ⧠āĻāϰā§āύāĨ¤ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āĻāĻžāĻ āĻāĻŋāĻ āĻāϰāĻž āĻāĻā§ (āϤāϤāĻā§āώāĻŖāĻžā§ āĻŦā§āϝāϰā§āĻĨ āύāϝāĻŧ) āĻāĻŦāĻ āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻšāϞ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻāĻžāĻĄāĻŧāĻž āĻĒā§āύāϰāĻžāϝāĻŧ āĻļā§āϰ⧠āĻšāϝāĻŧāĨ¤\n- āĻĄāĻŋāĻāĻžāĻāϏ āϰāĻŋāϏā§āĻāĻžāϰā§āĻ: āϏāĻŋāĻā§āĻ āĻļā§āϰ⧠āĻāϰā§āύ, āĻŽāĻžāĻāĻĒāĻĨā§ āϰāĻŋāĻŦā§āĻ āĻĻāĻŋāύ, āϤāĻžāϰāĻĒāϰ āĻ
ā§āϝāĻžāĻĒ āĻā§āϞā§āύāĨ¤ āϝāĻžāĻāĻžāĻ āĻāϰā§āύ āĻāĻžāĻ āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻŦāĻž āϰāĻŋ-āĻļā§āĻĄāĻŋāĻāϞ āĻšāϝāĻŧ āĻāĻŦāĻ UI āϏāĻ āĻŋāĻ āϏā§āĻā§āĻ āĻĻā§āĻāĻžāϝāĻŧ ("syncing" āĻ āĻāĻāĻ āύāϝāĻŧ)āĨ¤\n- āϞ⧠āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ āĻāĻŽ āϏā§āĻā§āϰā§āĻ: āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϏā§āĻāĻžāϰ āĻ
āύ āĻāϰā§āύ, āϏāĻŽā§āĻāĻŦ āĻšāϞ⧠āϞ⧠āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻĨā§āϰā§āĻļāĻšā§āϞā§āĻĄā§ āύāĻžāĻŽāĻžāύ, āĻāĻŦāĻ āϏā§āĻā§āϰā§āĻ āĻĒā§āϰāĻžāϝāĻŧ āĻĒā§āϰā§āĻŖ āĻāϰā§āύāĨ¤ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āĻāĻžāĻ āĻ
āĻĒā§āĻā§āώāĻž āĻāϰ⧠āĻāĻŦāĻ āĻļāϰā§āϤ āĻāύā§āύāϤ āĻšāϞ⧠āĻāĻžāϞāĻŋāϝāĻŧā§ āϝāĻžāϝāĻŧ, āĻĒā§āύāϰāĻžāϝāĻŧ āϰāĻŋāĻā§āϰāĻžāĻ āϞā§āĻĒā§ āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāϰāĻ āĻāϰ⧠āύāĻžāĨ¤\n- āĻ
āύā§āĻāĻŦāĻžāϰ āĻā§āϰāĻŋāĻāĻžāϰ: Sync āĻŦā§āϤāĻžāĻŽ āĻāĻāĻžāϧāĻŋāĻāĻŦāĻžāϰ āĻā§āϝāĻžāĻĒ āĻāϰā§āύ āĻŦāĻž āĻŦāĻŋāĻāĻŋāύā§āύ āϏā§āĻā§āϰāĻŋāύ āĻĨā§āĻā§ āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āϞāĻāĻŋāĻā§āϝāĻžāϞ āϏāĻŋāĻā§āĻ āϰāĻžāύ āĻĒāĻžāĻā§āĻž āĻāĻāĻŋāϤ, āĻĒā§āϝāĻžāϰāĻžāϞāĻžāϞ worker-āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§āĨ¤\n- āϏāĻžāϰā§āĻāĻžāϰ āĻŦā§āϝāϰā§āĻĨāϤāĻž āϝā§āĻā§āϞ⧠āĻŦā§āϝāĻžāĻā§āϝāĻžāϝā§āĻā§āϝ: 500s, āĻāĻžāĻāĻŽāĻāĻāĻ, āĻ auth āϤā§āϰā§āĻāĻŋ āϏāĻŋāĻŽā§āϞā§āĻ āĻāϰā§āύāĨ¤ āϝāĻžāĻāĻžāĻ āĻāϰā§āύ āϰāĻŋāĻā§āϰāĻžāĻ āĻŦā§āϝāĻžāĻāĻ
āĻĢ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻā§āϝāĻžāĻĒā§āϰ āĻĒāϰ⧠āĻĨāĻžāĻŽā§, āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āϏā§āĻĒāώā§āĻ āĻŽā§āϏā§āĻ āĻĻā§āĻā§ ("Canât reach server, will retry")âāĻā§āύā§āϰāĻŋāĻ āϤā§āϰā§āĻāĻŋ āύāϝāĻŧāĨ¤\n\nāϝāĻĻāĻŋ āĻā§āύ⧠āĻā§āϏā§āĻ āĻ
ā§āϝāĻžāĻĒāĻā§ āĻ
āϏā§āĻĒāώā§āĻ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĢā§āϞā§, āϏā§āĻāĻžāĻā§ āĻŦāĻžāĻ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύāĨ¤ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āϧā§āϰ āϏāĻŋāĻā§āĻ āĻā§āώāĻŽāĻž āĻāϰ⧠āĻĻā§āύ, āĻāĻŋāύā§āϤ⧠āĻĄā§āĻāĻž āĻšāĻžāϰāĻžāύ⧠āĻŦāĻž āĻŦā§āĻāϤ⧠āύāĻž āĻĒāĻžāϰāĻž āĻŽāĻžāĻĢ āĻāϰ⧠āύāĻžāĨ¤\n\n## āĻāĻĻāĻžāĻšāϰāĻŖ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ: āĻ
āĻĢāϞāĻžāĻāύ āĻĢāϰā§āĻŽ āĻ āĻĢāĻā§ āĻāĻĒāϞā§āĻĄ āĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒā§\n\nāĻāĻāĻāύ āĻā§āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāύ āĻĻā§āϰā§āĻŦāϞ āĻāĻāĻžāϰā§āĻā§ āϏāĻžāĻāĻā§ āĻĒā§āĻāĻā§āĨ¤ āϤāĻžāϰāĻž āĻ
āĻĢāϞāĻžāĻāύ⧠āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏ āĻĢāϰā§āĻŽ āĻĒā§āϰāĻŖ āĻāϰā§, 12āĻāĻŋ āĻāĻŦāĻŋ āĻā§āϝāĻžāĻĒāĻāĻžāϰ āĻāϰā§, āĻāĻŦāĻ Submit āĻā§āϝāĻžāĻĒ āĻāϰā§āĨ¤ āĻ
ā§āϝāĻžāĻĒ āĻĒā§āϰāĻĨāĻŽā§ āϏāĻŦāĻāĻŋāĻā§ āϞā§āĻāĻžāϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰ⧠(āĻāĻĻāĻžāĻšāϰāĻŖ: āϞā§āĻāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏā§): āĻāĻāĻāĻŋ āϰā§āĻāϰā§āĻĄ āĻĢāϰā§āĻŽā§āϰ āĻāύā§āϝ, āĻāĻŦāĻ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŦāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϰā§āĻāϰā§āĻĄ āϏā§āĻĒāώā§āĻ āϏā§āĻā§āĻ āϏāĻš āϝā§āĻŽāύ PENDING, UPLOADING, DONE, āĻŦāĻž FAILEDāĨ¤\n\nāϤāĻžāϰāĻž Submit āĻā§āϝāĻžāĻĒ āĻāϰāϞ⧠āĻ
ā§āϝāĻžāĻĒ āĻāĻāĻāĻŋ unique sync job enqueue āĻāϰ⧠āϝāĻžāϤ⧠āϤāĻžāϰāĻž āĻĻā§āĻāĻŦāĻžāϰ āĻā§āϝāĻžāĻĒ āĻāϰāϞ⧠āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏā§āĻāĻāĻĒ āĻšāϞ⧠WorkManager āĻā§āĻāύ: āĻĒā§āϰāĻĨāĻŽā§ āĻĢāĻā§ āĻāĻĒāϞā§āĻĄ (āĻŦāĻĄāĻŧ, āϧā§āϰ), āϤāĻžāϰāĻĒāϰ attachments āĻāύāĻĢāĻžāϰā§āĻŽ āĻšāϞ⧠āĻĢāϰā§āĻŽ āĻĒā§-āϞā§āĻĄ āĻĒāĻžāĻ āĻžāύā§āĨ¤\n\nāϏāĻŋāĻā§āĻ āϤāĻāύāĻ āĻāϞ⧠āϝāĻāύ āĻļāϰā§āϤ āĻŦāĻžāϏā§āϤāĻŦ āĻā§āĻŦāύā§āϰ āϏāĻā§āĻā§ āĻŽā§āϞā§âāĻāĻĻāĻžāĻšāϰāĻŖ: āϏāĻāϝā§āĻā§āϤ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ, āύāύ-āϞ⧠āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ, āĻāĻŦāĻ āĻĒāϰā§āϝāĻžāĻĒā§āϤ āϏā§āĻā§āϰā§āĻāĨ¤ āϝāĻĻāĻŋ āĻā§āĻ āĻāĻāύ⧠āĻŦā§āĻāϏāĻŽā§āύā§āĻā§ āĻĨāĻžāĻā§, āĻāĻŋāĻā§āĻ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄā§ āϞā§āĻĒ āĻāϰ⧠āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻāĻžāĻŦā§ āύāĻžāĨ¤\n\nāĻĒā§āϰāĻā§āϏ āϏā§āĻĒāώā§āĻ āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻĢā§āϰā§āύā§āĻĄāϞāĻŋāĨ¤ āĻāĻĒāϞā§āĻĄ āĻĢā§āϰāĻā§āϰāĻžāĻāύā§āĻĄ āĻāĻžāĻā§ āĻāϞ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ āĻĻā§āĻāĻžāϝāĻŧ âUploading 3 of 12â, āĻāĻāĻāĻŋ āϏā§āĻĒāώā§āĻ Cancel āĻ
āĻĒāĻļāύā§āϰ āϏāĻā§āĻā§āĨ¤ āϝāĻĻāĻŋ āϤāĻžāϰāĻž āĻā§āϝāĻžāύāϏā§āϞ āĻāϰā§, āĻ
ā§āϝāĻžāĻĒ āĻāĻžāĻ āĻŦāύā§āϧ āĻāϰ⧠āĻāĻŦāĻ āĻŦāĻžāĻāĻŋ āĻāĻāĻā§āĻŽāĻā§āϞ⧠PENDING āϰā§āĻā§āĻ āϰāĻžāĻā§ āϝāĻžāϤ⧠āĻĒāϰ⧠āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāĻž āϝāĻžāϝāĻŧ āĻĄā§āĻāĻž āύāĻž āĻšāĻžāϰāĻŋāϝāĻŧā§āĨ¤\n\nāĻĢā§āϞā§āϝāĻžāĻāĻŋ āĻšāĻāϏā§āĻĒāĻā§āϰ āĻĒāϰ⧠āϰāĻŋāĻā§āϰāĻžāĻ āĻāĻĻā§āϰāĻāĻžāĻŦā§ āĻāĻāϰāĻŖ āĻāϰā§: āĻĒā§āϰāĻĨāĻŽ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻĻā§āϰā§āϤ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻŦā§āϝāϰā§āĻĨ āĻšāϞ⧠āĻ
āĻĒā§āĻā§āώāĻž āĻŦāĻžāĻĄāĻŧā§ (āĻāĻā§āϏāĻĒā§āύā§āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻžāĻāĻ
āĻĢ)āĨ¤ āĻļā§āϰā§āϤ⧠āĻāĻāĻŋ āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻžāĻļā§āϞ āĻŽāύ⧠āĻšāϝāĻŧ, āĻĒāϰ⧠āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āĻ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āϏā§āĻĒā§āϝāĻžāĻŽ āĻāĻĄāĻŧāĻžāϤ⧠āĻŦā§āϝāĻžāĻ-āĻ
āĻĢ āĻāϰā§āĨ¤\n\nāĻ
āĻĒāϏ āĻāĻŋāĻŽā§āϰ āĻāύā§āϝ āĻĢāϞāĻžāĻĢāϞ āĻāĻžāϰā§āϝāĻāϰ: āĻāĻŽ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āĻāĻŽāĻž āĻāĻžāϰāĻŖ āĻāĻāĻā§āĻŽāĻā§āϞ⧠idempotent āĻ āĻāĻāύāĻŋāĻ āĻāĻŋāĻ āĻāϰāĻž āĻāĻā§, āϏā§āĻĒāώā§āĻ āĻŦā§āϝāϰā§āĻĨāϤāĻž āϏā§āĻā§āĻ (āĻā§āύ āĻāĻŦāĻŋ āĻŦā§āϝāϰā§āĻĨ āĻšāϝāĻŧā§āĻā§, āĻā§āύ, āĻāĻāύ āϏā§āĻāĻž āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰāĻŦā§), āĻāĻŦāĻ âsubmittedâ āĻŽāĻžāύ⧠âāύāĻŋāϰāĻžāĻĒāĻĻā§ āϏāĻāϰāĻā§āώāĻŋāϤ āĻāĻŦāĻ āϏāĻŋāĻā§āĻ āĻšāĻŦā§â āĻŦāϞ⧠āĻŦāĻĄāĻŧ āĻŦāĻŋāĻļā§āĻŦāĻžāϏāĨ¤\n\n## āĻĒāϰāĻŦāϰā§āϤ⧠āϧāĻžāĻĒ: āĻĒā§āϰāĻĨāĻŽā§ āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝāϤāĻž āĻĒāĻžāĻ āĻžāύ, āϤāĻžāϰāĻĒāϰ āϏāĻŋāĻā§āĻ āϏā§āĻā§āĻĒ āĻŦāĻžāĻĄāĻŧāĻžāύ\n\nāĻāϰāĻ āϏāĻŋāĻā§āĻ āĻĢāĻŋāĻāĻžāϰ āϝā§āĻ āĻāϰāĻžāϰ āĻāĻā§, āϏā§āĻĒāώā§āĻāĻāĻžāĻŦā§ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§āύ âāĻėâ āĻā§ āĻŽāĻžāύā§āĨ¤ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻĢāĻŋāϞā§āĻĄ āĻ
ā§āϝāĻžāĻĒā§āϰ āĻāύā§āϝ āĻāĻāĻž āĻšāϞ⧠āĻā§āĻŦāϞ âāϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āĻĒāĻžāĻ āĻžāύā§â āύāϝāĻŧâāĻāĻāĻž āĻšāϞ⧠âāϏāĻžāϰā§āĻāĻžāϰ āĻā§āϰāĻšāĻŖ āĻāϰā§āĻā§ āĻ āĻāύāĻĢāĻžāϰā§āĻŽ āĻāϰā§āĻā§â, āĻāĻŦāĻ UI-āϰ āϏā§āĻā§āĻ āĻŦāĻžāϏā§āϤāĻŦāϤāĻžāϰ āϏāĻā§āĻā§ āĻŽā§āϞā§āĨ¤ āĻāĻāĻāĻŋ āĻĢāϰā§āĻŽ āϝāĻž âSyncedâ āĻŦāϞ⧠āϏā§āĻāĻŋ āĻ
ā§āϝāĻžāĻĒ āϰāĻŋāϏā§āĻāĻžāϰā§āĻā§āϰ āĻĒāϰ⧠āϏā§āĻ āĻ
āĻŦāϏā§āĻĨāĻžāϝāĻŧ āĻĨāĻžāĻāĻž āĻāĻāĻŋāϤ, āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŦā§āϝāϰā§āĻĨ āĻĢāϰā§āĻŽ āĻĒāϰāĻŦāϰā§āϤ⧠āĻāϰāĻŖā§āϝāĻŧ āĻĻā§āĻāĻžāύ⧠āĻāĻāĻŋāϤāĨ¤\n\nāĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻĻā§āϰ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻāϰāϤ⧠āϏāĻšāĻ āĻāϰā§āύ āĻāĻŋāĻā§ āϏā§āĻĒāώā§āĻ āϏāĻŋāĻāύā§āϝāĻžāϞ āϝā§āĻ āĻāϰ⧠āϝāĻž āϏāĻžāĻĒā§āϰā§āĻ āĻāĻŋāĻā§āĻā§āϏ āĻāϰāϞ⧠āĻāĻžāύāĻž āϝāĻžāϝāĻŧāĨ¤ āϏā§āĻā§āϞ⧠āϏāĻšāĻ āĻ consistent āϰāĻžāĻā§āύ across screen:\n\n- āĻļā§āώ āϏāĻĢāϞ āϏāĻŋāĻā§āĻ āϏāĻŽāϝāĻŧ\n- āĻļā§āώ āϏāĻŋāĻā§āĻ āϤā§āϰā§āĻāĻŋ (āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āĻŽā§āϏā§āĻ, āϏā§āĻā§āϝāĻžāĻ āĻā§āϰā§āϏ āύāϝāĻŧ)\n- āĻĒā§āύā§āĻĄāĻŋāĻ āĻāĻāĻā§āĻŽ (āĻāĻĻāĻžāĻšāϰāĻŖ: 3 āĻĢāϰā§āĻŽ, 12 āĻĢāĻā§)\n- āĻŦāϰā§āϤāĻŽāĻžāύ āϏāĻŋāĻā§āĻ āϏā§āĻā§āĻ (Idle, Syncing, Needs attention)\n\nāĻĒāϰā§āϝāĻŦā§āĻā§āώāĻŖāϝā§āĻā§āϝāϤāĻžāĻā§ āĻĢāĻŋāĻāĻžāϰā§āϰ āĻ
āĻāĻļ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύāĨ¤ āĻāĻāĻž āĻĻā§āϰā§āĻŦāϞ āĻāĻžāύā§āĻāĻļāύ⧠āĻĒāύā§āϰ⧠āĻŽāĻŋāύāĻŋāĻ āĻŦāĻžāĻāĻāĻžāϝāĻŧ āϝāĻāύ āĻā§āĻ āĻāĻžāύ⧠āύāĻž āĻ
ā§āϝāĻžāĻĒ āĻāĻžāĻ āĻāϰāĻā§ āĻāĻŋ āύāĻžāĨ¤\n\nāĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻ āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻā§āϞāĻ āϤā§āϰāĻŋ āĻāϰā§āύ, āϏā§āĻā§āϞ⧠āĻāĻāϏāĻžāĻĨā§ āĻā§āύāĻžāϰā§āĻ āĻāϰāϞ⧠āϏāĻŋāĻā§āĻ āĻāύāĻā§āϰāĻžāĻā§āĻ āϏā§āĻĨāĻŋāϤāĻŋāĻļā§āϞ āϰāĻžāĻāĻž āϏāĻšāĻ āĻšāϝāĻŧāĨ¤ AppMaster (appmaster.io) āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ-āϰā§āĻĄāĻŋ āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ, āĻāĻāĻāĻŋ āĻāϝāĻŧā§āĻŦ āĻ
ā§āϝāĻžāĻĄāĻŽāĻŋāύ āĻĒā§āϝāĻžāύā§āϞ, āĻāĻŦāĻ āύā§āĻāĻŋāĻ āĻŽā§āĻŦāĻžāĻāϞ āĻ
ā§āϝāĻžāĻĒ āĻā§āύāĻžāϰā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§âāĻāĻāĻŋ āĻŽāĻĄā§āϞ āĻ auth āϏāĻā§āĻāϤ āϰāĻžāĻāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰ⧠āϝāĻžāϤ⧠āĻāĻĒāύāĻŋ āĻāĻāĻŋāϞ āϏāĻŋāĻā§āĻ āĻāĻāĻā§āϞā§āϰ āĻāĻĒāϰ āĻĢā§āĻāĻžāϏ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤\n\nāĻļā§āώā§, āĻāĻāĻāĻŋ āĻā§āĻ āĻĒāĻžāĻāϞāĻ āĻāĻžāϞāĻžāύāĨ¤ āĻāĻāĻāĻŋ end-to-end āϏāĻŋāĻā§āĻ āϏā§āϞāĻžāĻāϏ āĻŦā§āĻā§ āύāĻŋāύ (āĻāĻĻāĻžāĻšāϰāĻŖ: â1â2 āĻĢāĻā§āϰ āϏāĻā§āĻā§ āĻāĻ āĻāύā§āϏāĻĒā§āĻāĻļāύ āĻĢāϰā§āĻŽ āϏāĻžāĻŦāĻŽāĻŋāĻâ), āĻāĻŦāĻ āϏā§āĻāĻŋ constraints, retries, āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻĻā§āĻļā§āϝāĻŽāĻžāύ āĻĒā§āϰāĻā§āϰā§āϏ āϏāĻš āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻāĻžāĻ āĻāϰāĻŦā§ āĻāĻŽāύāĻāĻžāĻŦā§ āĻĒāĻžāĻ āĻžāύāĨ¤ āϝāĻāύ āϏā§āĻ āϏā§āϞāĻžāĻāϏ āĻŦāĻŋāϰāĻā§āϤāĻŋāĻāϰ āĻ predictable āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āϤāĻāύ āĻāĻāĻŦāĻžāϰ⧠āĻāĻāĻāĻŋ āĻĢāĻŋāĻāĻžāϰ āĻāϰ⧠āĻŦāĻžāĻĄāĻŧāĻžāύāĨ¤
āĻĒā§āϰāĻļā§āύā§āϤā§āϤāϰ
āύāĻŋāϰā§āĻāϰāϝā§āĻā§āϝ āĻŦā§āϝāĻžāĻāĻā§āϰāĻžāĻāύā§āĻĄ āϏāĻŋāĻā§āĻ āĻ āϰā§āĻĨ āĻšāϞ⧠āĻĄāĻŋāĻāĻžāĻāϏ⧠āϤā§āϰāĻŋ āĻāĻžāĻāĻā§āϞ⧠āĻāĻā§ āϞā§āĻāĻžāϞāĻŋ āϏāĻāϰāĻā§āώāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ āĻĒāϰ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āĻāĻāĻ āĻāĻžāĻ āĻŦāĻžāϰāĻŦāĻžāϰ āĻāϰāϤ⧠āύāĻž āĻĻāĻŋāϝāĻŧā§ āĻāĻĒāϞā§āĻĄ āĻšāϝāĻŧāĨ¤ āĻ ā§āϝāĻžāĻĒ āĻŦāύā§āϧ āĻšāϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻž, āϰāĻŋāĻŦā§āĻ, āĻĻā§āϰā§āĻŦāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻŦāĻž āϰāĻŋāĻā§āϰāĻžāĻāϝāĻŧā§āϰ āϏāĻŽāϝāĻŧāĻ āĻĄā§āĻāĻž āϞā§āĻĒā§āϤ āύāĻž āĻšāĻāϝāĻŧāĻž āĻāĻŦāĻ āĻĄā§āĻĒā§āϞāĻŋāĻā§āĻ āύāĻž āĻšāĻāϝāĻŧāĻžāĻ āϞāĻā§āώā§āϝāĨ¤
āĻāĻā§āύā§āĻ-āĻāĻŋāϤā§āϤāĻŋāĻ āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§-āĻā§āϰāĻŋāĻāĻžāϰ āĻāϰāĻž āĻāĻžāĻāĻā§āϞā§āϰ āĻāύā§āϝ OneTimeWorkRequest āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ (āϝā§āĻŽāύ āĻĢāϰā§āĻŽ āϏāĻāϰāĻā§āώāĻŖ, āĻāĻŦāĻŋ āϝā§āĻ āĻāϰāĻž, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠Sync āĻā§āĻĒ āĻāϰāĻž)āĨ¤ PeriodicWorkRequest āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϰāĻā§āώāĻŖāĻžāĻŦā§āĻā§āώāĻŖ āĻŦāĻž āύā§āϝāĻžāĻāĻāϞāĻŋ āĻā§āϞāĻŋāύāĻāĻĒā§āϰ āĻŽāϤ⧠āĻāĻžāĻā§āϰ āĻāύā§āϝ, āĻāĻŋāύā§āϤ⧠āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻāĻĒāϞā§āĻĄāĻā§āϞā§āϰ āĻāĻāĻŽāĻžāϤā§āϰ āĻĒāĻĨ āĻšāĻŋāϏā§āĻŦā§ āύāĻžâāĻāĻžāϰāĻŖ āĻāϰ āϏāĻŽāϝāĻŧāϏā§āĻŽāĻž āĻāĻŋāύā§āύāϤāĻž āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤
Kotlin āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āϏāĻŋāĻā§āĻ āĻā§āĻĄ suspend āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϞ⧠CoroutineWorker āϏāĻŦāĻā§āϝāĻŧā§ āϏāĻšāĻ āĻ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻāĻāϰāĻŖ āĻĻā§āϝāĻŧ (āĻŦāĻŋāĻļā§āώāϤ āĻā§āϝāĻžāύāϏā§āϞā§āĻļāύā§āϰ āĻā§āώā§āϤā§āϰā§)āĨ¤ āĻā§āĻ āĻŦā§āϞāĻāĻŋāĻ āĻāĻžāĻā§āϰ āĻāύā§āϝ Worker āĻāĻĒāϝā§āĻā§āϤ, āĻāϰ RxWorker āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ āĻā§āĻŦāϞ āϤāĻāύāĻ āϝāĻāύ āĻ
ā§āϝāĻžāĻĒ āĻāϤā§āĻŽāϧā§āϝā§āĻ RxJava-āĻāϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāĻ āĻŋāϤāĨ¤
āϏā§āĻā§āĻĒāĻā§āϞā§āϰ āĻāϞāĻžāĻĻāĻž āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻĨāĻžāĻā§ āĻŦāĻž āĻāϞāĻžāĻĻāĻž āϰāĻŋāĻāĻžāϰāĻŋāϰ āĻĻāϰāĻāĻžāϰ āĻšāϞ⧠workers āĻā§āĻāύ āĻāϰā§āύ (āϝā§āĻŽāύ WiâFi-āĻ āĻŦāĻĄāĻŧ āĻāĻĒāϞā§āĻĄ, āϤāĻžāϰāĻĒāϰ āϝ⧠āĻā§āύāĻ āύā§āĻā§ āĻā§āĻ API āĻāϞ)āĨ¤ āϏā§āĻā§āĻĒāĻā§āϞ⧠āĻļā§āϝāĻŧāĻžāϰāĻĄ āĻĄā§āĻāĻž āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύā§āϰ āĻŽāϤ⧠āĻāĻāϰāĻŖ āĻāϰāϞ⧠āĻāĻāĻāĻŋ worker-āĻ āĻā§āϞāĻŋāϝāĻŧāĻžāϰ āĻĢā§āĻ āϰāĻžāĻā§āύâāĻāĻāĻŋ âall-or-nothingâ āĻļāĻŦā§āĻĻāĻāĻŋ āĻĻā§ā§āĨ¤
āĻĒā§āϰāϤāĻŋāĻāĻŋ create/update āĻ āύā§āϰā§āϧ āĻĻā§āĻāĻŦāĻžāϰ āĻāĻžāϞāĻžāύā§āĻ āύāĻŋāϰāĻžāĻĒāĻĻ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤâāĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻāĻā§āĻŽā§ āĻāĻāĻāĻŋ idempotency key (āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻāĻāĻŋ UUID) āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ āϝāĻžāϤ⧠āϏāĻžāϰā§āĻāĻžāϰ āĻāĻāĻ āĻ āύā§āϰā§āϧāĻā§ āĻāĻāĻ āĻĢāϞāĻžāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āĨ¤ āϏāĻžāϰā§āĻāĻžāϰ āĻŦāĻĻāϞāĻžāϤ⧠āύāĻž āĻĒāĻžāϰāϞ⧠stable natural key āĻāĻŦāĻ upsert āĻāύā§āĻĄāĻĒāϝāĻŧā§āύā§āĻ āĻŦāĻž āĻāĻžāϰā§āϏāύ āύāĻŽā§āĻŦāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϝāĻžāϤ⧠stale āĻāĻĒāĻĄā§āĻ āĻĒā§āϰāϤā§āϝāĻžāĻā§āϝāĻžāϤ āĻšāϝāĻŧāĨ¤
āϏā§āĻĒāώā§āĻ āϞā§āĻāĻžāϞ āϏā§āĻā§āĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ (āϝā§āĻŽāύ queued, uploading, uploaded, failed) āϝāĻžāϤ⧠worker āĻā§āϰā§āϝāĻžāĻļā§āϰ āĻĒāϰ⧠āĻ
āύā§āĻŽāĻžāύ āύāĻž āĻāϰ⧠āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻāĻā§āĻŽ āϏāĻžāϰā§āĻāĻžāϰ āĻāύāĻĢāĻžāϰā§āĻŽ āύāĻž āĻĻāĻŋāϞ⧠done āĻŽāĻžāϰā§āĻ āĻāϰāĻŦā§āύ āύāĻžâāĻĢāĻžāĻāϞ URI āĻ āĻāĻĒāϞā§āĻĄ āĻŽā§āĻāĻžāĻĄā§āĻāĻžāĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āύ āϝāĻžāϤ⧠āĻĒā§āύāϰāĻžāϝāĻŧ āĻāϰāĻŽā§āĻ āĻāϰāϞ⧠āĻļā§āώ āĻ
āĻŦāϏā§āĻĨāĻžāύ āĻĨā§āĻā§ āĻāĻžāϞāĻžāύ⧠āϝāĻžāϝāĻŧāĨ¤
āĻāĻāĻāĻŋ āĻŦāĻžāϏā§āϤāĻŦāĻāĻŋāϤā§āϤāĻŋāĻ āĻŦā§āϏāϞāĻžāĻāύ āĻšāϞā§: āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻĨāĻžāĻāĻž āĻāĻāĻŋāϤ, āĻŦā§āϝāĻžāĻāĻžāϰāĻŋ āϞ⧠āĻšāϞ⧠āĻāĻžāϞāĻžāĻŦā§āύ āύāĻž, āĻāĻŦāĻ āϏā§āĻā§āϰā§āĻ āĻā§āϰāĻŋāĻāĻŋāĻā§āϝāĻžāϞ āύāĻž āĻĨāĻžāĻāϞ⧠āĻāĻžāϞāĻžāύāĨ¤ āĻāĻžāĻ āĻāĻžāϰ⧠āĻšāϞ⧠āĻāĻžāϰā§āĻāĻŋāĻ āĻĒā§āϰā§ā§āĻāύ āĻŦāϞā§āύ; āĻāĻŋāύā§āϤ⧠āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻāύāϏā§āĻā§āϰā§āĻāύāĻ āĻĻāĻŋāϞ⧠āϏāĻŋāĻā§āĻ āĻĒā§āϰāĻžāϝāĻŧ āĻāĻāύā§āĻ āĻāϞāĻŦā§ āύāĻžâāĻ āϤāĻāĻŦ âunmeteredâ āĻŦāĻž âchargingâ āĻĒā§āϰā§ā§āĻāύ āĻšāϞ⧠āϏāϤāϰā§āĻ āĻšā§āύāĨ¤
āĻā§āϝāĻžāĻĒāĻāĻŋāĻ āĻĒā§āϰā§āĻāĻžāϞ āĻŦāĻž âWiâFi āĻāĻā§ āĻāĻŋāύā§āϤ⧠āĻāύā§āĻāĻžāϰāύā§āĻ āύā§āĻâ āĻāĻŽāύ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāĻā§ āϏāĻžāϧāĻžāϰāĻŖ āĻŦā§āϝāϰā§āĻĨāϤāĻž āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύ: āĻĻā§āϰā§āϤ āĻāĻžāĻāĻŽāĻāĻāĻ āĻāϰā§āύ, Result.retry() āĻĻāĻŋāύ āĻāĻŦāĻ āĻĒāϰ⧠āĻāĻŦāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤ āĻ
āύā§āϰā§āϧ āĻāϞāĻžāĻāĻžāϞ⧠āϝāĻĻāĻŋ āϏāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻāĻāĻŋ āϏāϰāϞ āĻŽā§āϏā§āĻ āĻĻā§āĻāĻžāύ āϝāĻžāϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻŦā§āĻāϤ⧠āĻĒāĻžāϰ⧠āĻā§āύ āĻĄāĻŋāĻāĻžāĻāϏ āĻ
āύāϞāĻžāĻāύ āĻŽāύ⧠āĻšāϞā§āĻ āϏāĻŋāĻā§āĻ āĻāϞāĻā§ āύāĻžāĨ¤
āĻĻā§āϰā§āĻŦāϞ āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻā§āϰ āĻāύā§āϝ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻā§āϏāĻĒā§āύā§āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻŦā§āϝāĻžāĻāĻ āĻĢ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĄāĻŋāĻĢāϞā§āĻāĨ¤ āĻāĻžāĻāĻŽāĻāĻāĻ āĻ 5xx-āĻāϰ āĻāύā§āϝ āϰāĻŋāĻā§āϰāĻžāĻ āĻāϰā§āύ, 401 āĻšāϞ⧠āĻā§āĻā§āύ āϰāĻŋāĻĢā§āϰā§āĻļ āĻāĻāĻŦāĻžāϰ āĻāϰ⧠āϤāĻžāϰāĻĒāϰ āĻĢā§āĻāϞ āĻāϰā§āύ āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āĻā§ āϏāĻžāĻāύ-āĻāύ āĻāĻžāĻŦāϤ⧠āĻŦāϞā§āύ, 4xx (āĻā§āϞ āĻ āύā§āϰā§āϧ) āĻšāϞ⧠āϏā§āĻĒāώā§āĻ āϤā§āϰā§āĻāĻŋ āĻĻā§āĻāĻžāύ āĻāĻŦāĻ āĻĒā§āύāϰāĻžāϝāĻŧ āĻā§āώā§āĻāĻž āĻāϰāĻŦā§āύ āύāĻžāĨ¤ āϏāϰā§āĻŦā§āĻŽā§āĻ āĻā§āώā§āĻāĻž āϏāĻāĻā§āϝāĻž āϏā§āĻŽāĻžāĻŦāĻĻā§āϧ āϰāĻžāĻā§āύ āϝāĻžāϤ⧠āϏā§āĻĨāĻžāϝāĻŧā§ āϤā§āϰā§āĻāĻŋ āĻ āĻļā§āώ āϞā§āĻĒ āύāĻž āϤā§āϰāĻŋ āĻāϰā§āĨ¤
āĻŦāĻšā§ āĻā§āϰāĻŋāĻāĻžāϰ āĻāĻāϏāĻžāĻĨā§ parallel āĻāĻŦ āĻļā§āϰ⧠āύāĻž āĻāϰ⧠sync-āĻā§ unique work āĻšāĻŋāϏā§āĻŦā§ enqueue āĻāϰā§āύ āϝāĻžāϤ⧠sync storms āύāĻž āĻšā§āĨ¤ āĻĻā§āϰā§āĻ āĻāĻžāĻ āĻšāϞ⧠foreground execution āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāϞāĻŽāĻžāύ āύā§āĻāĻŋāĻĢāĻŋāĻā§āĻļāύ āĻĻā§āĻāĻžāύ āϝāĻž āĻŦāĻžāϏā§āϤāĻŦ āĻāĻĒCounāĻāϏāĻŽā§āĻš āĻĻā§āĻāĻžāϝāĻŧ (āϝā§āĻŽāύ â5 of 15 items uploadedâ) āĻāĻŦāĻ āϏā§āĻĒāώā§āĻ āĻāĻāĻāĻŋ Cancel āĻ āĻĒāĻļāύ āϰāĻžāĻā§āύāĨ¤


