package Ġcom . black c rows ys . ui . res idents Ċ Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġcom . black c rows ys . exceptions . Exception Transformer Ċ import Ġcom . black c rows ys . repository . Res ident Repository Ċ import Ġcom . black c rows ys . security . AES Cipher Ċ import Ġcom . black c rows ys . util . Scheduler Provider Ċ import Ġcom . black c rows ys . util . SharedPreferences Handler Ċ import Ġcom . black c rows ys . util . ViewState Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠRes idents Activity ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġscheduler Provider : ĠScheduler Provider , ĊĠĠĠ Ġprivate Ġval Ġres ident Repository : ĠRes ident Repository , ĊĠĠĠ Ġprivate Ġval Ġaes Cipher : ĠAES Cipher , ĊĠĠĠ Ġprivate Ġval Ġshared Preferences Handler : ĠSharedPreferences Handler , ĊĠĠĠ Ġprivate Ġval Ġexception Transformer : ĠException Transformer Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġby Ġlazy Ġ{ ĠComposite Disposable () Ġ} ĊĊĠĠĠ Ġvar Ġlatest Res idents List State Ġ= ĠMutable LiveData < ViewState >() ĊĠĠĠ Ġvar Ġres idents ListBy Search State Ġ= ĠMutable LiveData < ViewState >() ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Latest Res ident List ( pin : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences Handler . get Encrypted Jwt Token () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġaes Cipher . decrypt ( pin , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow able ( Back pressure Strategy . BUFFER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġres ident Repository . get Res idents ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( scheduler Provider . getS chedulers For Flow able ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( exception Transformer . map Exceptions For Flow able ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( onNext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Res idents List State . value Ġ= ĠView State . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Res idents List State . value Ġ= ĠView State . Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġperform Letter Based Search ( search String : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( Flow able . just ( search String . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġres ident Repository . get Res idents Given Name Query ( it , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( scheduler Provider . getS chedulers For Flow able ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( onNext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres idents ListBy Search State . value Ġ= ĠView State . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres idents ListBy Search State . value Ġ= ĠView State . Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( Flow able . just ( search String . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isBlank () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġres ident Repository . get Res idents From Cache () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( scheduler Provider . getS chedulers For Flow able ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( onNext Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres idents ListBy Search State . value Ġ= ĠView State . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres idents ListBy Search State . value Ġ= ĠView State . Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ