package Ġcom . example . sv book market . activities Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . sv book market . R Ċ import Ġcom . example . sv book market . activities . model . User Deliver Address Ċ import Ġcom . example . sv book market . activities . view model . Create Address ViewModel Ċ import Ġcom . example . sv book market . databinding . Dialog Create Address Binding Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Fragment Ċ Ċ class ĠCreate Address Dialog ( private Ġval Ġlistener : ĠOn Create Address Listener ) Ġ: ĊĠĠĠ ĠBottom Sheet Dialog Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠDialog Create Address Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview model : ĠCreate Address ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠDialog Create Address Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġview model Ġ= ĠViewModel Provider ( this ). get ( Create Address ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġbinding . ed t Name ĊĠĠĠĠĠĠĠ Ġval Ġphone Ġ= Ġbinding . ed t PhoneNumber ĊĠĠĠĠĠĠĠ Ġval Ġlane Ġ= Ġbinding . ed t Address Lane ĊĠĠĠĠĠĠĠ Ġval Ġdistrict Ġ= Ġbinding . ed t District ĊĠĠĠĠĠĠĠ Ġval Ġcity Ġ= Ġbinding . ed t City ĊĊĠĠĠĠĠĠĠ Ġval Ġadd Btn Ġ= Ġbinding . btn Add Address ĊĊĊĠĠĠĠĠĠĠ Ġview model . create Address Form State . observe ( this , ĠObserver @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġit Ġ?: Ġreturn @ Observer ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Btn . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġit . is Data Valid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset BackgroundColor ( binding . root . resources . getColor ( R . color . blue _ dark )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . name Error Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . error Ġ= ĠgetString ( state . name Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . lane Error Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlane . error Ġ= ĠgetString ( state . lane Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . district Error Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistrict . error Ġ= ĠgetString ( state . district Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . city Error Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcity . error Ġ= ĠgetString ( state . city Error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( state . phone Error Ġ!= null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphone . error Ġ= ĠgetString ( state . phone Error ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġname . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . formData Changed ( bind ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġphone . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . formData Changed ( bind ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlane . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . formData Changed ( bind ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdistrict . do After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . formData Changed ( bind ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcity . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview model . formData Changed ( bind ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEditor Info . IME _ ACTION _ DONE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onCreate Address ( bind ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Create Address Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . onCreate Address ( bind ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Create Address Dialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbind (): ĠUser Deliver Address Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġname t Ġ= Ġbinding . ed t Name . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġph onet Ġ= Ġbinding . ed t PhoneNumber . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġlan et Ġ= Ġbinding . ed t Address Lane . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġdistrict t Ġ= Ġbinding . ed t District . text . toString () ĊĠĠĠĠĠĠĠ Ġval Ġcity t Ġ= Ġbinding . ed t City . text . toString () ĊĊĊĠĠĠĠĠĠĠ Ġreturn ĠUser Deliver Address ("", Ġname t , Ġph onet , Ġlan et , Ġdistrict t , Ġcity t ) ĊĠĠĠ Ġ} Ċ Ċ } ĊĊĊ