package Ġtech . med ina . ad ich allenge . ui . review . detail Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġtech . med ina . ad ich allenge . R Ċ import Ġtech . med ina . ad ich allenge . databinding . Fragment Review Detail Binding Ċ import Ġtech . med ina . ad ich allenge . ui . common . Base Fragment Ċ import Ġtech . med ina . ad ich allenge . ui . product . detail . Product Detail Fragment Ċ import Ġtech . med ina . ad ich allenge . ui . review . Review ViewModel Ċ import Ġtech . med ina . ad ich allenge . ui . utils . visible Ċ Ċ class ĠReview Detail Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ MESSAGE Ġ= Ġ" review . message " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ RAT ING Ġ= Ġ" review . rating " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PRODUCT _ ID Ġ= Ġ" product . id " ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( productId : ĠString ): ĠReview Detail Fragment Ġ= ĠReview Detail Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . productId Ġ= ĠproductId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar ĠproductId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġval ĠviewModel : ĠReview ViewModel Ġby Ġview Models () ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment Review Detail Binding ĊĊĠĠĠ Ġoverride Ġfun Ġget Binding Root ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Review Detail Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit View ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġsetup Listeners () ĊĠĠĠĠĠĠĠ Ġinit Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . add Review Result . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Add Review Result ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . loader . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loader ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . error . text Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . putString ( KEY _ MESSAGE , Ġbinding . message . text . toString ()) ĊĠĠĠĠĠĠĠ Ġout State . put Int ( KEY _ RAT ING , Ġbinding . stars . progress ) ĊĠĠĠĠĠĠĠ ĠproductId ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout State . putString ( KEY _ PRODUCT _ ID , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ViewState Restore d ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on ViewState Restore d ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. getString ( KEY _ MESSAGE )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . message . append ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. getString ( KEY _ PRODUCT _ ID )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠproductId Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsavedInstanceState ?. getInt ( KEY _ RAT ING )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . stars . progress Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . toolbar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation Icon Ġ= ĠContext Compat . get Drawable ( require Context (), ĠR . drawable . ic _ arrow _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation OnClickListener Ġ{ Ġbase Activity . finish () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// LIST EN ERS ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . stars . setOn Rating Bar ChangeListener Ġ{ Ġ_, Ġrating , Ġfrom User Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from User ) Ġbinding . rating . text Ġ= Ġrating . toInt (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . button Add Review . setOnClickListener (:: on Add Review Clicked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// RESULTS ĊĊĠĠĠ Ġprivate Ġfun Ġon Add Review Result ( result : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . product _ review _ message _ success )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Activity . finish () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . error . text Ġ= ĠgetString ( R . string . product _ review _ message _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// CLICK ĠMETHO DS ĊĊĠĠĠ Ġprivate Ġfun Ġon Add Review Clicked ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( productId Ġ== Ġnull ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġrating Ġ= Ġbinding . stars . progress ĊĠĠĠĠĠĠĠ Ġif Ġ( rating Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . product _ review _ message _ rating )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġbinding . message . text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( message . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message ( getString ( R . string . product _ review _ message _ text )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . add Product Review ( productId !! , Ġrating , Ġmessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loader ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . progress . visible ( show ) ĊĠĠĠ Ġ} Ċ Ċ }