package Ġorg . rd toolkit . processing Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work .* Ċ import Ġandroidx . work . Work Request . MIN _ BACK OFF _ M ILL IS Ċ import Ġorg . rd toolkit . model . session . App Repository Ċ import Ġorg . rd toolkit . processing . Image Submission Worker . Companion . DATA _ FILE _ PATH Ċ import Ġorg . rd toolkit . processing . Image Submission Worker . Companion . DATA _ MEDIA _ KEY Ċ import Ġorg . rd toolkit . processing . Image Submission Worker . Companion . TAG _ MEDIA Ċ import Ġorg . rd toolkit . processing . Session Purge Worker . Companion . TAG _ PUR GE Ċ import Ġorg . rd toolkit . processing . Session Submission Worker . Companion . TAG _ SESSION Ċ import Ġorg . rd toolkit . processing . Trace Submission Worker . Companion . TAG _ TR ACES Ċ import Ġorg . rd toolkit . support . interop . INT ENT _ EXTRA _ R DT _ CONFIG _ CLOUD WORK S _ DNS Ċ import Ġorg . rd toolkit . support . interop . R dt Intent Builder . Companion . INT ENT _ EXTRA _ R DT _ SESSION _ ID Ċ import Ġorg . rd toolkit . support . model . session . Test Session Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ class ĠWork Coordinator ( val Ġcontext Ġ: ĠContext ) Ġ{ ĊĠĠĠ Ġval Ġmanager Ġ= ĠWork Manager . getInstance ( context ) ĊĠĠĠ Ġfun Ġprocess Test Session ( session Ġ: ĠTest Session , Ġpurge Immediate ly Ġ: ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( session . configuration . cloud works Dns Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . begin Unique Work ( get Unique Work Root Tag ( session . sessionId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Work Policy . REPLACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Session Submit Request ( session )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( get Trace Submit ter ( session )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( getImage Submit ters ( session )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( get Purge Request ( session , Ġpurge Immediate ly )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . begin Unique Work ( get Unique Work Root Tag ( session . sessionId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Work Policy . REPLACE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Purge Request ( session , Ġpurge Immediate ly )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Session Submit Request ( session : ĠTest Session ) Ġ: ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsession Data Ġ= ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ SESSION _ ID , Ġsession . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ CONFIG _ CLOUD WORK S _ DNS , Ġsession . configuration . cloud works Dns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work Request . Builder ( Session Submission Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( session . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( TAG _ SESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( session Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( get Network Constraints ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . EXP ON ENTIAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ BACK OFF _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Trace Submit ter ( session : ĠTest Session ) Ġ: ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsession Data Ġ= ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ SESSION _ ID , Ġsession . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ CONFIG _ CLOUD WORK S _ DNS , Ġsession . configuration . cloud works Dns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work Request . Builder ( Trace Submission Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( session . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( TAG _ TR ACES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( get Network Constraints ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( session Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . EXP ON ENTIAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ BACK OFF _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Purge Request ( session : ĠTest Session , Ġpurge Immediate ly : ĠBoolean ) Ġ: ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpurge Data Ġ= ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ SESSION _ ID , Ġsession . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work Request . Builder ( Session Purge Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( session . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( TAG _ PUR GE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( purge Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! purge Immediate ly ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setInitial Delay ( 1 , ĠTimeUnit . DAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . EXP ON ENTIAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ BACK OFF _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage Submit ters ( session : ĠTest Session ) Ġ: ĠList < One Time Work Request > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < One Time Work Request >() ĊĠĠĠĠĠĠĠ Ġsession . result ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( image Ġin Ġit . images ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( getImage Submit ter ( image . key , Ġimage . value , Ġsession )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetImage Submit ter ( key : ĠString , Ġfile Ġ: ĠString , Ġsession : ĠTest Session ) Ġ: ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage Data Ġ= ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ SESSION _ ID , Ġsession . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( INT ENT _ EXTRA _ R DT _ CONFIG _ CLOUD WORK S _ DNS , Ġsession . configuration . cloud works Dns ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( DATA _ MEDIA _ KEY , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( DATA _ FILE _ PATH , Ġfile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work Request . Builder ( Image Submission Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( session . sessionId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( TAG _ MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( image Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( get Network Constraints ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . EXP ON ENTIAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ BACK OFF _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Network Constraints () Ġ: ĠConstraints Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Requires Battery Not Low ( App Repository ( context ). is Network Restricted By Battery ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġget Unique Work Root Tag ( sessionId Ġ: ĠString ) Ġ: ĠString { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" session _ work _${ sessionId }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }