package Ġcom . hot . po cket doctor . presentation . t reatment Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . material . datepicker . Material DatePicker Ċ import Ġcom . google . android . material . time picker . Material Time Picker Ċ import Ġcom . google . android . material . time picker . Material Time Picker . INPUT _ MODE _ CLOCK Ċ import Ġcom . google . android . material . time picker . Time Format Ċ import Ġcom . hot . po cket doctor . R Ċ import Ġcom . hot . po cket doctor . databinding . Fragment Reservation Binding Ċ import Ġcom . hot . po cket doctor . presentation . base . Base Fragment Ċ import Ġcom . hot . po cket doctor . presentation . t reatment . view model . T reatment ViewModel Ċ import Ġcom . hot . po cket doctor . util . DateTime Utils Ċ import Ġcom . hot . po cket doctor . util . navigate Ċ import Ġorg . k oin . android x . view model . ext . android . shared ViewModel Ċ Ċ class ĠReser vation Fragment Ġ: ĊĠĠĠ ĠBase Fragment < Fragment Reservation Binding >( R . layout . fragment _ reservation ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtreatment ViewModel : ĠT reatment ViewModel Ġby Ġshared ViewModel () ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Selected Date : ĠLong ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcalendar DateTime : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdate Picker : ĠMaterial DatePicker < *> ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtime Picker : ĠMaterial Time Picker ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset DatePicker Button ClickListener () ĊĠĠĠĠĠĠĠ Ġset Make Reservation Button ClickListener () ĊĠĠĠĠĠĠĠ Ġset EditText Watcher () ĊĠĠĠĠĠĠĠ Ġset RadioButton ClickListener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset DatePicker Button ClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . iv DateTime Picker . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow DatePicker () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow DatePicker () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselected Date In Millis Ġ= Ġcurrent Selected Date Ġ?: ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġbuild DatePicker ( selected Date In Millis ) ĊĠĠĠĠĠĠĠ Ġdate Picker . show ( child FragmentManager , Ġ" DatePicker ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild DatePicker ( selected Date In Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdate Picker Ġ= ĠMaterial DatePicker . Builder . date Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Theme ( R . style . Material Calendar Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInput Mode ( Material DatePicker . INPUT _ MODE _ CAL END AR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text (" Please Ġselect Ġa Ġdate Ġfor Ġreservation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setSelection ( selected Date In Millis ). build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ Ġdate In Millis Ġ-> Ġon Date Selected ( date In Millis ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Negative Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġshould Ġselect Ġa Ġdate Ġfor Ġreservation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar DateTime Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Date Selected ( date In Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Selected Date Ġ= Ġdate In Millis ĊĠĠĠĠĠĠĠ Ġcalendar DateTime Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Utils . convert Millis To DateTime ( require NotNull ( current Selected Date )) ĊĊĠĠĠĠĠĠĠ Ġshow Time Picker () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Time Picker () Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Time Picker () ĊĠĠĠĠĠĠĠ Ġtime Picker . show ( child FragmentManager , Ġ" Time Picker ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Time Picker () Ġ{ ĊĠĠĠĠĠĠĠ Ġtime Picker Ġ= ĠMaterial Time Picker . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Format ( Time Format . CLOCK _ 2 4 H ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hour ( 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Minute ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text (" Please Ġselect Ġa Ġtime Ġfor Ġreservation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInput Mode ( INPUT _ MODE _ CLOCK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġ" Ġ${ this . hour }:${ this . minute }: 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar DateTime Ġ+= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset DateTime TextView ( calendar DateTime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment ViewModel . startTime Ġ= Ġcalendar DateTime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Negative Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġshould Ġselect Ġa Ġtime Ġfor Ġreservation ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalendar DateTime Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset DateTime TextView ( calendar DateTime : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( calendar DateTime Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected DateTime . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected DateTime . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Selected DateTime . text Ġ= Ġcalendar DateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset EditText Watcher () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Problem . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs : ĠCharSequence ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġafter : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . toString (). length Ġ<= Ġ 2 0 0 Ġ&& Ġs . toString (). isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Problem ErrMsg . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtreatment ViewModel . description Ġ= Ġs . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Reservation Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( s . toString (). isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Problem ErrMsg . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Problem ErrMsg . text Ġ= Ġ" You Ġshould Ġwrite Ġyour Ġproblem !" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Reservation Button ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( s . toString (). length Ġ> Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Problem ErrMsg . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Problem ErrMsg . text Ġ= Ġ" Should Ġless Ġthan Ġ 2 0 0 Ġcharacters ." ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Enable Reservation Button ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset RadioButton ClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . rg Contact Type . setOn Checked ChangeListener Ġ{ Ġ_, Ġchecked Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( checked Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ video Ġ-> Ġtreatment ViewModel . is Video Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . rb _ voice Ġ-> Ġtreatment ViewModel . is Video Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Enable Reservation Button ( isEnabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Reservation . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Reservation . setBackground Resource ( R . drawable . button _ primary _ round _ blue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Make Reservation Button ClickListener () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Reservation . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Reservation . setBackground Resource ( R . drawable . rectangle _ light _ gray _ radius _ 2 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Make Reservation Button ClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . btn Reservation . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Reservation Info () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Reservation ĠSuccessfully Ġsaved ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Main By Status () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Reservation Info () Ġ{ ĊĠĠĠĠĠĠĠ Ġtreatment ViewModel . post Reservation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Main By Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( t reatment ViewModel . is Reservation Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Reservation Ġsuccessfully Ġsaved .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate ( R . id . action _ reservation Fragment _ to _ main Activity ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Error Ġoccurred ! ĠPlease Ġtry Ġagain .", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }