package Ġcom . example . recipes app . view . main _ activity . edit _ recipe Ċ Ċ import Ġandroid . app . Activity . RESULT _ OK Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . example . recipes app . R Ċ import Ġcom . example . recipes app . adapter . EditText Adapter Ċ import Ġcom . example . recipes app . model . entity . Level Ċ import Ġcom . example . recipes app . model . entity . Recipe Ċ import Ġcom . example . recipes app . utils . Photo Ċ import Ġcom . example . recipes app . utils . Recipe Menu Ċ import Ġcom . example . recipes app . utils . Time Converter Ċ import Ġcom . example . recipes app . view . base . Base Fragment Ċ import Ġcom . google . android . material . time picker . Material Time Picker Ċ import Ġcom . google . android . material . time picker . Time Format Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . the ar to f dev . ed mod o . crop per . Crop Image Ċ import Ġcom . the ar to f dev . ed mod o . crop per . Crop ImageView Ċ import Ġkotlinx . android . synt hetic . main . fragment _ edit _ recipe .* Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . lang . Exception Ċ import Ġjava . util .* Ċ Ċ class ĠEdit Recipe Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġedit Recipe ViewModel : ĠEdit Recipe ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlevel Menu : ĠRecipe Menu ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġme als Menu : ĠRecipe Menu ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġingredients ListAdapter : ĠEditText Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreparation ListAdapter : ĠEditText Adapter ĊĊĠĠĠ Ġprivate Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠ Ġprivate Ġvar Ġphoto : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠG ALL ERY _ REQUEST _ CODE Ġ= Ġ 1 0 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġedit Recipe ViewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider ( require Activity ()). get ( Edit Recipe ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġingredients ListAdapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEditText Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġp : ĠInt , Ġs : ĠString Ġ-> Ġedit Recipe ViewModel . update Ing redients ( p , Ġs ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġedit Recipe ViewModel . delete Ingredient ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġpreparation ListAdapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEditText Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġp : ĠInt , Ġs : ĠString Ġ-> Ġedit Recipe ViewModel . update Pre paration ( p , Ġs ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġedit Recipe ViewModel . delete Pre paration ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ edit _ recipe , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġsetup Data () ĊĠĠĠĠĠĠĠ Ġsetup Menus () ĊĊĠĠĠĠĠĠĠ Ġsetup Pick Click () ĊĠĠĠĠĠĠĠ Ġsetup Reset Click () ĊĠĠĠĠĠĠĠ Ġsetup Save Button Click () ĊĠĠĠĠĠĠĠ Ġsetup Name Text Change () ĊĠĠĠĠĠĠĠ Ġsetup Level Click () ĊĠĠĠĠĠĠĠ Ġsetup Time Click () ĊĠĠĠĠĠĠĠ Ġsetup Me als Click () ĊĠĠĠĠĠĠĠ Ġsetup Ing redients Add Click () ĊĠĠĠĠĠĠĠ Ġsetup Pre paration Add Click () ĊĊĠĠĠĠĠĠĠ Ġsetup Ing redients Click () ĊĠĠĠĠĠĠĠ Ġsetup Pre paration Click () ĊĠĠĠĠĠĠĠ Ġsetup Ing redients Observer () ĊĠĠĠĠĠĠĠ Ġsetup Pre paration Observer () ĊĊĠĠĠĠĠĠĠ Ġingredients _ re cyclerView . adapter Ġ= Ġingredients ListAdapter ĊĠĠĠĠĠĠĠ Ġpreparation _ re cyclerView . adapter Ġ= Ġpreparation ListAdapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG ALL ERY _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Image Crop ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠC rop Image . C ROP _ IMAGE _ ACTIVITY _ REQUEST _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠC rop Image . getActivity Result ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Photo ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Image Crop ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ ĠC rop Image . activity ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Guide lines ( Crop ImageView . Guide lines . ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set AspectRatio ( 1 5 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Crop Shape ( Crop ImageView . Crop Shape . RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. start ( require Context (), Ġthis ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Photo ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġphoto Ġ= ĠMedia Store . Images . Media . get Bitmap ( require Context (). content Resolver , Ġuri ) ĊĠĠĠĠĠĠĠ Ġif Ġ( photo !!. width Ġ> Ġ 1 1 2 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Ġ= ĠBitmap . create Scaled Bitmap ( photo !! , Ġ 1 1 2 5 , Ġ 7 5 0 , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠimageView _ edit _ recipe . setImage Bitmap ( photo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠRecipe . edit Recipe . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name _ textInput . text . toString () Ġ!= Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname _ textInput . setText ( it . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlvl Ġ= ĠLevel . values (). find Ġ{ Ġlvl Ġ-> Ġlvl . number Ġ== Ġit . level Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel _ textView . text Ġ= ĠgetString ( lvl . text _ id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel _ imageView . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Resources . get Drawable ( require Context (), Ġlvl . icon _ id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime _ textView . text Ġ= ĠTime Converter . long ToString ( it . time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme als _ textView . text Ġ= Ġit . me als . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto . set Photo ( it . image , Ġrequire Context (), ĠimageView _ edit _ recipe ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġingredients ListAdapter . set List ( it . ingredients ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreparation ListAdapter . set List ( it . pre paration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" Error ", Ġe . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Menus () Ġ{ ĊĠĠĠĠĠĠĠ Ġlevel Menu Ġ= ĠRecipe Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel _ button , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLevel . values (). map Ġ{ ĠgetString ( it . text _ id ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" level " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġme als Menu Ġ= ĠRecipe Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme als _ button , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 1 .. 1 0 ). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" me als " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Pick Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Image _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ P ICK , ĠMedia Store . Images . Media . INTERNAL _ CONTENT _ URI ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmime Types Ġ= ĠarrayOf (" image / jpeg ", Ġ" image / png ", Ġ" image / jpg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Intent . EXTRA _ MIME _ TYPES , Ġmime Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠG ALL ERY _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Reset Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Image _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠimageView _ edit _ recipe . setImage Resource ( R . drawable . meal _ example ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . set Edit Recipe ( Recipe . edit Recipe . value !!. copy ( image Ġ= Ġ"")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Save Button Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġsave _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrecipe Ġ= ĠRecipe . edit Recipe . value !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe . name . length Ġ>= Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe . ingredients . isEmpty () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . empty _ ingredients _ list )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe . pre paration . isEmpty () Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . empty _ pre paration _ list )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe . ingredients . contains ("") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . empty _ ingredients )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe . pre paration . contains ("") Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . empty _ pre paration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġupdate Recipes Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcondition Ġis Ġtrue Ġwhen Ġthe Ġrecipe Ġis Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe . id . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGenerate Ġrandom Ġuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecipe _ id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġ( auth . currentUser ?. email Ġ?: Ġ" anon ym ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecipe Ġ= Ġrecipe . copy ( id Ġ= Ġrecipe _ id , Ġauthor Ġ= Ġauthor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Recipes Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . add OrUpdate Recipe ( recipe , Ġupdate Recipes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate / Add Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġphoto !!. compress ( Bitmap . Compress Format . JPEG , Ġ 9 0 , Ġstream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= Ġstream . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġedit Recipe ViewModel . upload Photo ( recipe . id , ĠbyteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelete Ġphoto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recipe . image . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . delete Photo ( recipe . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Snackbar ( getString ( R . string . saved _ successfully )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġshow Snackbar ( getString ( R . string . name _ too _ short )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Name Text Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġname _ textInput . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! name _ textInput . text . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . edit Recipe . value ?. copy ( name Ġ= Ġname _ textInput . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠRecipe . set Edit Recipe ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Level Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġlevel _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Menu . show Menu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Time Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġtime _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpicker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Time Picker . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTime Format ( Time Format . CLOCK _ 2 4 H ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Hour ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Minute ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle Text ( R . string . select _ time _ desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker . add On Positive Button ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġh Ġ= Ġpicker . hour ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġpicker . minute ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠTime Converter . hour And Minute To Long ( h , Ġm ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . edit Recipe . value ?. copy ( time Ġ= Ġtime )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . set Edit Recipe ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker . show ( require FragmentManager (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Me als Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġme als _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġme als Menu . show Menu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ing redients Add Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Ingredient _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠRecipe . edit Recipe . value !!. ingredients ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . set Edit Recipe ( Recipe . edit Recipe . value !!. copy ( ingredients Ġ= Ġtemp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients ListAdapter . notify Item Inserted ( temp . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Pre paration Add Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Pre paration _ button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠRecipe . edit Recipe . value !!. pre paration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp . add ("") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecipe . set Edit Recipe ( Recipe . edit Recipe . value !!. copy ( pre paration Ġ= Ġtemp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreparation ListAdapter . notify Item Inserted ( temp . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ing redients Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġingredients _ constraint Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . change Visibility Of Ing redients () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Pre paration Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġpreparation _ constraint Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . change Visibility Of Pre paration () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Ing redients Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . visible Ing redients . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġingredients _ re cyclerView . visibility Ġ= Ġif Ġ( it ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Pre paration Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Recipe ViewModel . visible Pre paration . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreparation _ re cyclerView . visibility Ġ= Ġif Ġ( it ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }