/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ- Ġpresent , ĠMulti ĠStep ĠPages Ġcontributors Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . um br al tech . mult iste pp ages . test app . flow Ċ Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . um br al tech . mult iste pp ages . Multi Step Dialog Fragment Ċ import Ġcom . um br al tech . mult iste pp ages . Step Ċ import Ġcom . um br al tech . mult iste pp ages . Step Advance Listener Ċ import Ġcom . um br al tech . mult iste pp ages . Step Layout Listener Ċ import Ġcom . um br al tech . mult iste pp ages . indicator . Indicator Ċ import Ġcom . um br al tech . mult iste pp ages . test app . R Ċ import Ġcom . um br al tech . mult iste pp ages . test app . dialog . Loading Dialog Fragment Ċ import Ġkotlinx . android . synt hetic . main . step _ 1 _ layout . view .* Ċ import Ġkotlinx . android . synt hetic . main . step _ 2 _ layout . view .* Ċ import Ġkotlinx . android . synt hetic . main . step _ 3 _ layout . view .* Ċ Ċ class ĠRegistration Flow ( ĊĠĠĠ Ġprivate Ġval Ġindicator : ĠIndicator , ĊĠĠĠ Ġprivate Ġval Ġfragment Manager : ĠFragment Manager Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG : ĠString ? Ġ= ĠRegistration Flow :: class . simple Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠfirstName : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠlastName : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġusername : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpassword : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġloading Dialog : ĠLoading Dialog Fragment Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠLoading Dialog Fragment (" Verify ing . ĠPlease Ġwait ...") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfirst Step : ĠStep < Unit , ĠUnit > Ġ= ĠStep ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" 1 . ĠPersonal ĠInformation ", ĊĠĠĠĠĠĠĠ Ġlayout Res Ġ= ĠR . layout . step _ 1 _ layout , ĊĠĠĠĠĠĠĠ Ġlayout Listener Ġ= ĠStep Layout Listener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ first _ name . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ first _ name _ layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ last _ name . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ last _ name _ layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġadvance Listener Ġ= ĠStep Advance Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Pre Execute Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġterminate Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 1 _ first _ name . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ first _ name _ layout . error Ġ= Ġ" First Ġname Ġcannot Ġbe Ġblank " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 1 _ last _ name . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 1 _ last _ name _ layout . error Ġ= Ġ" Last Ġname Ġcannot Ġbe Ġblank " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( terminate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Termin ating Ġdue Ġto Ġblank Ġfields ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute Ġ= Ġ{ Ġview , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġstep _ 1 _ first _ name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġstep _ 1 _ last _ name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġsecond Step : ĠStep < Unit , ĠUnit > Ġ= ĠStep ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" 2 . ĠUser ĠCredentials ", ĊĠĠĠĠĠĠĠ Ġlayout Res Ġ= ĠR . layout . step _ 2 _ layout , ĊĠĠĠĠĠĠĠ Ġlayout Listener Ġ= ĠStep Layout Listener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ username . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ username _ layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ password . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ password _ layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ repeat _ password . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ repeat _ password _ layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġadvance Listener Ġ= ĠStep Advance Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Pre Execute Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġterminate Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 2 _ username . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ username _ layout . error Ġ= Ġ" Username Ġcannot Ġbe Ġblank " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 2 _ password . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ password _ layout . error Ġ= Ġ" Password Ġcannot Ġbe Ġblank " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 2 _ repeat _ password . text . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ repeat _ password _ layout . error Ġ= Ġ" Repeat Ġpassword Ġcannot Ġbe Ġblank " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step _ 2 _ password . text . toString () Ġ!= Ġstep _ 2 _ repeat _ password . text . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 2 _ repeat _ password _ layout . error Ġ= Ġ" Password s Ġdo Ġnot Ġmatch " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminate Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( terminate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Termin ating Ġdue Ġto Ġblank Ġfields ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog . show ( fragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Execute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSim ulate Ġslow Ġnetwork Ġoperation Ġto Ġverify Ġusername Ġuni queness ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 3 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Post Execute Ġ= Ġ{ Ġview , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog . hide () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġstep _ 2 _ username . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġstep _ 2 _ password . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġthird Step : ĠStep < Unit , ĠUnit > Ġ= ĠStep ( ĊĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" 3 . ĠSummary ", ĊĠĠĠĠĠĠĠ Ġlayout Res Ġ= ĠR . layout . step _ 3 _ layout , ĊĠĠĠĠĠĠĠ Ġlayout Listener Ġ= ĠStep Layout Listener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 3 _ full _ name . text Ġ= Ġ" Name : Ġ$ firstName Ġ$ lastName " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 3 _ username . text Ġ= Ġ" Username : Ġ$ username " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep _ 3 _ password . text Ġ= Ġ" Password : Ġ$ password " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġadvance Listener Ġ= ĠStep Advance Listener () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġexecute () Ġ= ĠMulti Step Dialog Fragment . create ( ĊĠĠĠĠĠĠĠ Ġ" Registration ", ĊĠĠĠĠĠĠĠ ĠlistOf ( first Step , Ġsecond Step , Ġthird Step ), ĊĠĠĠĠĠĠĠ Ġindicator ĊĠĠĠ Ġ). show ( fragment Manager , ĠTAG ) Ċ }