package Ġde . r ki . cor on aw arn app . contact di ary . retention Ċ Ċ import Ġandroidx . annotation . Visible ForTesting Ċ import Ġandroidx . work . Existing Periodic Work Policy Ċ import Ġandroidx . work . Work Manager Ċ import Ġdagger . Re usable Ċ import Ġde . r ki . cor on aw arn app . storage . On boarding Settings Ċ import Ġde . r ki . cor on aw arn app . util . coroutine . App Scope Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ @ Re usable Ċ class ĠContact Di ary Work Scheduler Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ App Scope Ġval Ġapp Scope : ĠCor outine Scope , ĊĠĠĠ Ġprivate Ġval Ġwork Manager : ĠWork Manager , ĊĠĠĠ Ġprivate Ġval Ġwork Builder : ĠContact Di ary Work Builder , ĊĠĠĠ Ġprivate Ġval Ġon boarding Settings : ĠOn boarding Settings Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding Settings . is On bo arded Flow . on Each Ġ{ Ġis On bo arded Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is On bo arded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Periodic () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. launch In ( app Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn queue Ġbackground Ġcontact Ġdi ary Ġclean Ġperiodic Ġworker ĊĠĠĠĠ Ġ* ĠReplace Ġwith Ġnew Ġif Ġolder Ġwork Ġexists . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Visible ForTesting ( otherwise Ġ= ĠVis ible ForTesting . PRIVATE ) ĊĠĠĠ Ġinternal Ġfun Ġschedule Periodic () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Contact Di ary Work Scheduler Ġschedule Periodic () ") ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġunique Ġwork Ġand Ġenqueue ĊĠĠĠĠĠĠĠ Ġwork Manager . enqueue Unique Periodic Work ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER IOD IC _ WORK _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Periodic Work Policy . REPLACE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . build Periodic Work () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPER IOD IC _ WORK _ NAME Ġ= Ġ" Contact Di ary Periodic Work " ĊĠĠĠ Ġ} Ċ } Ċ