package Ġcom . big create . zy fw . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . big create . library . fromJson Ċ import Ġcom . big create . library . toJson Ċ import Ġcom . big create . zy fw . base .* Ċ import Ġcom . big create . zy fw . callback . enqueue Ċ import Ġcom . big create . zy fw . models .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . w 3 c . dom . Attr Ċ Ċ class ĠLogin ViewModel ( application : ĠApplication ): ĠAndroid ViewModel ( application ) Ġ{ ĊĠĠĠ Ġvar ĠuserInfo Ġ= ĠMutable LiveData < UserInfo >() ĊĠĠĠ Ġvar Ġtoken Ġ= ĠMutable LiveData < String >() ĊĠĠĠ Ġvar ĠuserId : Int Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġlogin Status Ġ= ĠMutable LiveData < Login Status >() ĊĠĠĠ Ġvar ĠgetUser Info Status Ġ= ĠMutable LiveData < UserInfo Status >() ĊĠĠĠ Ġfun Ġrefresh UserInfo ( uid : Int Ġ= ĠuserInfo . value ?. userId ?. toInt () ?: userId ) Ġ{ ĊĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ GET TING ) ĊĠĠĠĠĠĠĠ ĠRemote Service . instance . getUser Info By Self ( Simple Request ( token . value ? :" ", uid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . ERROR _ NETWORK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Json Null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ EMPTY _ USER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 Ġ-> Ġjson Content From Data . toJson (). fromJson < UserInfo >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . post Value ( json Content From Data . get AsString (" token ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . token Ġ= Ġtoken . value ?: "" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserInfo . post Value ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ SUCCESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 4 Ġ-> ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ EMPTY _ USER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠgetUser Info Status . post Value ( UserInfo Status . ERROR _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry Login ( userName : ĠString , password : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( token . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre Login ( userName , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . STATUS _ LOGIN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . SUCCESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtry Get UserInfo () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( userInfo . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh UserInfo () ĊĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ GET TING ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Info Status . post Value ( UserInfo Status . STATUS _ SUCCESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġre Login ( userName : String , password : String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . STATUS _ LOGIN ) ĊĠĠĠĠĠĠĠ ĠRemote Service . login By Pass ( Login Request ( userName , password )). enqueue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . ERROR _ NETWORK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Application < My Application >(). default SharedPreferences . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean (" saved _ account ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String (" username ", ĠuserName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String (" password ", Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAttributes . login UserInfo Ġ= ĠLogin Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Token From Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Data . getAs Int (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken . post Value ( new Token From Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . SUCCESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġjson Data . getAs Int (" userId ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh UserInfo ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 0 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . ERROR _ PASS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Status . post Value ( Login Status . ERROR _ UNKNOWN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ enum Ġclass ĠLogin Status Ġ{ ĊĠĠĠ ĠSTATUS _ LOGIN , ĊĠĠĠ ĠSTATUS _ EXIT , ĊĠĠĠ ĠSUCCESS , ĊĠĠĠ ĠERROR _ UNKNOWN , ĊĠĠĠ ĠERROR _ PASS , ĊĠĠĠ ĠERROR _ USER , ĊĠĠĠ ĠERROR _ USER _ OR _ PASS , ĊĠĠĠ ĠERROR _ NETWORK Ċ } Ċ Ċ enum Ġclass ĠUserInfo Status Ġ{ ĊĠĠĠ ĠSTATUS _ GET TING , ĊĠĠĠ ĠSTATUS _ EMPTY _ USER , ĊĠĠĠ ĠERROR _ NETWORK , ĊĠĠĠ ĠERROR _ PERMISSION , ĊĠĠĠ ĠSTATUS _ SUCCESS Ċ }