package Ġcom . che l seat roy . can ary Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Capabilities Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . che l seat roy . can ary . api . Can ary Session Ċ import Ġcom . che l seat roy . can ary . api . Mock y API Implementation Ċ import Ġkotlinx . android . synt hetic . main . activity _ login .* Ċ import Ġkotlinx . coroutines .* ĊĊ Ċ class ĠLogin Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġ// var Ġis Auth Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ login ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlogin Button Ġ= ĠfindViewById < Button >( R . id . login _ button ) ĊĠĠĠĠĠĠĠ Ġlogin Button . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Network Connected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthenticate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setTitle (" No ĠInternet ĠConnection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Please Ġcheck Ġyour ĠInternet Ġconnection Ġand Ġtry Ġagain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ _, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( android . R . drawable . ic _ dialog _ alert ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . M ) ĊĠĠĠ Ġprivate Ġfun Ġis Network Connected (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġget System Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġactive Network Ġ= Ġconnectivity Manager . active Network ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Capabilities Ġ= Ġconnectivity Manager . get Network Capabilities ( active Network ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnetwork Capabilities Ġ!= Ġnull Ġ&& Ġnetwork Capabilities . has Capability ( Network Capabilities . NET _ CAP ABILITY _ INTER NET ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġauthenticate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogin Job Ġ= ĠJob () ĊĊĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġ_, Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setTitle (" Error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( exception . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( android . R . drawable . ic _ dialog _ alert ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( login Job Ġ+ ĠDispatch ers . Main ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsession : ĠCan ary Session ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcoroutine Scope . launch ( error Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Ġ= ĠMock y API Implementation (). authenticate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Session ĠRetrie ved :", Ġsession . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( session ?. token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// is Auth Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Session Data ( session !!. name , Ġsession !!. token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ Login Activity , ĠMainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeliver Auth Failure Message () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdeliver Auth Failure Message () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). setTitle (" Who ops ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" Wrong Ġcredentials . ĠTry Ġagain ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( android . R . drawable . ic _ dialog _ alert ). show () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Session Data ( name : ĠString ?, Ġtoken : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString (" Name ", Ġname ) ĊĠĠĠĠĠĠĠ Ġeditor . putString (" Token ", Ġtoken ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} Ċ }