package Ġcom . github . ll max im ll . m yst ory is my world . presentation . profile . change profile . view Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . lifecycle . repeat On Lifecycle Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . github . ll max im ll . m yst ory is my world . R Ċ import Ġcom . github . ll max im ll . m yst ory is my world . databinding . Fragment Change Profile Binding Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . main . view model . Shared ViewModel Impl Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . profile . change profile . view model . Change Profile ViewModel Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . profile . change profile . view model . Update User State Ċ import Ġcom . github . ll max im ll . m yst ory is my world . utils .* Ċ import Ġcom . google . android . material . transition . Material Shared Axis Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ Ċ @ Android EntryPoint Ċ class ĠChange Profile Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Change Profile Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠChange Profile ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġshared ViewModel Impl : ĠShared ViewModel Impl Ġby Ġactivity ViewModels () ĊĠĠĠ Ġprivate Ġval Ġargs : ĠChange Profile Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Change 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 ) ĊĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠĠĠĠĠ Ġsetup Listeners () ĊĠĠĠĠĠĠĠ Ġsetup Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . save State . observe ( view Lifecycle Owner , Ġ:: handle Save State ) ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle . repeat On Lifecycle ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel Impl . network State . collect Ġ{ Ġnetwork Status Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set Network State ( network Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( network Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Status . Unavailable Ġ-> Ġon Network Unavailable () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Status . Available Ġ-> Ġon Network Available () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tool Bar . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . save Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . save State . value Ġ!= ĠUpdate User State . Loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). require Net ( viewModel . network State . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Profile ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġbinding . firstName EditText . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġbinding . lastName EditText . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabout Me Ġ= Ġbinding . about Me EditText . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Views () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . firstName EditText . setText ( args . firstName Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġbinding . lastName EditText . setText ( args . lastName Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġbinding . about Me EditText . setText ( args . about Me Ġ?: Ġ"") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Save State ( state : ĠUpdate User State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Initial Ġ-> Ġbinding . progress Indicator . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Loading Ġ-> Ġbinding . progress Indicator . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate User State . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . show Snackbar ( R . string . fragment _ change _ profile _ error _ saving _ changes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Indicator . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate User State . Input Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Indicator . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Input Error ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Indicator . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Profile () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Input Error ( state : ĠUpdate User State . Input Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Input Error . FirstName . Short Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . firstName Input Layout . show Error Res Id ( R . string . fragment _ change _ profile _ input _ error _ first _ name _ short ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Input Error . FirstName . Special Characters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . firstName Input Layout . show Error Res Id ( R . string . fragment _ change _ profile _ input _ error _ first _ name _ special _ characters ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Input Error . LastName . Special Characters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . firstName Input Layout . show Error Res Id ( R . string . fragment _ change _ profile _ input _ error _ last _ name _ special _ characters ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate User State . Input Error . About Me . Special Characters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . firstName Input Layout . show Error Res Id ( R . string . fragment _ change _ profile _ input _ error _ about _ me _ special _ characters ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Network Available () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Network Unavailable () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Profile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= ĠChange Profile Fragment Directions . action Change Profile Fragment To Navigation Profile () ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). safe Navigate ( direction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }