/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . google . samples . apps . to pe ka . fragment Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Floating ActionButton Ċ import Ġandroid . support . v 4 . app . Activity Options Compat Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . support . v 4 . util . Pair Ċ import Ġandroid . support . v 4 . view . View Compat Ċ import Ġandroid . support . v 4 . view . animation . Fast Out Slow In Interpolator Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . transition . Transition Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . GridView Ċ import Ġcom . google . samples . apps . to pe ka . R Ċ import Ġcom . google . samples . apps . to pe ka . adapter . Avatar Adapter Ċ import Ġcom . google . samples . apps . to pe ka . helper . Activity Launch Helper Ċ import Ġcom . google . samples . apps . to pe ka . helper . Api Level Helper Ċ import Ġcom . google . samples . apps . to pe ka . helper . Default Login Ċ import Ġcom . google . samples . apps . to pe ka . helper . TAG Ċ import Ġcom . google . samples . apps . to pe ka . helper . Transition Helper Ċ import Ġcom . google . samples . apps . to pe ka . helper . is LoggedIn Ċ import Ġcom . google . samples . apps . to pe ka . helper . login Ċ import Ġcom . google . samples . apps . to pe ka . helper . on Layout Change Ċ import Ġcom . google . samples . apps . to pe ka . helper . on Smart Lock Result Ċ import Ġcom . google . samples . apps . to pe ka . model . Avatar Ċ import Ġcom . google . samples . apps . to pe ka . model . Player Ċ import Ġcom . google . samples . apps . to pe ka . widget . Text Watcher Adapter Ċ import Ġcom . google . samples . apps . to pe ka . widget . Transition Listener Adapter Ċ Ċ /** Ċ Ġ* ĠEnable Ġselection Ġof Ġan Ġ[ Avatar ] Ġand Ġuser Ġname . Ċ Ġ*/ Ċ class ĠSign In Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠfirstName View : ĠEditText ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Initial View : ĠEditText ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġdone Fab : ĠFloating ActionButton ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġavatar Grid : ĠGrid View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġedit Ġby Ġlazy Ġ{ Ġarguments ?. getBoolean ( ARG _ EDIT , Ġfalse ) Ġ?: Ġfalse Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġselected Avatar View : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠPlayer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġselected Avatar : ĠAvatar ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavatar Index Ġ= ĠsavedInstanceState . getInt ( KEY _ SELECTED _ AV AT AR _ INDEX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( avatar Index Ġ!= ĠGrid View . INVALID _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Avatar Ġ= ĠAvatar . values ()[ avatar Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is LoggedIn ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Category Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin . login Player ( this , Ġ:: on Successful Login ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġlogged Ġin Ġsuccessfully . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Successful Login ( player : ĠPlayer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( login Ġ!= ĠDefault Login ) Ġreturn ĊĠĠĠĠĠĠĠ Ġthis . player Ġ= Ġplayer ĊĠĠĠĠĠĠĠ Ġif Ġ( edit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( player ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName View ?. setText ( player . firstName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Initial View ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( player . last Initial ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Selection ( length ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ SignIn Fragment . player Ġ= Ġplayer . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin . save Player ( activity !! , Ġthis , Ġ{ Ġselect Avatar ( it . avatar !! ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Category Activity () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Category Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Launch Helper . launch Category Selection ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport Finish After Transition () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. on Smart Lock Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠresultCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Contents () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Category Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin . login Player ( this , Ġ:: on Successful Login ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent View Ġ= Ġinflater . inflate ( R . layout . fragment _ sign _ in , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġcontent View . on Layout Change Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Grid ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠAvatar Adapter ( activity !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= ĠAdapter View . On ItemClickListener Ġ{ Ġ_, Ġview , Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Avatar View Ġ= Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Avatar Ġ= ĠAvatar . values ()[ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshowing Ġthe Ġfloating Ġaction Ġbutton Ġif Ġinput Ġdata Ġis Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Fab () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum Columns Ġ= Ġcalculate Span Count () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Avatar ?. run Ġ{ Ġselect Avatar ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent View ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġspans Ġfor Ġav atars Ġdynamically . ĊĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġrecommended Ġamount Ġof Ġcolumns . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalculate Span Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġavatar Size Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . size _ fab ) ĊĠĠĠĠĠĠĠ Ġval Ġavatar Padding Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . spacing _ double ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( avatar Grid ?. width Ġ?: Ġ 0 ) Ġ/ Ġ( avatar Size Ġ+ Ġavatar Padding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ SELECTED _ AV AT AR _ INDEX , Ġ( avatar Grid ?. checked Item Position Ġ?: Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠfirstName View Ġ= Ġview . findViewById < EditText >( R . id . first _ name ) ĊĠĠĠĠĠĠĠ Ġlast Initial View Ġ= Ġview . findViewById < EditText >( R . id . last _ initial ) ĊĠĠĠĠĠĠĠ Ġdone Fab Ġ= Ġview . findViewById < Floating ActionButton >( R . id . done ) ĊĠĠĠĠĠĠĠ Ġavatar Grid Ġ= Ġview . findViewById < GridView >( R . id . avatars ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( edit Ġ|| Ġ( player Ġ!= Ġnull Ġ&& Ġplayer !!. valid ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Content Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Contents () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhide Empty View () ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Empty View () Ġ{ ĊĠĠĠĠĠĠĠ Ġview ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . empty ). visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( R . id . content ). visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Content Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Watcher Ġ= Ġobject Ġ: ĠText Watcher Ġby ĠText Watcher Adapter Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhiding Ġthe Ġfloating Ġaction Ġbutton Ġif Ġtext Ġis Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Fab ?. hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshowing Ġthe Ġfloating Ġaction Ġbutton Ġif Ġavatar Ġis Ġselected Ġand Ġinput Ġdata Ġis Ġvalid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Avatar Selected () Ġ&& Ġis InputData Valid ()) Ġdone Fab ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠfirstName View ?. add TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠ Ġlast Initial View ?. add TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠ Ġdone Fab ?. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . id Ġ== ĠR . id . done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= ĠfirstName View ?. text ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġlast Initial View ?. text ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Save Ġ= Ġplayer ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġeither Ġupdate Ġthe Ġexisting Ġplayer Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġfirst ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Initial Ġ= Ġlast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Ġ= Ġselected Avatar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠPlayer ( first , Ġlast , Ġselected Avatar ) Ġ/* Ġor Ġcreate Ġa Ġnew Ġone Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin . save Player ( this , Ġto Save ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Saving Ġlogin Ġinfo Ġsuccessful .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Done Fab Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform SignIn With Transition ( selected Avatar View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġavatar Grid ?. getChild At ( selected Avatar !!. ordinal )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Done Fab ( end Action : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠView Compat . animate ( done Fab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Y ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( Fast Out Slow In Interpolator ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with End Action ( end Action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġperform SignIn With Transition ( v : ĠView ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v Ġ== Ġnull Ġ|| ĠApi Level Helper . is Lower Than ( Build . VERSION _ CODES . LO L LI POP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġrun Ġa Ġtransition Ġif Ġthe Ġpassed Ġview Ġis Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Category Activity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Api Level Helper . is At Least ( Build . VERSION _ CODES . LO L LI POP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . shared Element Exit Transition . addListener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransition . Transition Listener Ġby ĠTransition Listener Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Transition End ( transition : ĠTransition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpairs Ġ= ĠTransition Helper . create Safe Transition Participants ( this , Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( v , ĠgetString ( R . string . transition _ avatar ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠActivity Options Compat . make Scene Transition Animation ( this , Ġ* pairs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Launch Helper . launch Category Selection ( this , Ġoptions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Contents () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalid (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName View ?. setText ( firstName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Initial View ?. setText ( last Initial ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar ?. run Ġ{ Ġselect Avatar ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Avatar Selected () Ġ= Ġselected Avatar View Ġ!= Ġnull Ġ|| Ġselected Avatar Ġ!= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġselect Avatar ( avatar : ĠAvatar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Avatar Ġ= Ġavatar ĊĠĠĠĠĠĠĠ Ġavatar Grid ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus From Touch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Item Checked ( avatar . ordinal , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Fab () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is InputData Valid ()) Ġdone Fab ?. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis InputData Valid () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName View ?. text ?. isNotEmpty () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Initial View ?. text ?. isNotEmpty () Ġ== Ġtrue Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Avatar Ġ!= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARG _ EDIT Ġ= Ġ" EDIT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ SELECTED _ AV AT AR _ INDEX Ġ= Ġ" selected Avatar Index " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( edit : ĠBoolean Ġ= Ġfalse ): ĠSign In Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSign In Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( ARG _ EDIT , Ġedit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ