package Ġcz . o john . location tracker . screen . find Ċ Ċ import Ġandroid . arch . lifecycle . ViewModel Ċ import Ġandroid . tele phony . PhoneNumber Utils Ċ import Ġcz . o john . location tracker . location . Device Finder Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠViewModel Ġfor ĠFind Ġdevice Ġscreen Ċ Ġ*/ Ċ class ĠFind Device ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġdevice Finder : ĠDevice Finder ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġfinding State Subject : ĠBehavior Subject < Device Finder . Finding Status > Ġ= ĠBehavior Subject . create () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . add ( device Finder . observe Finding Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġfinding State Subject . onNext ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonStart Finding ( phone : ĠString , Ġsms Password : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( finding State Subject . value Ġ! is ĠDevice Finder . Finding Status . Finding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Phone Valid Ġ= ĠPhone Number Utils . is Global PhoneNumber ( phone ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Phone Valid Ġ&& Ġsms Password . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Finder . start Finding ( phone , Ġsms Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Finder . stop Finding Service () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve Finding State (): ĠObservable < Device Finder . Finding Status > Ġ= Ġfinding State Subject ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠ Ġ} Ċ } Ċ