package Ġcom . example . android . code labs . navigation . home Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . example . android . code labs . navigation . Network Utils Ċ import Ġcom . example . android . code labs . navigation . Utils . Body Response Ċ import Ġcom . example . android . code labs . navigation . createUser . Create User ViewModel Ċ import Ġcom . example . android . code labs . navigation . database . User Ċ import Ġcom . example . android . code labs . navigation . database . User Database Ċ import Ġcom . example . android . code labs . navigation . database . UserRepository Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . http . Body Ċ import Ġretrofit 2 . http . Headers Ċ import Ġretrofit 2 . http . POST ĊĊ Ċ class ĠHome ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepository : ĠUser Repository ĊĊĠĠĠ Ġval Ġall Users Ġ: ĠLive Data < List < User >> ĊĊĠĠĠ Ġval Ġuser Ġ: ĠLive Data < User >? ĊĊĠĠĠ Ġval Ġgotten User Ġ= ĠMutable LiveData (" Ġ") ĊĊĠĠĠ Ġval Ġlogged User Ġ= ĠMutable LiveData < User >() ĊĊĠĠĠ Ġvar Ġgotten Password Ġ: ĠString ? Ġ Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser ToSend : ĠBody ToSend ĊĊĠĠĠ Ġval Ġthis Application Ġ: ĠApplication ĊĊĠĠĠ Ġvar Ġreturn User LoggedIn Ġ= ĠMutable LiveData ( false ) ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Dao Ġ= ĠUser Database . get Database ( application ). user Dao () ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠUser Repository ( user Dao ) ĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġrepository . user ĊĠĠĠĠĠĠĠ Ġall Users Ġ= Ġrepository . all Users ĊĠĠĠĠĠĠĠ Ġthis Application Ġ= Ġapplication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠEndpoint Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ POST (" login ") ĊĠĠĠĠĠĠĠ Ġ@ Headers (" Content - type : Ġapplication / json ") ĊĠĠĠĠĠĠĠ Ġfun Ġlog In User (@ Body Ġbody ToSend : ĠBody ToSend ) Ġ: ĠCall < Body Response > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBody ToSend Ġ( ĊĠĠĠĠĠĠĠ Ġvar Ġemail : ĠString ?, ĊĠĠĠĠĠĠĠ Ġvar Ġpassword : ĠString ? ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġdata Ġclass ĠN User Ġ( ĊĠĠĠĠĠĠĠ Ġval Ġemail : ĠString ? ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLaunch ing Ġa Ġnew Ġcoroutine Ġto Ġinsert Ġthe Ġdata Ġin Ġa Ġnon - blocking Ġway ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinsert ( user : ĠUser ) Ġ= ĠviewModel Scope . launch ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . insert ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlog In () Ġ= ĠviewModel Scope . launch ( IO ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġuser ToSend Ġ= ĠBody ToSend ("", Ġ"") ĊĊĠĠĠĠĠĠĠ Ġuser ToSend . email Ġ= Ġgotten User . value ĊĠĠĠĠĠĠĠ Ġuser ToSend . password Ġ= Ġgotten Password ĊĊĠĠĠĠĠĠĠ Ġlogin Api ( user ToSend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave LoggedIn ( user Email : ĠString ) Ġ= ĠviewModel Scope . launch ( IO ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġuser : ĠUser Ġ= Ġrepository . getUser ( user Email ) ĊĊĠĠĠĠĠĠĠ Ġif ( user Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠUser ( 0 , Ġ"", Ġ"", Ġfalse , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . user Email Ġ= Ġuser ToSend . email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . user Password Ġ= Ġuser ToSend . password ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . insert ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġuser . user Logged Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġrepository . update ( user ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġlogin Api ( body ToSend : ĠBody ToSend ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġretrofit Client Ġ= ĠNetwork Utils ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ret rofit Instance (" http :// 1 0 . 0 . 2 . 2 : 3 0 0 0 / user /") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġendpoint Ġ= Ġretrofit Client . create ( Home ViewModel . Endpoint :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġendpoint . log In User ( body ToSend ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . enqueue ( object Ġ: ĠCallback < Body Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Body Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this Application , Ġt . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEBUG : Ġ ĠError Ġ= Ġ${ t . message . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Body Response >, Ġresponse : ĠResponse < Body Response >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body ToSend . email Ġ== Ġit . data ?. email ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave LoggedIn ( body ToSend . email . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEBUG : Ġent ro u Ġresponse ĠOK ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this Application , Ġ" Us u Ã¡rio Ġlog g ado !", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . set Gravity ( Gravity . CENTER , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogged User . value Ġ= Ġrepository . getUser ( body ToSend . email . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn User LoggedIn . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . error !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this Application , Ġ" Erro : Ġ${ it . message }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this Application , Ġ" Us u Ã¡rio Ġou Ġsen ha Ġinv Ã¡l ido !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEBUG : Ġret orno Ġde Ġerror Ġ Ġ${ it . error . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEBUG : Ġret orno Ġde Ġmessage Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" DEBUG : Ġret orno Ġde Ġdata Ġ${ it . data }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete All () Ġ= ĠviewModel Scope . launch ( IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . delete All () ĊĠĠĠ Ġ} Ċ Ċ }