package Ġcom . mongodb . r chat app . ui . profile Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroidx . activity . result . contract . Activity Result Contracts Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . mongodb . r chat app . R Ċ import Ġcom . mongodb . r chat app . databinding . Fragment Profile Binding Ċ import Ġcom . mongodb . r chat app . ui . data . Profile Navigation Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel ĊĊ Ċ class ĠProfile Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠProfile ViewModel Ġby ĠviewModel () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ binding : ĠFragment Profile Binding ĊĠĠĠ Ġprivate Ġvar Ġimage Uri : ĠUri ? Ġ= Ġnull ĊĊĊĠĠĠ Ġval ĠgetContent Ġ= Ġregister For Activity Result ( Activity Result Contracts . Get Content ()) Ġ{ Ġuri : ĠUri ? Ġ-> ĊĠĠĠĠĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. circle Crop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into (_ binding . iv Image ) ĊĊĠĠĠĠĠĠĠ Ġimage Uri Ġ= Ġuri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . navigation . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Navigation . Go To Home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ binding . input Username . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ binding . bt Update . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ binding . bt Update . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġrequire Context (). content Resolver ?. open InputStream ( it )?. buffered () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . use Ġ{ Ġit . read Bytes () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠbyteArray ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Image ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update DisplayName (_ binding . input Username . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . userName . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ binding . input Username . setText ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ binding . iv Image . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetContent . launch (" image /* ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . user Image . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. circle Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ baseline _ add _ a _ photo _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . ic _ baseline _ add _ a _ photo _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into (_ binding . iv Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ profile , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ logout Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Logout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }