package Ġco . nim ble hq . sms for warder . ui . screens . filter Ċ Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġco . nim ble hq . sms for warder . domain . data . Incoming Sms Entity Ċ import Ġco . nim ble hq . sms for warder . domain . use case . Forward Incoming Sms UseCase Ċ import Ġco . nim ble hq . sms for warder . domain . use case . Get Filters UseCase Ċ import Ġco . nim ble hq . sms for warder . domain . use case . Ob serve Incoming Sms UseCase Ċ import Ġco . nim ble hq . sms for warder . domain . use case . Ob serve Filters UseCase Ċ import Ġco . nim ble hq . sms for warder . ui . base . Base ViewModel Ċ import Ġco . nim ble hq . sms for warder . ui . base . Navigation Event Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ Ċ interface ĠInput Ġ{ ĊĠĠĠ Ġfun Ġrefresh () Ċ } Ċ Ċ class ĠAll Filters ViewModel Ġ@ ViewModel Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġobserve Incoming Sms UseCase : ĠOb serve Incoming Sms UseCase , ĊĠĠĠ Ġprivate Ġval Ġforward Incoming Sms UseCase : ĠForward Incoming Sms UseCase , ĊĠĠĠ Ġprivate Ġval Ġobserve Filters UseCase : ĠOb serve Filters UseCase , ĊĠĠĠ Ġprivate Ġval Ġget Filters UseCase : ĠGet Filters UseCase Ċ ) Ġ: ĠBase ViewModel (), ĠInput Ġ{ ĊĊĠĠĠ Ġval Ġinput : ĠInput Ġ= Ġthis ĊĊĠĠĠ Ġprivate Ġval Ġ_ data Ġ= ĠBehavior Subject . create < List < Filter Ui Model >>() ĊĠĠĠ Ġval Ġdata : ĠObservable < List < Filter Ui Model >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ data ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Filters () ĊĠĠĠĠĠĠĠ Ġget Filters () ĊĠĠĠĠĠĠĠ Ġobserve Incoming Sms () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO ĠRemove Ġthis ĊĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Incoming Sms () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnavigate To Filter Manager () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ navigator . onNext ( Navigation Event . Filter Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filters () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Filters UseCase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Show Loading () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Dis pos ables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Incoming Sms () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Incoming Sms UseCase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: forward Incoming Sms If Matched Filter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Dis pos ables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Filters () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Filters UseCase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute ( Unit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġfilters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilters . map Ġ{ Ġitem Ġ-> Ġitem . to Ui Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (_ data :: onNext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Dis pos ables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġforward Incoming Sms If Matched Filter ( entity : ĠIncoming Sms Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ data . value . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . incoming Number Ġ== Ġit . template ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= ĠForward Incoming Sms UseCase . Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . incoming Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity . message Body , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forward EmailAddress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforward Incoming Sms UseCase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do Show Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ_ error :: onNext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Dis pos ables () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ