package Ġcom . le min ect . str anz ee . view model Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Ċ import Ġcom . le min ect . str anz ee . network . Auth Back Data Ċ import Ġcom . le min ect . str anz ee . network . Login Detail Ċ import Ġcom . le min ect . str anz ee . network . Str ange e Api Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . net . Connect Exception Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ enum Ġclass ĠLogin Status Ġ{ ĠLOG GING _ IN , ĠLOGIN _ ERROR , ĠLOGIN _ PAS SED , ĠLOGIN _ FAILED Ġ} Ċ Ċ class ĠLogin ViewModel : ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ status Ġ= ĠMutable LiveData < Login Status >() ĊĠĠĠ Ġval Ġstatus : ĠLive Data < Login Status > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ status ĊĊĠĠĠ Ġprivate Ġval Ġ_ login Back Data Ġ= ĠMutable LiveData < Auth Back Data >() ĊĠĠĠ Ġval Ġlogin Back Data : ĠLive Data < Auth Back Data > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ login Back Data ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Job Ġ= ĠJob () ĊĊĠĠĠ Ġprivate Ġvar Ġinitial F cm Token : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠFirebase Messaging . getInstance (). token . add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġnew ĠF CM Ġregistration Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial F cm Token Ġ= Ġtask . result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" SignUp ViewModel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fetching ĠF CM Ġregistration Ġtoken Ġfailed Ġat Ġstart : Ġ${ task . exception }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Login Process ( email : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( initial F cm Token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin User ( email , Ġpassword , Ġinitial F cm Token !! ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Messaging . getInstance (). token . add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġnew ĠF CM Ġregistration Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf cm Token Ġ= Ġtask . result ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin User ( email , Ġpassword , Ġf cm Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Login ViewModel ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fetching ĠF CM Ġregistration Ġtoken Ġfailed : Ġ${ task . exception }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlogin User ( email : ĠString , Ġpassword : ĠString , Ġf cm Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOG GING _ IN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned Data Ġ= ĠStr ange e Api . ret rofit Service . post Login ( Login Detail ( email , Ġpassword , Ġf cm Token )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Login ViewModel ", Ġreturned Data . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned Data . token . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Back Data . value Ġ= Ġreturned Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ PAS SED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ FAILED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠConnect Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Login ViewModel ", Ġ" CONNECT ĠEXCEPTION Ġ::: Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Login ViewModel ", Ġ" HOST ĠEXCEPTION Ġ::: Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Login ViewModel ", Ġ" Login _ Error Ġ:: Ġ$ t ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ status . value Ġ= ĠLogin Status . LOGIN _ FAILED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠviewModel Job . cancel () ĊĠĠĠ Ġ} Ċ }