package Ġcom . corn ell app dev . coffee _ ch ats _ android Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Transaction Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . fragments . Edit Profile Fragment Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . fragments . Pro mp ts Fragment Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . fragments . Social Media Fragment Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . fragments . User Field Fragment Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . models . User Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . models . User Field Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . models . User Session Ċ import Ġcom . corn ell app dev . coffee _ ch ats _ android . networking . getUser Ċ import Ġkotlinx . android . synt hetic . main . activity _ on boarding .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠOn boarding Activity Ġ: ĠAppCompatActivity (), ĠOn Filled Out Listener , ĊĠĠĠ ĠPro mp ts Fragment . Pro mp ts Container Ġ{ ĊĊĠĠĠ Ġ// ĠTODO ĠFigure Ġout Ġif Ġthis Ġis Ġnecessary Ġ- Ġfetching Ġuser Ġfrom Ġbackend Ġin Ġevery Ġfragment Ġmaintains Ġconsistency ĊĠĠĠ Ġ/** ĠCurrent Ġuser Ġprofile - Ġwill Ġbe Ġmut ated Ġas Ġuser Ġfill s Ġout Ġinformation Ġin Ġon boarding Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser : ĠUser ĊĊĠĠĠ Ġ/** ĠCurrently - display ed Ġpage Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġcontent Ġ= ĠContent . CREATE _ PROFILE ĊĊĠĠĠ Ġ/** ĠOrder Ġin Ġwhich Ġpages Ġare Ġpresented Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġnavigation List Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . CREATE _ PROFILE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . INTER EST S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GROUP S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . PRO MP TS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GO ALS , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . SO CIAL _ MEDIA ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠPages Ġthat Ġdisplay Ġthe ĠAdd ĠL ater Ġbutton Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġadd Later Pages Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( Content . GROUP S , ĠContent . GO ALS , ĠContent . SO CIAL _ MEDIA ) ĊĊĠĠĠ Ġ/** ĠAll Ġon boarding Ġpages Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠContent Ġ{ ĊĠĠĠĠĠĠĠ ĠCREATE _ PROFILE , ĊĠĠĠĠĠĠĠ ĠINTER EST S , ĊĠĠĠĠĠĠĠ ĠGROUP S , ĊĠĠĠĠĠĠĠ ĠPRO MP TS , ĊĠĠĠĠĠĠĠ ĠGO ALS , ĊĠĠĠĠĠĠĠ ĠSO CIAL _ MEDIA ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDefault Ġbottom Ġmargin Ġfor Ġnext Ġbutton Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdefault Button Bottom Margin Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ on boarding ) ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . Main ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra ( ACCESS _ TOKEN _ TAG )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Session . current AccessToken Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= ĠgetUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġft : ĠFragment Transaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġft . replace ( fragment Container . id , ĠEdit Profile Fragment (), Ġcontent . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo Back Stack (" ft ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Current Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġback _ button . setOnClickListener Ġ{ Ġon Back Pressed () Ġ} ĊĠĠĠĠĠĠĠ Ġincrease Hit Area ( back _ button ) ĊĠĠĠĠĠĠĠ Ġon boarding _ next . setOnClickListener Ġ{ Ġon Next Page ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġadd _ later . setOnClickListener Ġ{ Ġon Next Page ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġshrink Ġbottom Ġmargin Ġof Ġnext Ġbutton Ġwhen Ġthe Ġkeyboard Ġis Ġdisplayed , Ġand Ġrestore Ġit Ġto Ġthe Ġoriginal Ġmargin Ġotherwise ĊĠĠĠĠĠĠĠ Ġdefault Button Bottom Margin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( on boarding _ next . layout Params Ġas ĠConstraint Layout . LayoutParams ). bottom Margin ĊĠĠĠĠĠĠĠ Ġroot . view Tree Observer . add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . getWindow Visible Display Frame ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Diff Ġ= Ġroot . root View . height Ġ- Ġr . height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon boarding _ next . layout Params Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( on boarding _ next . layout Params Ġas ĠConstraint Layout . LayoutParams ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Margin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( height Diff Ġ> Ġ 0 . 2 5 Ġ* Ġroot . root View . height ) Ġ 0 Ġelse Ġdefault Button Bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠOn Filled Out Observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . setOn Filled Out Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġis ĠPro mp ts Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . set Container ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġhide Keyboard ( this , Ġback _ button ) ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnavigation List . first ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== ĠContent . PRO MP TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( content . name ) Ġas ĠPro mp ts Fragment ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr Fragment . content Ġ!= ĠPro mp ts Fragment . Content . DISPLAY _ RESPONSE S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Fragment . on Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspecial Ġhandling Ġfor Ġpromp ts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnavigation List [ navigation List . indexOf ( Content . PRO MP TS ) Ġ+ Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation List [ navigation List . indexOf ( content ) Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation List [ navigation List . indexOf ( content ) Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Current Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Action ButtonText ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ next . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset ActionButton Visibility ( isVisible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ next . visibility Ġ= Ġif Ġ( isVisible ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Header Text ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ header . text Ġ= Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Next Page ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhide Ġkeyboard ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġget System Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( view . application Window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcurr Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment By Tag ( content . name ) Ġas ĠOn Filled Out Observable ĊĠĠĠĠĠĠĠ Ġif Ġ( curr Fragment Ġis ĠPro mp ts Fragment Ġ&& Ġcurr Fragment . content Ġ== ĠPro mp ts Fragment . Content . EDIT _ RESPONSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Fragment . save Current Prompt Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurr Fragment . save Information () ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ!= Ġnavigation List . last ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġnavigation List [ navigation List . indexOf ( content ) Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment : ĠFragment Ġ= Ġwhen Ġ( content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . CREATE _ PROFILE Ġ-> ĠEdit Profile Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . INTER EST S Ġ-> ĠUser Field Fragment . newInstance ( User Field . Category . INTER EST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GROUP S Ġ-> ĠUser Field Fragment . newInstance ( User Field . Category . GROUP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . PRO MP TS Ġ-> ĠPro mp ts Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GO ALS Ġ-> ĠUser Field Fragment . newInstance ( User Field . Category . GO AL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent . SO CIAL _ MEDIA Ġ-> ĠSocial Media Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġft : ĠFragment Transaction Ġ= Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġft . replace ( fragment Container . id , Ġfragment , Ġcontent . name ). addTo Back Stack (" ft "). commit () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Current Page () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġon boarding Ġdone , Ġlaunch ĠS cheduling Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠS cheduling Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ CLEAR _ TOP Ġor ĠIntent . FLAG _ ACTIVITY _ SINGLE _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Current Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ header . text Ġ= Ġwhen Ġ( content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . CREATE _ PROFILE Ġ-> ĠgetString ( R . string . demo graphics _ header , Ġuser . firstName ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . INTER EST S Ġ-> ĠgetString ( R . string . interest s _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GROUP S Ġ-> ĠgetString ( R . string . groups _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . PRO MP TS Ġ-> ĠgetString ( R . string . pro mp ts _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . GO ALS Ġ-> ĠgetString ( R . string . goals _ header ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContent . SO CIAL _ MEDIA Ġ-> ĠgetString ( R . string . social _ media _ header ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġback _ button . visibility Ġ= Ġif Ġ( content Ġ== ĠContent . CREATE _ PROFILE ) ĠView . GONE Ġelse ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġadd _ later . visibility Ġ= Ġif Ġ( content Ġin Ġadd Later Pages ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġon boarding _ next . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnavigation List . last ()) ĠgetString ( R . string . ready _ for _ pear ) Ġelse ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . next ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== ĠContent . PRO MP TS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ RE SIZE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ ADJ UST _ PAN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Filled Out () Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ next . isEnabled Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selection Empty () Ġ{ ĊĠĠĠĠĠĠĠ Ġon boarding _ next . isEnabled Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }