package Ġcom . dan . school . ui . fragments . settings Ċ Ċ import Ġandroid . animation . Layout Transition Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . dan . school . R Ċ import Ġcom . dan . school . other . School Ċ import Ġcom . dan . school . databinding . Fragment Profile Binding Ċ import Ġcom . dan . school . ui . activities . Settings Activity Ċ import Ġcom . google . android . material . dialog . Material AlertDialog Builder Ċ Ċ class ĠProfile Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Profile Binding ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġvar Ġis Edit Mode Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Pref : ĠSharedPreferences ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinput Method Manager : ĠInput Method Manager ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġshared Pref Ġ= Ġcontext . get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . preference _ file _ key ), ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġinput Method Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcallback : ĠOn Back Pressed Callback Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow SaveChanges Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( require Activity () Ġis ĠSettings Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). support FragmentManager . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( this , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow SaveChanges Dialog () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial AlertDialog Builder ( require Context ()). setMessage ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( getString ( R . string . do _ you _ want _ to _ save _ your _ changes )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . save )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( set Edit Mode ( false )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). support FragmentManager . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . enter _ a _ valid _ input ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( getString ( R . string . cancel )) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Profile Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . constraint Layout Profile . layout Transition . enable Transition Type ( Layout Transition . CHANG ING ) ĊĊĠĠĠĠĠĠĠ Ġbinding . textView Nick name Display . text Ġ= Ġshared Pref . getString ( School . N ICK NAME , Ġ"") ĊĠĠĠĠĠĠĠ Ġbinding . textView FullName Display . text Ġ= Ġshared Pref . getString ( School . FULL _ NAME , Ġ"") ĊĊĠĠĠĠĠĠĠ Ġbinding . button Edit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Edit . setImage Resource ( R . drawable . ic _ edit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Edit Mode ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Edit . setImage Resource ( R . drawable . ic _ check ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Edit Mode ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Back . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Edit Mode ( edit Mode : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField Nick name . edit Text ?. setText ( shared Pref . getString ( School . N ICK NAME , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField FullName . edit Text ?. setText ( shared Pref . getString ( School . FULL _ NAME , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Edit Mode Ġ= Ġedit Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( edit Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( view ?. window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnickname Ġ= Ġbinding . textField Nick name . edit Text ?. text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfullName Ġ= Ġbinding . textField FullName . edit Text ?. text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Nick name Empty Ġ= Ġnickname . trim (). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis FullName Empty Ġ= ĠfullName . trim (). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Nick name Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField Nick name . error Ġ= ĠgetString ( R . string . this _ field _ is _ required ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField Nick name . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is FullName Empty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField FullName . error Ġ= ĠgetString ( R . string . this _ field _ is _ required ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textField FullName . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!( is Nick name Empty Ġ|| Ġis FullName Empty )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView Nick name Display . text Ġ= Ġnickname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textView FullName Display . text Ġ= ĠfullName ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Updated Profile ( nickname , ĠfullName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Edit Mode Ġ= Ġedit Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Visibility ( edit Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Updated Profile ( nickname : ĠString , ĠfullName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Pref . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( School . N ICK NAME , Ġnickname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( School . FULL _ NAME , ĠfullName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Visibility ( edit Mode : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . textField Nick name . isVisible Ġ= Ġedit Mode ĊĠĠĠĠĠĠĠ Ġbinding . textField FullName . isVisible Ġ= Ġedit Mode ĊĠĠĠĠĠĠĠ Ġbinding . textView Nick name Display . isVisible Ġ= Ġ! edit Mode ĊĠĠĠĠĠĠĠ Ġbinding . textView FullName Display . isVisible Ġ= Ġ! edit Mode ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Focused View Ġ= Ġrequire Activity (). current Focus ĊĠĠĠĠĠĠĠ Ġif Ġ( current Focused View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Method Manager . hide Soft Input From Window ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Focused View . window Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Method Manager . HIDE _ NOT _ ALWAYS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠ Ġ} Ċ }