package Ġcom . rol and v ite zh u . tod oc loud . ui . activity . main . fragment Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . rol and v ite zh u . tod oc loud . R Ċ import Ġcom . rol and v ite zh u . tod oc loud . app . App Controller Ċ import Ġcom . rol and v ite zh u . tod oc loud . app . App Controller . Companion . show White Text Snackbar Ċ import Ġcom . rol and v ite zh u . tod oc loud . database . Todo Cloud Database Dao Ċ import Ġcom . rol and v ite zh u . tod oc loud . databinding . Fragment Login user Binding Ċ import Ġcom . rol and v ite zh u . tod oc loud . helper . General Helper . validate Field Ċ import Ġcom . rol and v ite zh u . tod oc loud . helper . Session Manager Ċ import Ġcom . rol and v ite zh u . tod oc loud . helper . apply Orientation Full Sensor Ċ import Ġcom . rol and v ite zh u . tod oc loud . helper . apply Orientation Por trait Ċ import Ġcom . rol and v ite zh u . tod oc loud . helper . hide Soft Input Ċ import Ġcom . rol and v ite zh u . tod oc loud . network . ApiService Ċ import Ġcom . rol and v ite zh u . tod oc loud . ui . activity . main . MainActivity Ċ import Ġcom . rol and v ite zh u . tod oc loud . ui . activity . main . view model . User ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ login user .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ login user . view .* Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠLogin User Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġjava Class . simple Name ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapi Service : ĠApi Service ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġsession Manager : ĠSession Manager ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġtodo Cloud Database Dao : ĠTodo Cloud Database Dao ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġretrofit : ĠRet rofit ĊĊĠĠĠ Ġprivate Ġval Ġuser ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this ). get ( User ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġ( require Activity (). application Ġas ĠApp Controller ). app Component . ĊĠĠĠĠĠĠĠ Ġfragment Component (). create (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġapi Service Ġ= Ġretrofit . create ( ApiService :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( session Manager . is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ?) ?. on Finish Login User () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Login user Binding : ĠFragment Login user Binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Login user Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġview : ĠView Ġ= Ġfragment Login user Binding . root ĊĊĠĠĠĠĠĠĠ Ġprevent ButtonText Capital ization ( view ) ĊĊĠĠĠĠĠĠĠ Ġfragment Login user Binding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġfragment Login user Binding . login User Fragment Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġfragment Login user Binding . user ViewModel Ġ= Ġuser ViewModel ĊĠĠĠĠĠĠĠ Ġfragment Login user Binding . execute Pending Bindings () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ?) ?. on Set ActionBar Title ( getString ( R . string . all _ login )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠActivity Ġdoesn 't Ġexists Ġalready . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapply Orientation Por trait () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġapply Orientation Full Sensor () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Login User () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . view ?. let Ġ{ Ġvalidate Fields ( it ) Ġ} Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser ViewModel . on Login User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Manager . set Login ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Finish Login User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( cause : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( cause . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġthe Ġfields Ġand Ġshow Ġor Ġhide Ġthe Ġerror Ġmessages . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġvalidate Fields ( view : ĠView ) Ġ= ĊĠĠĠĠĠĠĠ Ġvalidate Field ( user ViewModel . is Email Provided (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text input layout _ login user _ email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . register user _ enter email hint )) Ġand ĊĠĠĠĠĠĠĠ Ġvalidate Field ( user ViewModel . is Password Provided (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text input layout _ login user _ password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . register user _ enter password hint )) ĊĊĠĠĠ Ġprivate Ġfun Ġprevent ButtonText Capital ization ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . button _ login user _ link to register ?. transformation Method Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġview . button _ login user _ link to reset password ?. transformation Method Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Finish Login User () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Form Submission Errors () ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ?) ?. on Finish Login User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ErrorMessage ( errorMessage : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( errorMessage Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupper Case ErrorMessage Ġ= ĠerrorMessage . toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( upper Case ErrorMessage . contains (" FAILED ĠTO ĠCONNECT ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupper Case ErrorMessage . contains (" UN ABLE ĠTO ĠRES OL VE ĠHOST ") Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupper Case ErrorMessage . contains (" TIMEOUT ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Form Submission Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Failed To Connect Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( upper Case ErrorMessage . contains (" LOGIN ĠFAILED . ĠIN CORRECT ĠC RED ENTIAL S ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Incorrect Credentials Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Form Submission Errors () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow An Error Occurred Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Form Submission Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text view _ login user _ form submission errors ?. text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text view _ login user _ form submission errors ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTextView Ġdoesn 't Ġexists Ġalready . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Failed To Connect Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . constraint layout _ login user !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . all _ failed to connect , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow White Text Snackbar ( sn ackbar ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSn ackbar Ġor Ġconstraint Layout Ġdoesn 't Ġexists Ġalready . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Incorrect Credentials Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text view _ login user _ form submission errors ?. setText ( R . string . login user _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . text view _ login user _ form submission errors ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTextView Ġdoesn 't Ġexists Ġalready . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow An Error Occurred Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . constraint layout _ login user !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . all _ an error occ urred , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow White Text Snackbar ( sn ackbar ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSn ackbar Ġor Ġconstraint Layout Ġdoesn 't Ġexists Ġalready . ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Button Login Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Soft Input () ĊĠĠĠĠĠĠĠ Ġhandle Login User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Button Link To Register Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ?) ?. onClick Link To Register User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Button Link To Reset Password Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ?) ?. onClick Link To Reset Password () ĊĠĠĠ Ġ} Ċ }