package Ġorg . j dc . template . ux . in divid ua led it Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . datetime . date Picker Ċ import Ġcom . af ol le st ad . material dialogs . datetime . time Picker Ċ import Ġcom . af ol le st ad . material dialogs . lifecycle . lifecycle Owner Ċ import Ġcom . vik ings en . inject . view model . saved state . Saved State ViewModel Factory Ċ import Ġorg . j dc . template . R Ċ import Ġorg . j dc . template . databinding . Individual Edit Binding Ċ import Ġorg . j dc . template . ext . to Calendar Ċ import Ġorg . j dc . template . ext . to LocalDate Ċ import Ġorg . j dc . template . ext . to Local Time Ċ import Ġorg . j dc . template . inject . Injector Ċ import Ġorg . j dc . template . ui . fragment . Base Fragment Ċ import Ġorg . th reet en . bp . LocalDate Ċ import Ġorg . th reet en . bp . Local Time Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠIndividual Edit Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory Factory : ĠSaved State ViewModel Factory . Factory ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Individual Edit ViewModel > Ġ{ ĠviewModel Factory Factory . create ( this , Ġrequire Arguments ()) Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠIndividual Edit Binding ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠInject or . get (). inject ( this ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . individual _ edit , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= Ġthis @ Individual Edit Fragment . viewModel ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis @ Individual Edit Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġactivity ?. setTitle ( R . string . individual ) ĊĊĠĠĠĠĠĠĠ Ġsetup ViewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠEvents ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( event Ġin ĠviewModel . event Channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIndividual Edit ViewModel . Event . Individual Saved Ġ-> Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIndividual Edit ViewModel . Event . Show Birth Date Selection Ġ-> Ġshow Birth Date Selector ( event . date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIndividual Edit ViewModel . Event . Show Alarm Time Selection Ġ-> Ġshow Alarm Time Selector ( event . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIndividual Edit ViewModel . Event . Validation Save Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event . error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndividual Edit ViewModel . Field ValidationError . FIRST _ NAME _ REQUIRED Ġ-> Ġbinding . firstName Layout . error Ġ= ĠgetString ( event . error . errorMessage Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . individual _ edit _ menu , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ item _ save Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Individual () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Birth Date Selector ( date : ĠLocalDate ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( require Context ()). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Picker ( current Date Ġ= Ġdate . to Calendar ()) Ġ{ Ġ_, Ġnew Date Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . birth Date . set ( new Date . to LocalDate ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Alarm Time Selector ( time : ĠLocal Time ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Dialog ( require Context ()). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner ( this @ Individual Edit Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Picker ( currentTime Ġ= Ġtime . to Calendar (), Ġshow 2 4 Hours View Ġ= Ġfalse ) Ġ{ Ġ_, Ġnew Time Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . alarm Time . set ( new Time . to Local Time ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }