package Ġcom . next f aze . d agg ie . man up Ċ Ċ import Ġandroid . app . Activity Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . lang . Math . pow Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeUnit . MILLISECONDS Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ /** ĠEmit s Ġpause Ġevents Ġfrom Ġthis Ġ[ Activity ]. Ġ*/ Ċ internal Ġfun ĠActivity . pause s () Ġ= ĠObservable . create < Unit > Ġ{ Ġemitter Ġ-> ĊĠĠĠ Ġval Ġcallbacks : ĠSimple Activity Lifecycle Callbacks Ġ= Ġobject Ġ: ĠSimple Activity Lifecycle Callbacks () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Paused ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġthis @ pause s ) Ġemitter . onNext ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġapplication . register Activity Lifecycle Callbacks ( callbacks ) ĊĠĠĠ Ġemitter . set C ancellable Ġ{ Ġapplication . unregister Activity Lifecycle Callbacks ( callbacks ) Ġ} Ċ } Ċ Ċ /** ĠM irror Ġthe Ġsource Ġ` Flow able ` Ġwhile Ġthe Ġspecified Ġ` Flow able `' s Ġlatest Ġemitted Ġvalue Ġis Ġtrue . Ġ*/ Ċ internal Ġfun Ġ< T > ĠFlow able < T >. take While ( o : ĠFlow able < Boolean >): ĠFlow able < T > Ġ{ ĊĠĠĠ Ġval Ġshared Ġ= Ġo . distinct Until Changed (). share () ĊĠĠĠ Ġreturn Ġshared . filter Ġ{ Ġit Ġ}. switch Map Ġ{ Ġtake Until ( shared . filter Ġ{ Ġ! it Ġ}) Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠRET RY _ DELAY _ M ILL IS Ġ= Ġ 3 0 0 0 L Ċ Ċ internal Ġfun Ġ< T Ġ: ĠThrowable > ĠFlow able < T >. exponent ial Backoff ( ĊĠĠĠĠĠĠĠ Ġmax Attempts : ĠInt Ġ= ĠInteger . MAX _ VALUE , ĊĠĠĠĠĠĠĠ Ġmax Delay : ĠLong Ġ= ĠLong . MAX _ VALUE , ĊĠĠĠĠĠĠĠ Ġmax Delay Unit : ĠTimeUnit Ġ= ĠSE CON DS , ĊĠĠĠĠĠĠĠ Ġscheduler : ĠScheduler Ġ= ĠS chedulers . computation (), ĊĠĠĠĠĠĠĠ Ġpas sthrough Filter : Ġ( Throwable ) Ġ-> ĠBoolean Ġ= Ġ{ Ġfalse Ġ} Ċ ): ĠFlow able < Long > Ġ= Ġzip With ( Flow able . range ( 0 , Ġmax Attempts ), ĠBi Function Ġ{ Ġe : ĠThrowable , Ġattempt : ĠInt Ġ-> Ġe Ġto Ġattempt Ġ}) ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( e , Ġattempt Number ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas sthrough Filter . invoke ( e ) Ġ-> Ġerror ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCap Ġto Ġprevent Ġlong Ġoverflow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= Ġpow ( 2 . 0 , Ġattempt Number . coerce At Most ( 3 2 ). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexponential Delay Millis Ġ= Ġfactor . to Long () Ġ* ĠRET RY _ DELAY _ M ILL IS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Delay Millis Ġ= Ġmax Delay Unit . to Millis ( max Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelay Millis Ġ= Ġmax Delay Millis . coerce At Most ( exponent ial Delay Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFlow able . timer ( delay Millis , ĠMIL LI SECONDS , Ġscheduler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ