package Ġse . g ust av kar l sson . sky light . android . feature . background . scheduling Ċ Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . rx kotlin . to Observable Ċ import Ġse . g ust av kar l sson . sky light . android . core . entities . Chance Level Ċ import Ġse . g ust av kar l sson . sky light . android . core . entities . Trigger Level Ċ import Ġse . g ust av kar l sson . sky light . android . core . services . Chance Evaluator Ċ import Ġse . g ust av kar l sson . sky light . android . core . utils . map NotNull Ċ import Ġse . g ust av kar l sson . sky light . android . feature . background . notifications . App Visibility Evaluator Ċ import Ġse . g ust av kar l sson . sky light . android . feature . background . notifications . Notification Ċ import Ġse . g ust av kar l sson . sky light . android . feature . background . notifications . Notification Evaluator Ċ import Ġse . g ust av kar l sson . sky light . android . feature . background . notifications . Notifier Ċ import Ġse . g ust av kar l sson . sky light . android . feature . background . notifications . Place With Chance Ċ import Ġse . g ust av kar l sson . sky light . android . lib . aur ora . A ur ora Report Provider Ċ import Ġse . g ust av kar l sson . sky light . android . lib . aur ora . Complete A ur ora Report Ċ import Ġse . g ust av kar l sson . sky light . android . lib . location . Location Provider Ċ import Ġse . g ust av kar l sson . sky light . android . lib . location . Location Result Ċ import Ġse . g ust av kar l sson . sky light . android . lib . places . Place Ċ import Ġse . g ust av kar l sson . sky light . android . lib . settings . Settings Ċ import Ġse . g ust av kar l sson . sky light . android . lib . time . Time Ċ Ċ internal Ġfun Ġcreate Notify Work ( ĊĠĠĠ Ġsettings : ĠSettings , ĊĠĠĠ Ġapp Visibility Evaluator : ĠApp Visibility Evaluator , ĊĠĠĠ Ġlocation Provider : ĠLocation Provider , ĊĠĠĠ Ġreport Provider : ĠA ur ora Report Provider , ĊĠĠĠ Ġchance Evaluator : ĠCh ance Evaluator < Complete A ur ora Report >, ĊĠĠĠ Ġnotification Evaluator : ĠNotification Evaluator , ĊĠĠĠ Ġnot ifier : ĠNot ifier , ĊĠĠĠ Ġtime : ĠTime Ċ ): ĠComp letable Ġ{ ĊĊĠĠĠ Ġfun Ġget Location ( place : ĠPlace ): ĠSingle < Location Result > Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( place ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlace . Current Ġ-> Ġlocation Provider . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPlace . Custom Ġ-> ĠSingle . just ( Location Result . Success ( place . location )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġonly Enabled ( ĊĠĠĠĠĠĠĠ Ġlevels : ĠPair < Place , ĠTrigger Level > ĊĠĠĠ Ġ): ĠPlace With Trigger Level ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( place , Ġtrigger Level ) Ġ= Ġlevels ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( trigger Level Ġ== ĠTrigger Level . NE VER ) Ġnull ĊĠĠĠĠĠĠĠ Ġelse ĠPlace With Trigger Level ( place , Ġtrigger Level ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Places ToCheck () Ġ= ĊĠĠĠĠĠĠĠ Ġsettings . stream Notification Trigger Levels () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Or Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ Ġit . to Observable () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull (:: only Enabled ) ĊĊĠĠĠ Ġfun Ġget Place With Chance ( place : ĠPlace ) Ġ= ĊĠĠĠĠĠĠĠ Ġreport Provider . get ( getLocation ( place )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġreport Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchance Ġ= Ġchance Evaluator . evaluate ( report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchance Level Ġ= ĠCh ance Level . from Chance ( chance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace With Chance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchance Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notification Data (): ĠNotification Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplaces With Chance Ġ= Ġget Places ToCheck () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. concat Map Maybe Ġ{ Ġ( place , Ġtrigger Level ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Place With Chance ( place ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . chance Level Ġis Greater OrEqual Ġtrigger Level Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. blocking Iterable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġreturn ĠNotification ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplaces With Chance , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime . now () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠComp letable . defer Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( app Visibility Evaluator . isVisible ()) ĠComp letable . complete () ĊĠĠĠĠĠĠĠ Ġelse ĠSingle . from Callable (:: get Notification Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ Ġnotification Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( notification Evaluator . should Notify ( notification Data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot ifier . notify ( notification Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Evaluator . on Not ified ( notification Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. ignore Element () ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġdata Ġclass ĠPlace With Trigger Level ( val Ġplace : ĠPlace , Ġval Ġtrigger Level : ĠTrigger Level ) Ċ