package Ġcom . mem fault . b ort . requester Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . work . Existing Periodic Work Policy Ċ import Ġandroidx . work . Work Manager Ċ import Ġandroidx . work . work Data Of Ċ import Ġcom . mem fault . b ort . B ort System Capabilities Ċ import Ġcom . mem fault . b ort . log cat . Log cat Collection Task Ċ import Ġcom . mem fault . b ort . log cat . Real Next Log cat Cid Provider Ċ import Ġcom . mem fault . b ort . log cat . Real Next Log cat StartTime Provider Ċ import Ġcom . mem fault . b ort . periodic Work Request Ċ import Ġcom . mem fault . b ort . settings . Log cat Settings Ċ import Ġcom . mem fault . b ort . settings . Settings Provider Ċ import Ġcom . mem fault . b ort . shared . Logger Ċ import Ġcom . mem fault . b ort . time . Absolute Time Ċ import Ġcom . mem fault . b ort . time . to Absolute Time Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . minutes Ċ Ċ private Ġconst Ġval ĠWORK _ TAG Ġ= Ġ" LOG CAT _ COLLECTION " Ċ private Ġconst Ġval ĠWORK _ UNIQUE _ NAME _ PERIOD IC Ġ= Ġ" com . mem fault . b ort . work . LOG CAT _ COLLECTION " Ċ private Ġval ĠMIN IMUM _ COLLECTION _ INTERVAL Ġ= Ġ 1 5 . minutes Ċ Ċ internal Ġfun Ġrestart Periodic Log cat Collection ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġcollection Interval : ĠDuration , ĊĠĠĠ Ġlast Log cat End : ĠAbsolute Time , ĊĠĠĠ Ġcollect Immediate ly : ĠBoolean Ġ= Ġfalse , Ġ// Ġfor Ġtesting Ċ ) Ġ{ ĊĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( context ). let Ġ{ ĊĠĠĠĠĠĠĠ ĠReal Next Log cat Cid Provider ( it ). rotate () ĊĠĠĠĠĠĠĠ ĠReal Next Log cat StartTime Provider ( it ). next Start Ġ= Ġlast Log cat End ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġperiodic Work Request < Log cat Collection Task >( ĊĠĠĠĠĠĠĠ Ġcollection Interval , ĊĠĠĠĠĠĠĠ Ġwork Data Of () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Tag ( WORK _ TAG ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! collect Immediate ly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Initial Delay ( collection Interval . in Milliseconds . to Long (), ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. also Ġ{ Ġwork Request Ġ-> ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue Unique Periodic Work ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK _ UNIQUE _ NAME _ PERIOD IC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Periodic Work Policy . REPLACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork Request ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠLog cat Collection Request er ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġlog cat Settings : ĠLog cat Settings , ĊĠĠĠ Ġprivate Ġval Ġb ort System Capabilities : ĠB ort System Capabilities , Ċ ) Ġ: ĠPeriod ic Work Request er () Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Periodic ( just Boot ed : ĠBoolean , Ġsettings Changed : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! log cat Settings . dataSource Enabled ) Ġreturn ĊĠĠĠĠĠĠĠ Ġif Ġ(! b ort System Capabilities . supports Cal iper Log cat Collection ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġcollection Interval Ġ= Ġmax Of ( MIN IMUM _ COLLECTION _ INTERVAL , Ġlog cat Settings . collection Interval ) ĊĠĠĠĠĠĠĠ ĠLogger . test (" Collect ing Ġlog cat Ġevery Ġ${ collection Interval . in Minutes } Ġminutes ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠM FLT - 2 7 5 3 : Ġafter Ġboot ing , Ġattempt Ġto Ġcollect Ġlogs Ġfrom Ġp store Ġ( log cat Ġ- L ) ĊĊĠĠĠĠĠĠĠ Ġrestart Periodic Log cat Collection ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection Interval Ġ= Ġcollection Interval , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Log cat End Ġ= Ġif Ġ( just Boot ed ) Ġ 0 L . to Absolute Time () Ġelse ĠAbsolute Time . now (), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel Periodic () Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . test (" C ancell ing Ġ$ WORK _ UNIQUE _ NAME _ PERIOD IC ") ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cancel Unique Work ( WORK _ UNIQUE _ NAME _ PERIOD IC ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrestart Required ( old : ĠSettings Provider , Ġnew : ĠSettings Provider ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġold . log cat Settings . dataSource Enabled Ġ!= Ġnew . log cat Settings . dataSource Enabled Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold . log cat Settings . collection Interval Ġ!= Ġnew . log cat Settings . collection Interval Ċ } Ċ