package Ġcom . project . google maps 2 0 2 0 . view models Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . h ilt . lifecycle . ViewModel Inject Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . project . google maps 2 0 2 0 . models . User Ċ import Ġcom . project . google maps 2 0 2 0 . repository . Main Repository Ċ import Ġcom . project . google maps 2 0 2 0 . utils . Resource Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠAuth ViewModel Ċ @ ViewModel Inject Ċ constructor ( ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠMain Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġregister State Ġ= ĠMutable LiveData < Resource < Nothing >>() ĊĠĠĠ Ġval Ġlogin State Ġ= ĠMutable LiveData < Resource < Nothing >>() ĊĊĠĠĠ Ġvar Ġprofile Image Uri Ġ= ĠMutable LiveData < Uri >() ĊĊĠĠĠ Ġfun Ġregister User ( ĊĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġemail : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġconfirm Password : ĠString ĊĠĠĠ Ġ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Loading ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( username . isNotEmpty () Ġ&& Ġemail . isNotEmpty () Ġ&& Ġpassword . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġconfirm Password . isNotEmpty () Ġ&& Ġprofile Image Uri . value Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( password Ġ== Ġconfirm Password ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . register User ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupload Image To Firebase Storage ( username , Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Error ( e . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Error (" Password Ġand ĠConfirm ĠPassword Ġdo Ġnot Ġmatch ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Error (" Please ĠFill ĠThe ĠDetails Ġor ĠSelect ĠPhoto ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġupload Image To Firebase Storage ( username : ĠString , Ġemail : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Image Uri . value ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuploaded Uri Ġ= Ġrepository . upload Profile Image ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave User To Fire store Database ( username , Ġemail , Ġuploaded Uri . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave User To Fire store Database ( username : ĠString , Ġemail : ĠString , Ġuploaded Uri : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Ġ= Ġrepository . get Uid () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( username , Ġemail , Ġuid , Ġuploaded Uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save User To Fire store ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Success ( null , Ġ" Successfully ĠRegistered ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister State . post Value ( Resource . Error ( e . message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġlogin User ( email : ĠString , Ġpassword : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠ Ġlogin State . post Value ( Resource . Loading ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( email . isNotEmpty () Ġ&& Ġpassword . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . login User ( email , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . post Value ( Resource . Success ( null , Ġ" Successfully ĠLog ged ĠIn ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . post Value ( Resource . Error ( e . message )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin State . post Value ( Resource . Error (" Please ĠFill ĠThe ĠDetails ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Profile Image ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprofile Image Uri . value Ġ= Ġuri ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊĊĊĊ ĊĊĊĊ ĊĊĊĊĊ