/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġim . vector . app . features . on boarding . ft ue auth Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . aut ofill . Hint Constants Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġim . vector . app . R Ċ import Ġim . vector . app . core . extensions . content Ċ import Ġim . vector . app . core . extensions . edit Text Ċ import Ġim . vector . app . core . extensions . hide Keyboard Ċ import Ġim . vector . app . core . extensions . hide Password Ċ import Ġim . vector . app . core . extensions . re align Percent ages To Parent Ċ import Ġim . vector . app . core . extensions . setOn Focus Lost Listener Ċ import Ġim . vector . app . core . extensions . setOn I me Done Listener Ċ import Ġim . vector . app . core . extensions . to Reduc ed Url Ċ import Ġim . vector . app . databinding . Fragment Ft ue Combined Login Binding Ċ import Ġim . vector . app . features . login . Login Mode Ċ import Ġim . vector . app . features . login . SS OR ed irect Router Activity Ċ import Ġim . vector . app . features . login . Social Login Buttons View Ċ import Ġim . vector . app . features . login . render Ċ import Ġim . vector . app . features . on boarding . On boarding Action Ċ import Ġim . vector . app . features . on boarding . On boarding View Events Ċ import Ġim . vector . app . features . on boarding . On boarding ViewState Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġorg . matrix . android . sdk . api . auth . data . S so Identity Provider Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠF t ue Auth Combined Login Fragment Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogin Fields Validation : ĠLogin Fields Validation , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogin Error Parser : ĠLogin Error Parser Ċ ) Ġ: ĠAbstract SS OF t ue Auth Fragment < Fragment Ft ue Combined Login Binding >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Binding ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?): ĠFragment Ft ue Combined Login Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFragment Ft ue Combined Login Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup Submit Button () ĊĠĠĠĠĠĠĠ Ġviews . login Root . re align Percent ages To Parent () ĊĠĠĠĠĠĠĠ Ġviews . edit Server Button . de bounc ed Click s Ġ{ ĠviewModel . handle ( On boarding Action . Post View Event ( On boarding View Events . Edit Server Selection )) Ġ} ĊĠĠĠĠĠĠĠ Ġviews . login Password Input . setOn I me Done Listener Ġ{ Ġsubmit () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . login Input . setOn Focus Lost Listener Ġ{ ĠviewModel . handle ( On boarding Action . Maybe Update Home server From Matrix Id ( views . login Input . content ())) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Submit Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . login Submit . setOnClickListener Ġ{ Ġsubmit () Ġ} ĊĠĠĠĠĠĠĠ Ġobserve Content Changes And Reset Errors ( views . login Input , Ġviews . login Password Input , Ġviews . login Submit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( view Lifecycle Owner . lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubmit () Ġ{ ĊĠĠĠĠĠĠĠ Ġcleanup Ui () ĊĠĠĠĠĠĠĠ Ġlogin Fields Validation . validate ( views . login Input . content (), Ġviews . login Password Input . content ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Username Or Id Error Ġ{ Ġviews . login Input . error Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Password Error Ġ{ Ġviews . login Password Input . error Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Valid Ġ{ Ġusername Or Id , Ġpassword Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinitial Device Name Ġ= ĠgetString ( R . string . login _ default _ session _ public _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . handle ( On boarding Action . Authenticate Action . Login ( username Or Id , Ġpassword , Ġinitial Device Name )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcleanup Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . login Submit . hide Keyboard () ĊĠĠĠĠĠĠĠ Ġviews . login Input . error Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġviews . login Password Input . error Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreset ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . handle ( On boarding Action . Reset Authentication Attempt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTr ick Ġto Ġdisplay Ġthe Ġerror Ġwithout Ġtext . ĊĠĠĠĠĠĠĠ Ġviews . login Input . error Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠ Ġlogin Error Parser . parse ( throwable , Ġviews . login Password Input . content ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Unknown Ġ{ Ġsuper . onError ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Username Or Id Error Ġ{ Ġviews . login Input . error Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Password Error Ġ{ Ġviews . login Password Input . error Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate With State ( state : ĠOn boarding ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Ui ( state ) ĊĠĠĠĠĠĠĠ Ġsetup Auto Fill () ĊĊĠĠĠĠĠĠĠ Ġviews . selected ServerName . text Ġ= Ġstate . selected Home server . user Facing Url . to Reduc ed Url () ĊĠĠĠĠĠĠĠ Ġviews . selected Server Description . text Ġ= Ġstate . selected Home server . description ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġpassword Ġis Ġhidden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . login Password Input . edit Text (). hide Password () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ui ( state : ĠOn boarding ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . selected Home server . preferred Login Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLogin Mode . S so And Password Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Username Password () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender S so Providers ( state . deviceId , Ġstate . selected Home server . preferred Login Mode . sso Identity Providers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLogin Mode . S so Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Username Password () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender S so Providers ( state . deviceId , Ġstate . selected Home server . preferred Login Mode . sso Identity Providers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Username Password () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide S so Providers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender S so Providers ( deviceId : ĠString ?, Ġs so Providers : ĠList < S so Identity Provider > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . sso Group . isVisible Ġ= Ġs so Providers ?. isNotEmpty () Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġviews . sso Buttons Header . isVisible Ġ= Ġviews . sso Group . isVisible Ġ&& Ġviews . login Entry Group . isVisible ĊĠĠĠĠĠĠĠ Ġviews . sso Buttons . render ( sso Providers , ĠSocial Login Buttons View . Mode . MODE _ CONTINUE ) Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch S so Url ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredirect Url Ġ= ĠSS OR ed irect Router Activity . VECTOR _ RE DIRECT _ URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠdeviceId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ?. let Ġ{ Ġopen In Custom Tab ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide S so Providers () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . sso Group . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġviews . sso Buttons . sso Identity Providers Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Username Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . login Entry Group . isVisible Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Username Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġviews . login Entry Group . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Auto Fill () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . login Input . set Aut ofill Hints ( Hint Constants . AUT OF ILL _ HINT _ NEW _ USERNAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . login Password Input . set Aut ofill Hints ( Hint Constants . AUT OF ILL _ HINT _ NEW _ PASSWORD ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ