package Ġorg . w ats i . enrollment . activities Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . android _ version Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . app _ version Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . login _ button Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . login _ password Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . login _ username Ċ import Ġkotlinx . android . synt hetic . main . activity _ authentication . password _ container Ċ import Ġorg . w ats i . enrollment . Build Config Ċ import Ġorg . w ats i . enrollment . R Ċ import Ġorg . w ats i . enrollment . device . managers . Logger Ċ import Ġorg . w ats i . enrollment . device . managers . Session Manager Ċ import Ġorg . w ats i . enrollment . domain . use cases . Delete UserData UseCase Ċ import Ġorg . w ats i . enrollment . domain . use cases . Fetch Administr ative Div isions UseCase Ċ import Ġorg . w ats i . enrollment . domain . use cases . Fetch Enrollment Periods UseCase Ċ import Ġorg . w ats i . enrollment . domain . use cases . Verify Current Enrollment Period Exists UseCase Ċ import Ġorg . w ats i . enrollment . helpers . Network Error Helper Ċ import Ġorg . w ats i . enrollment . managers . Keyboard Manager Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠAuthentication Activity Ġ: ĠLocale Aware Activity () Ġ{ ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġlogger : ĠLogger ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġsession Manager : ĠSession Manager ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġkeyboard Manager : ĠKeyboard Manager ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġdelete UserData UseCase : ĠDelete UserData UseCase ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġfetch Administr ative Div isions UseCase : ĠFetch Administr ative Div isions UseCase ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġfetch Enrollment Periods UseCase : ĠFetch Enrollment Periods UseCase ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar Ġverify Current Enrollment Period Exists UseCase : ĠVerify Current Enrollment Period Exists UseCase ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( session Manager . current Authentication Token ()?. token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To MainActivity () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠsetTitle ( R . string . enrollment ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ authentication ) ĊĊĠĠĠĠĠĠĠ Ġlogin _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ username . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ password . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Manager . hide Keyboard ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ button . text Ġ= ĠgetString ( R . string . logging _ in ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ button . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . concat Array ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Manager . login ( login _ username . text . toString (), Ġlogin _ password . text . toString ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( session Manager . should Clear UserData ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete UserData UseCase . execute (). blocking Await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onError Complete Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġerror Ġcase , Ġwe Ġwant Ġto Ġcomplete Ġanyway Ġsince Ġthe Ġuser Ġcan Ġstill Ġdo Ġwhat Ġthey ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġdo Ġ( enroll Ġhouse holds ) Ġwithout Ġthe Ġerror Ġdeleted . ĠReturn ing Ġtrue Ġach ie ves Ġthis Ġbehavior . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Enrollment Periods UseCase . execute (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Administr ative Div isions UseCase . execute (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Current Enrollment Period Exists UseCase . execute () Ġ// ĠThis Ġwill Ġreturn Ġan Ġexception Ġif Ġno Ġcurrent Ġenrollment Ġperiod Ġexists . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). observe On ( Android Schedulers . main Thread ()). subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To MainActivity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġthis :: handle Login Failure ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlogin _ password . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin _ button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġapp _ version . text Ġ= ĠgetString ( R . string . app _ version , ĠBuild Config . VERSION _ NAME ) ĊĠĠĠĠĠĠĠ Ġandroid _ version . text Ġ= ĠgetString ( R . string . android _ version , Ġandroid . os . Build . VERSION . RELEASE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Login Failure ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthrowable Ġ= Ġthrowable . cause Ġ?: Ġthrowable ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġis ĠVerify Current Enrollment Period Exists UseCase . No Enrollment Period Found Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . enrollment _ data _ mis configured _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġis ĠSession Manager . Permission Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ permission _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Error Helper . is Http Unauthorized ( throwable ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ wrong _ username _ or _ password _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Error Helper . is Phone Offline Error ( throwable ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ phone _ offline _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Error Helper . is Server Offline Error ( throwable ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ server _ offline _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Error Helper . is Po or Connectivity Error ( throwable ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ connectivity _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlogin Ġfailed Ġdue Ġto Ġserver Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġthis Ġpath Ġshould Ġonly Ġbe Ġused Ġfor Ġserver Ġ 5 0 0 s , Ġif Ġwe Ġare Ġseeing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġexceptions Ġfor Ġother Ġreasons Ġbeing Ġcaught Ġhere , Ġwe Ġshould Ġadd ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġthem Ġto Ġthe Ġappropriate Ġcases Ġabove ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ container . error Ġ= ĠgetString ( R . string . login _ generic _ failure _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogin _ button . text Ġ= ĠgetString ( R . string . login _ button _ text ) ĊĠĠĠĠĠĠĠ Ġlogin _ button . isEnabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// Ġlogin Ġmay Ġhave Ġsucceeded Ġso Ġneed Ġto Ġclear Ġtoken Ġif Ġfetch Ġfails ĊĠĠĠĠĠĠĠ Ġsession Manager . logout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . ENABLE _ LANGUAGE _ SWITCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . main , Ġmenu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġswitch Language Item Ġ= Ġmenu . find Item ( R . id . menu _ switch _ language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Language Item . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġno - op Ġto Ġensure Ġif Ġuser Ġgoes Ġback Ġon Ġthis Ġscreen , Ġthey Ġstay Ġon Ġthis Ġscreen Ġinstead Ġof Ġexiting Ġthe Ġapp . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To MainActivity () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ switch _ language Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Manager . set Locale Confirmation Dialog ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ