package Ġcom . v ictor rub ia . tf g . presentation . home Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġcom . v ictor rub ia . tf g . data . model . user . User Ċ import Ġcom . v ictor rub ia . tf g . domain . use case . Request User UseCase Ċ import Ġcom . v ictor rub ia . tf g . domain . use case . Save User UseCase Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* Ġ[ ViewModel ] Ġfor Ġ[ Home Activity ] Ċ Ġ* Ġ@ property Ġrequest User UseCase Ġ[ Request User UseCase ] Ċ Ġ* Ġ@ property Ġsave User UseCase Ġ[ Save User UseCase ] Ċ Ġ*/ Ċ class ĠHome ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrequest User UseCase : ĠRequest User UseCase , ĊĠĠĠ Ġprivate Ġval Ġsave User UseCase : ĠSave User UseCase , Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// ĠSensor Ġvariables ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsensor Manager : ĠSensor Manager ĊĠĠĠ Ġvar Ġsensor Status Ġ= Ġmutable State Of ( false ) ĊĊĠĠĠ Ġfun Ġloading Delay () Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġkotlinx . coroutines . delay ( 1 5 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġemit ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġdevice Ġis Ġcompatible Ġwith Ġthe Ġapp ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ[ Context ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompatibility ( context Ġ: ĠContext ) Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpr ueba Ġ: ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData ( true ) ĊĠĠĠĠĠĠĠ Ġsensor Manager Ġ= Ġcontext . getSystem Service ( Component Activity . SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠ Ġval Ġsensor List : ĠList < Sensor > Ġ= Ġsensor Manager . get Sensor List ( Sensor . TYPE _ ALL ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( current Sensor Ġin Ġsensor List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Sensor . string Type . contains (" pp g ") Ġ&& Ġ! sensor Status . value ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Status . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpr ueba . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġemit ( pr ueba . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġ[ Request User UseCase ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest User (){ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest User UseCase . execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExec utes Ġ[ Save User UseCase ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġuser Ġ[ User ] Ġto Ġsave ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave User ( user Ġ: ĠUser ){ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave User UseCase . execute ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }